Прежде всего, извините за мой английский и спасибо за ваше терпение.
Я пытаюсь сделать классификатор чат-ботов с диалоговым движком.Текущий конвейер выглядит следующим образом:
Raw_user_input -> preprocessing -> classification -> dialog_engine -> bot_answer
Механизм диалога пересчитывает оценки классификатора в зависимости от состояния диалога.
Проблема в том, что у меня есть похожие фразы в разных классах,Например:
Если бот спрашивает: Can you provide more information about yourself?
Ответ пользователя: I can
// означает «да».Ответ «да» также допускается
Но если бот спрашивает: Do you want to join our ...<whatever>
Ответ пользователя: I do
// «Да» также разрешено, но «Я могу» не появляетсяв наборе поездов.
Итак, у меня есть несколько общих фраз в словах 'provide_info_yes', 'provide_info_no', 'join_yes', 'join_no'.
Когда дело доходит до классификации, и пользователь отвечает «да», я получил следующие результаты:
intents: [other_int1, other_int2, provide_info_yes, provide_info_no, join_yes, join_no]
scores: [0.001, 0.003, 0.21, 0.03, 0.75, 0.006]
(оценки не являются реальными, но представляет проблему) Я получил 0,21 для 'provide_info_yes' и 0,75 для 'join_yes', но ожидаемый результат составляет 0,5 / 0,5 (меньше или больше), и механизм диалога будет пересчитывать их в зависимости от состояния диалога (если бот спросил опредоставляя информацию, оценки будут 80/20)
В настоящее время я использую классификатор SVC от sklrean с преобразователем TF_IDF.TF_IDF изучается на свалках Википедии.Я попытался использовать классификатор KNN, и именно там я получил ожидаемый результат (50/50), но я не хочу его использовать, потому что мне не нравится его поведение в некоторых других случаях.
Не могли бы вы дать мне несколько советов о том, что делать с этой проблемой?И я не уверен, что все делаю правильно.Итак, можете ли вы дать несколько советов о том, как правильно делать то, что я хочу?