Проблемы и решения
Transformer
Плохо работает с отрицательными примерами
Классификатор предполагает, что ему известны все интенты. В итоге классификатор с большим весом относит фразу к какому-либо интенту, хотя фраза не подходит ни под один из них.
Проблема часто встречается у Transformer multi.
Решение
-
Создайте группу интентов
NoMatch
. -
В группу добавляйте интенты для фраз, которые классификатор ошибочно относит к другим интентам.
Заполняйте эту группу интентов на основе логов реальных диалогов. Такой подход позволит постепенно набрать тренировочные фразы для новой тематики, ее можно будет потом добавить в бота.
-
Добавьте в сценарий активацию по
intentGroup: /NoMatch
.
Плохо работает с похожими интентами
Классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.
Также классификатор может разделять вес между интентами, из-за чего ни один из них не пройдет порог срабатывания.
Решение
- Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
- Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
- Не рекомендуется использовать правила классификации. После фильтрации результатов может не остаться ни одного интента с достаточным весом.
Не распознает синонимы
Модели доступна общеязыковая синонимия, но могут быть плохо знакомы синонимы, специфичные для тематики вашего проекта.
Решение
Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.
Запросы попадают в неправильные интенты из-за второстепенных слов
Возможная причина — дисбаланс второстепенных слов в интентах.
Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.
Решение
Варианты:
- Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
- Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
- Составьте словарь стоп-слов и очищайте запрос клиента в обработчике
preMatch
.
Deep Learning
Длинные фразы распознаются с очень маленьким весом (0–0.1)
Алгоритм принимает во внимание все токены, которые есть в запросе. Чем больше токенов, тем тяжелее провести классификацию.
Решение
Научите алгоритм игнорировать второстепенные слова в запросе: приветствия, формулы вежливости и другие.
-
Добавьте в тренировочные фразы второстепенные слова и обороты, которые вы хотите игнорировать. Они должны быть равномерно распределены по интентам, чтобы алгоритм не посчитал их важными.
-
Увеличьте значение параметра
emb_drp
, чтобы искусственно отключить часть весов и избежать переобучения.
Плохо работает с отрицательными примерами
Классификатор предполагает, что ему известны все интенты. В итоге классификатор с большим весом относит фразу к какому-либо интенту, хотя фраза не подходит ни под один из них.
Решение
-
Создайте группу интентов
NoMatch
. -
В группу добавляйте интенты для фраз, которые классификатор ошибочно относит к другим интентам.
Заполняйте эту группу интентов на основе логов реальных диалогов. Такой подход позволит постепенно набрать тренировочные фразы для новой тематики, ее можно будет потом добавить в бота.
-
Добавьте в сценарий активацию по
intentGroup: /NoMatch
.
Плохо работает с похожими интентами
Классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.
Решение
- Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
- Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
- Не рекомендуется использовать правила классификации. После фильтрации результатов может не остаться ни одного интента с достаточным весом.
Буквы другого алфавита всегда попадают в один интент
Например, латинские буквы всегда могут попадать в один интент. Это происходит, так как алгоритм использует векторы для одного языка.
Решение
- Включите параметр
multi
. При этом могут снизиться веса всех запросов. - Используйте метод
$nlp.fixKeyboardLayout
, если пользователь перепутал раскладку.
Низкое качество на маленьком датасете
Классификатору нужно увидеть достаточное количество фраз, чтобы сформировать представление об интенте.
Решение
Увеличьте значение n_epochs
. Параметр определяет, сколько раз классификатор видит тренировочные фразы при обучении.
- Это влияет на скорость обучения, поэтому не рекомендуется увеличивать параметр на больших датасетах.
- При слишком высоком значении модель может переобучиться — она будет хорошо работать на примерах из датасета, но плохо на любых других фразах.
Не распознает синонимы
Векторы обучены на подсловах. Модели в некоторой степени доступна общеязыковая синонимия, но могут быть плохо знакомы синонимы для тематики вашего проекта. Также модель может плохо понимать сочетаемость слов.
Решение
Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.
Запросы попадают в неправильные интенты из-за второстепенных слов
Возможная причина — дисбаланс второстепенных слов в интентах.
Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.
Решение
Варианты:
- Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
- Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
- Составьте словарь стоп-слов и очищайте запрос клиента в обработчике
preMatch
.
Classic ML
Плохо работает с похожими интентами
Только один интент может иметь достаточно большой вес.
Например, классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.
Решение
- Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
- Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
- Используйте правила классификации.
Большинство запросов попадают в один интент
Классификатору нужно увидеть достаточное количество фраз, чтобы сформировать представление об интенте. Классы, в которых больше примеров, перетягивают на себя веса.
Решение
Сделайте интенты сбалансированными:
- В датасете не должно быть интентов, в которых фраз значительно больше или меньше, чем в других.
- Если какой-то большой интент включает в себя несколько смыслов или формулировок, можно его разделить на несколько.
- Если какие-то маленькие интенты отличаются только наличием сущности, можно объединить их в один интент. В сценарии определяйте намерение клиента по сработавшей сущности.
Не распознает синонимы
Векторы строятся на основе датасета, поэтому модели недоступна общеязыковая синонимия.
Решение
Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.
Запросы попадают в неправильные интенты из-за второстепенных слов
Возможная причина — дисбаланс второстепенных слов в интентах.
Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.
Решение
Варианты:
- Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
- Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
- Составьте словарь стоп-слов и очищайте запрос клиента в обработчике
preMatch
.