Итак, я делаю своего домашнего помощника и пытаюсь создать многоцелевую систему классификации.Однако я не могу найти способ разделить запрос, указанный пользователем, на несколько различных намерений в запросе.
Например:
I have my data for one of my intents (same format for all)
{"intent_name": "music.off" , "examples": ["turn off the music" , "kill
the music" , "cut the music"]}
, и запрос, указанный пользователем, будетбыть:
'dim the lights, cut the music and play Black Mirror on tv'
Я хочу разбить предложение на их индивидуальные намерения, такие как:
['dim the lights', 'cut the music', 'play black mirror on tv']
однако я могу 't просто используйте re.split
в предложении с and
и ,
в качестве разделителей для разделения, как если бы пользователь спрашивает:
'turn the lights off in the living room, dining room, kitchen and bedroom'
это будет разбито на
['turn the lights off in the living room', 'kitchen', 'dining room', 'bedroom']
, которые не могут быть использованы с моим определением намерений
это моя проблема, заранее спасибо
ОБНОВЛЕНИЕ
Итак, я дошел до этого с моим кодом, он может получить примеры из моих данных и идентифицировать различные намерения внутри, как мне хотелось бы, однако он не разделяет части исходного запроса на их отдельные намерения и просто совпадает.
import nltk
import spacy
import os
import json
#import difflib
#import substring
#import re
#from fuzzysearch import find_near_matches
#from fuzzywuzzy import process
text = "dim the lights, shut down the music and play White Collar"
commands = []
def get_matches():
for root, dirs, files in os.walk("./data"):
for filename in files:
f = open(f"./data/{filename}" , "r")
file_ = f.read()
data = json.loads(file_)
choices.append(data["examples"])
for set_ in choices:
command = process.extract(text, set_ , limit=1)
commands.append(command)
print(f"all commands : {commands}")
это возвращает [('dim the lights') , ('turn off the music') , ('play Black Mirror')]
, что является правильным намерением, но я не могу узнать, какая часть запроса относится к каждому намерению - это главная проблема
мои данныеследующим образом, пока очень просто, пока я не выясню метод:
play.json
{"intent_name": "play.device" , "examples" : ["play Black Mirror" , "play Netflix on tv" , "can you please stream Stranger Things"]}
music.json
{"intent_name": "music.off" , "examples": ["turn off the music" , "cut the music" , "kill the music"]}
lights.json
{"intent_name": "lights.dim" , "examples" : ["dim the lights" , "turn down the lights" , "lower the brightness"]}