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

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

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 с намерениями необходимо время от времени тестировать.