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

Обучение интентов

Через интенты доступны два способа обучить бота понимать естественный язык:

  • Паттерны — формальные правила для сопоставления запросов специальным шаблонам. Например, {[~ты/~вы] (~любить/нравится) * (спб/питер*/[санкт] *петербург*)} — паттерн, совпадение по которому с высокой вероятностью означает, что бота спрашивают об отношении к Санкт-Петербургу.

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

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

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

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

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

Алгоритмы и размер выборки

Вы можете узнать о различиях алгоритмов и посмотреть рекомендации для количества фраз в статье Сравнение алгоритмов.

Настроить поиск совпадений

Включите поиск, чтобы избежать дубликатов, а также похожих тренировочных фраз и ответов в интентах:

  1. Перейдите на главную страницу JAICP и найдите нужный проект в секции Мои проекты.
  2. Нажмите  в карточке проекта → Настройки проекта.
  3. Найдите Поиск совпадений на вкладке Классификатор и переведите переключатели в активное положение. По умолчанию тренировочные фразы могут совпадать на 50%, а ответы — на 80%.
предупреждение
Поиск совпадений работает только на обученном классификаторе. Чтобы обучить классификатор на последней версии выборки, нажимайте Тестировать после каждого обновления интентов.

Поиск совпадений выполняется при вводе новых тренировочных фраз и ответов, а также при их редактировании.

При сохранении фразы происходит классификация. Если у фразы высокий вес совпадения с другими интентами, то вы получите предупреждение со списком этих интентов.

При сохранении ответ сравнивается с ответами из других интентов по мере Жаккара.

Рассмотрим на примере, как использовать поиск совпадений:

Создайте интент /Хочу купить курс. Заполните его тренировочными фразами и укажите ответ:

  • Интересуют эти обучающие курсы
  • Мне нужно купить ваш курс
  • Я бы хотел приобрести у вас курс
  • Хочу купить образовательный курс

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

После этого создайте интент /Хочу оформить возврат и заполните его.

По умолчанию фразы могут совпадать на 50%, а ответы — на 80%. Если превысить эти значения, появятся предупреждения:

Совпадение в ответе интента

Совпадение во фразах интента

Вы можете:

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

Удалять дубликаты

Алгоритмы Classic ML и Deep Learning чувствительны к дубликатам тренировочных фраз в интентах. Вы можете убедиться в этом следующим образом:

  1. Создайте новый проект, в настройках проекта выберите классификатор Deep Learning.
  2. Перейдите в меню NLUИнтенты и выберите интент привет. В нем одна тренировочная фраза привет.
  3. Нажмите Тестировать и введите запрос с похожим смыслом, например всем привет.
  4. Закройте тестовый виджет, добавьте в интент еще одну тренировочную фразу привет и повторите шаг 3.

После того как вы добавили дубликат, вес совпадения одного и того же запроса увеличился.

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

Алгоритмы STS и Transformer вычисляют семантическую близость запроса с каждой тренировочной фразой по отдельности. Если вы проделаете тот же эксперимент с проектом на STS или Transformer, то убедитесь, что они нечувствительны к дубликатам и не добавляют вес совпадения интентам с дублированными фразами. Однако лучше избегать их.

Избегать слишком похожих фраз

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

  • возможно ли запланировать встречу в банке
  • как записаться к менеджеру в отделение
  • как записаться на визит к специалисту банка в сочи
  • как можно записаться на визит в банк
  • могу ли я записаться на посещение отделения
  • можно встречу в банке назначить на 4 февраля

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

подсказка
Фразы в обучающей выборке должны быть достаточно разнообразны и представлять различные варианты выражения одного и того же смысла.

Чистить стоп-слова

Из тренировочных фраз полезно удалять стоп-слова — высокочастотные неспециализированные слова, которые могут встретиться в запросах на любую тему.

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

Часто встречающиеся группы стоп-слов:

  • Приветствия и прощания: здравствуйте, пока
  • Слова просьбы и благодарности: пожалуйста, спасибо
  • Модальные слова: можно, хочу
  • Целые фразовые комплексы: у меня вопрос, я хотела бы уточнить

Вы можете взять готовые словари стоп-слов (например, из одного из репозиториев проекта stopwords-iso) и расширить их словами, специфичными для вашего набора данных.

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