Перейти к содержанию

Формирование диалогов#

Wisebot — это полнофункциональная диалоговая платформа с интуитивно понятным интерфейсом для создания контекстно-зависимых виртуальных помощников.

Wisebot глубоко интегрирован с Rasa. Движок диалоговых систем RASA при помощи современных методов глубокого обучения позволяет создавать чат-боты для различных предметных задач.

RASA состоит из двух частей:

  • NLU (понимание естественного языка)
  • Core (логика диалогов)

Создание намерений#

Понятие намерения#

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

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

Image

По возможности, намерения должны быть хорошо различимы. Например, система будет путаться, если в одном намерении "Да" будут примеры "да", "конечно", а во втором намерении "согласие" — примеры "да, согласен", "конечно, буду". В таком случае лучше объединить эти намерения в одно.

Правила внесения намерений в базу чат-бота через интерфейс Wisebot:

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

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

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

  • Прорабатывайте и анализируйте основные паттерны поведения пользователей в темах, проблемах и сценариях, для которых вы обучаете NLU.

2. Наполнение базы намерений#

Создавать намерения можно не только через файл nlu.yml, но и через интерфейс Wisebot. Чтобы добавить намерение:

Шаг 1. Перейдите в интерфейс Wisebot и в меню слева убедитесь, что настраиваете нужного бота. Должно отображаться его имя (например, Bot1).

Image

Шаг 2. В разделе NLU перейдите в поле «Пользователь говорит…».

Шаг 3. Введите тренировочную фразу в обучающих данных, например, "когда начинается учебный год в МарГУ".

Image

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

Шаг 5. Фразе не присваивается никакое намерение. Чтобы присвоить намерение нажмите на кнопку "никакого намерения", затем на поле "Фильтровать или создать".

Image

Шаг 6. Введите новое намерение «начало учебного года» и нажмите «Создать новое намерение».

Image

Шаг 7. Фраза перешла в намерение «начало учебного года». Нажмите «Создать новое намерение».

Image

Можно наблюдать успешное добавление в общий список намерений.

Image

Так происходит процесс добавления намерений. Например, на данном изображении показана база намерений «начало учебного года». После добавления или создания намерений и сущностей необходимо обучить бота. Для этого нажмите на кнопку «Тренировать», которая находится в правом верхнем углу.

Image

Обучение намерений#

Для определения фразы пользователя к одному из намерений в NLU-модуле обучается сложная нейронная сеть, для работы которой входные тексты превращаются в векторы (массивы) вещественных чисел, называемых признаками (features).

При построении вектора признаков используются:

  • метод мешка слов (bag of words);
  • векторизация слов с помощью embedding (word2vec);
  • N-граммы букв (отдельные буквы N=1, пары последовательных букв N=2 и т.д.).

Соответствующие настройки в файле config.yml позволяют использовать предобученные для данного языка векторы слов, что позволяет NLU понимать синонимы и близкие по смыслу слова, не описанные в примерах intent. Благодаря N-граммам, RASA достаточно эффективно борется с опечатками в словах.

Чем больше приведено примеров для данного намерения, тем лучше (обычно) обучается система. Однако существует опасность пересечения похожих фраз из различных намерений, что может снизить качество классификации. Поэтому файл data/nlu.yml с намерениями необходимо время от времени тестировать.