Перейти к основному содержимому

Проблемы и решения

Transformer

Плохо работает с отрицательными примерами

Классификатор предполагает, что ему известны все интенты. В итоге классификатор с большим весом относит фразу к какому-либо интенту, хотя фраза не подходит ни под один из них.

Проблема часто встречается у Transformer multi.

Решение

  1. Создайте группу интентов NoMatch.

  2. В группу добавляйте интенты для фраз, которые классификатор ошибочно относит к другим интентам.

    Заполняйте эту группу интентов на основе логов реальных диалогов. Такой подход позволит постепенно набрать тренировочные фразы для новой тематики, ее можно будет потом добавить в бота.

  3. Добавьте в сценарий активацию по intentGroup: /NoMatch.

Плохо работает с похожими интентами

Классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.

Также классификатор может разделять вес между интентами, из-за чего ни один из них не пройдет порог срабатывания.

Решение

  • Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
  • Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
  • Не рекомендуется использовать правила классификации. После фильтрации результатов может не остаться ни одного интента с достаточным весом.

Не распознает синонимы

Модели доступна общеязыковая синонимия, но могут быть плохо знакомы синонимы, специфичные для тематики вашего проекта.

Решение

Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.

Запросы попадают в неправильные интенты из-за второстепенных слов

Возможная причина — дисбаланс второстепенных слов в интентах.

Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.

Решение

Варианты:

  • Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
  • Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
  • Составьте словарь стоп-слов и очищайте запрос клиента в обработчике preMatch.

Deep Learning

Длинные фразы распознаются с очень маленьким весом (0–0.1)

Алгоритм принимает во внимание все токены, которые есть в запросе. Чем больше токенов, тем тяжелее провести классификацию.

Решение

Научите алгоритм игнорировать второстепенные слова в запросе: приветствия, формулы вежливости и другие.

  • Добавьте в тренировочные фразы второстепенные слова и обороты, которые вы хотите игнорировать. Они должны быть равномерно распределены по интентам, чтобы алгоритм не посчитал их важными.

  • Увеличьте значение параметра emb_drp, чтобы искусственно отключить часть весов и избежать переобучения.

Плохо работает с отрицательными примерами

Классификатор предполагает, что ему известны все интенты. В итоге классификатор с большим весом относит фразу к какому-либо интенту, хотя фраза не подходит ни под один из них.

Решение

  1. Создайте группу интентов NoMatch.

  2. В группу добавляйте интенты для фраз, которые классификатор ошибочно относит к другим интентам.

    Заполняйте эту группу интентов на основе логов реальных диалогов. Такой подход позволит постепенно набрать тренировочные фразы для новой тематики, ее можно будет потом добавить в бота.

  3. Добавьте в сценарий активацию по intentGroup: /NoMatch.

Плохо работает с похожими интентами

Классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.

Решение

  • Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
  • Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
  • Не рекомендуется использовать правила классификации. После фильтрации результатов может не остаться ни одного интента с достаточным весом.

Буквы другого алфавита всегда попадают в один интент

Например, латинские буквы всегда могут попадать в один интент. Это происходит, так как алгоритм использует векторы для одного языка.

Решение

  • Включите параметр multi. При этом могут снизиться веса всех запросов.
  • Используйте метод $nlp.fixKeyboardLayout, если пользователь перепутал раскладку.

Низкое качество на маленьком датасете

Классификатору нужно увидеть достаточное количество фраз, чтобы сформировать представление об интенте.

Решение

Увеличьте значение n_epochs. Параметр определяет, сколько раз классификатор видит тренировочные фразы при обучении.

  • Это влияет на скорость обучения, поэтому не рекомендуется увеличивать параметр на больших датасетах.
  • При слишком высоком значении модель может переобучиться — она будет хорошо работать на примерах из датасета, но плохо на любых других фразах.

Не распознает синонимы

Векторы обучены на подсловах. Модели в некоторой степени доступна общеязыковая синонимия, но могут быть плохо знакомы синонимы для тематики вашего проекта. Также модель может плохо понимать сочетаемость слов.

Решение

Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.

Запросы попадают в неправильные интенты из-за второстепенных слов

Возможная причина — дисбаланс второстепенных слов в интентах.

Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.

Решение

Варианты:

  • Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
  • Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
  • Составьте словарь стоп-слов и очищайте запрос клиента в обработчике preMatch.

Classic ML

Плохо работает с похожими интентами

Только один интент может иметь достаточно большой вес.

Например, классификатор может путать интенты, в которых отличается одна сущность, например: оформить кредитную карту и оформить дебетовую карту, согласие на разговор и согласие на предложение.

Решение

  • Объедините похожие интенты в один. В сценарии определяйте намерение клиента по сработавшей сущности.
  • Используйте паттерны вместо интентов в локальных переходах и уточнениях в сценарии.
  • Используйте правила классификации.

Большинство запросов попадают в один интент

Классификатору нужно увидеть достаточное количество фраз, чтобы сформировать представление об интенте. Классы, в которых больше примеров, перетягивают на себя веса.

Решение

Сделайте интенты сбалансированными:

  • В датасете не должно быть интентов, в которых фраз значительно больше или меньше, чем в других.
  • Если какой-то большой интент включает в себя несколько смыслов или формулировок, можно его разделить на несколько.
  • Если какие-то маленькие интенты отличаются только наличием сущности, можно объединить их в один интент. В сценарии определяйте намерение клиента по сработавшей сущности.

Не распознает синонимы

Векторы строятся на основе датасета, поэтому модели недоступна общеязыковая синонимия.

Решение

Добавьте в тренировочные фразы больше формулировок с разными синонимами и сочетаниями слов.

Запросы попадают в неправильные интенты из-за второстепенных слов

Возможная причина — дисбаланс второстепенных слов в интентах.

Если в обучающих фразах мало второстепенных слов, то классификатор воспринимает эти слова важными для интента.

Решение

Варианты:

  • Добавьте во фразы много различных второстепенных слов. Второстепенные слова должны быть распределены по интентам равномерно.
  • Уберите все второстепенные слова из датасета, сделайте фразы максимально семантически нагруженными.
  • Составьте словарь стоп-слов и очищайте запрос клиента в обработчике preMatch.