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

Имейте в виду, что я поделился всем кодом для каждой модели, обученной на Github. Не стесняйтесь изучить его и использовать для создания собственного чат-бота Rasa Core или протестировать мой, если хотите.

Докеризация

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

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

Давайте подготовим данные для обучения

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

Как вы можете видеть здесь множество намерений / действий и шаблонов. Вы также заметите некоторые настраиваемые действия. Поскольку я использую ядро ​​Rasa 0.11.12, я буду использовать новое интерактивное обучение для обучения моей модели.

Итак, как это сделать?

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

Важно подумать об архитектуре вашего чат-бота. Давайте нарисуем простой, поскольку у меня на самом деле нет клиентов, для которых я создаю этого чат-бота, я создам фиктивный бэкэнд, где, скажем так - я шеф-повар 👨‍🍳 (я наполовину порядочный, когда дело доходит до готовки !!)

Теперь, когда у нас есть все элементы, можно приступить к обучению нашего чат-бота.

Убедитесь, что здесь ваш сервер действий и сервер шаблонов уже запущены. Вы найдете все элементы в Readme

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

Хорошо, давайте начнем с нашей первой модели. Мы будем использовать все значения по умолчанию, предоставленные Rasa, чтобы настройки выглядели так. (Имейте в виду то, что мы обсуждали в предыдущей части, все гиперпараметры)

Тест 1 - политики по умолчанию

Max History = 5
Augmentation_Factor= 50
Policies - KerasPolicy(MaxHistoryTrackerFeaturizer(BinarySingleStateFeaturizer(),max_history=5))
FallbackPolicy(fallback_args.get("nlu_threshold",0.0),fallback_args.get("core_threshold",0.0),fallback_args.get("fallback_action_name",DEFAULT_FALLBACK_ACTION))
MemoizationPolicy(max_history=5)

Давайте потренируемся с помощью команды по умолчанию

python -m rasa_core.train -d data/Demo-Bot/domain.yml -s data/Demo-Bot/story/story.md -o data/Demo-Bot/models/core/defaultPolicy

Вот результаты, я запускаю небольшую демонстрацию на своей странице в facebook.

Обратите внимание, что я буду запускать намерения напрямую, используя / intent_name {"slot_name": "value"}

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

Давайте продолжим и создадим новый ансамбль правил

Тест 2 - Политика мемоизации

Max History = 0
Augmentation_Factor= 100
Policies -
MemoizationPolicy(max_history=0)

Я обновил стандартный сценарий поезда Rasa с некоторыми собственными настройками.

python data/Demo-bot/train_Mem.py -d data/Demo-Bot/domain.yml -s data/Demo-Bot/story/story.md -o data/Demo-Bot/models/core/MemPolicy --augmentation 100 --history 0

Посмотрим, как в этом случае отреагирует бот 🤔

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

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

Тест 3 - Политика Keras

Max History = 3
Augmentation_Factor= 100
Policies -
KerasPolicy(MaxHistoryTrackerFeaturizer(BinarySingleStateFeaturizer(),max_history=3))
epochs - 100

Я обновил стандартный сценарий поезда Rasa с некоторыми собственными настройками.

python data/Demo-bot/train_Keras.py -d data/Demo-Bot/domain.yml -s data/Demo-Bot/story/story.md -o data/Demo-Bot/models/core/KerasPolicy --augmentation 100 --history 3

Итак, теперь мы будем полагаться только на машинное обучение. Я поместил max_history, поскольку это модель seq2seq (RNN), прошлые действия могут влиять на то, что нужно предсказать дальше. Наша история кажется довольно подвижной между последними тремя шагами разговора.

Посмотрим на результаты сейчас

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

Заключение

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

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

Весь код присутствует в репозитории Github



Не стесняйтесь связаться со мной в LinkedIn