Формирование диалогов#
Wisebot — это полнофункциональная диалоговая платформа с интуитивно понятным интерфейсом для создания контекстно-зависимых виртуальных помощников.
Wisebot глубоко интегрирован с Rasa. Движок диалоговых систем RASA при помощи современных методов глубокого обучения позволяет создавать чат-боты для различных предметных задач.
RASA состоит из двух частей:
- NLU (понимание естественного языка)
- Core (логика диалогов)
Создание намерений#
Понятие намерения#
Чтобы помощник мог распознавать, что говорит пользователь, независимо от того, как пользователь формулирует свое сообщение, необходимо предоставить примеры сообщений, из которых помощник может учиться. Поэтому группируем эти примеры в соответствии с идеей или целью, которую выражает сообщение, что также называется намерением (intent). Примеры намерений могут включать: приветствие, согласие, отказ, вопрос об имени и многое другое.
Для каждого намерения перечисляются его примеры, чтобы система поняла, что от неё требуется. Например, фразы "Доброго времени суток" или "Доброе утро" могут принадлежать одному намерению с названием приветствие. Независимо от формы приветствия, ядро RASA оперирует только именем намерения приветствие.
По возможности, намерения должны быть хорошо различимы. Например, система будет путаться, если в одном намерении "Да" будут примеры "да", "конечно", а во втором намерении "согласие" — примеры "да, согласен", "конечно, буду". В таком случае лучше объединить эти намерения в одно.
Правила внесения намерений в базу чат-бота через интерфейс Wisebot:
- Избегайте намерений с крайне низким числом примеров. В противном случае NLU не сможет полноценно понять суть намерения и корректно его определять в ситуациях, когда текст пользователя схож с обучающими примерами.
-
Избегайте сильного разброса в количестве обучающих примеров среди разных намерений.
-
Создавайте разнообразные обучающие примеры. Примеры для намерения должны включать не только ключевые слова, но и разнообразный контекст. Например, для намерения "оплатить картой" используйте фразы: "как оплатить", "хочу оплатить картой", "можно ли оплатить", "хотел бы оплатить картой", "оплату картой принимаете", "вы карту принимаете".
-
Не используйте одинаковые или очень похожие обучающие примеры в разных намерениях. Это приведёт к ошибкам при распознавании намерений, так как NLU будет сложно определить, какое именно намерение имеется в виду.
-
Прорабатывайте и анализируйте основные паттерны поведения пользователей в темах, проблемах и сценариях, для которых вы обучаете NLU.
2. Наполнение базы намерений#
Создавать намерения можно не только через файл nlu.yml
, но и через интерфейс Wisebot. Чтобы добавить намерение:
Шаг 1. Перейдите в интерфейс Wisebot и в меню слева убедитесь, что настраиваете нужного бота. Должно отображаться его имя (например, Bot1).
Шаг 2. В разделе NLU перейдите в поле «Пользователь говорит…».
Шаг 3. Введите тренировочную фразу в обучающих данных, например, "когда начинается учебный год в МарГУ".
Шаг 4. Нажмите на кнопку ENTER, чтобы добавить или отредактировать пример. Тренировочная фраза добавится в намерения.
Шаг 5. Фразе не присваивается никакое намерение. Чтобы присвоить намерение нажмите на кнопку "никакого намерения", затем на поле "Фильтровать или создать".
Шаг 6. Введите новое намерение «начало учебного года» и нажмите «Создать новое намерение».
Шаг 7. Фраза перешла в намерение «начало учебного года». Нажмите «Создать новое намерение».
Можно наблюдать успешное добавление в общий список намерений.
Так происходит процесс добавления намерений. Например, на данном изображении показана база намерений «начало учебного года». После добавления или создания намерений и сущностей необходимо обучить бота. Для этого нажмите на кнопку «Тренировать», которая находится в правом верхнем углу.
Обучение намерений#
Для определения фразы пользователя к одному из намерений в NLU-модуле обучается сложная нейронная сеть, для работы которой входные тексты превращаются в векторы (массивы) вещественных чисел, называемых признаками (features).
При построении вектора признаков используются:
- метод мешка слов (bag of words);
- векторизация слов с помощью embedding (word2vec);
- N-граммы букв (отдельные буквы N=1, пары последовательных букв N=2 и т.д.).
Соответствующие настройки в файле config.yml
позволяют использовать предобученные для данного языка векторы слов, что позволяет NLU понимать синонимы и близкие по смыслу слова, не описанные в примерах intent. Благодаря N-граммам, RASA достаточно эффективно борется с опечатками в словах.
Чем больше приведено примеров для данного намерения, тем лучше (обычно) обучается система. Однако существует опасность пересечения похожих фраз из различных намерений, что может снизить качество классификации. Поэтому файл data/nlu.yml
с намерениями необходимо время от времени тестировать.