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

Если вы видите таких крупных игроков, как IBM, Facebook, Google, Microsoft или Amazon, все они активно работают над этим, и каждый создает свою собственную структуру. Я уверен, что вы, должно быть, думаете, почему я предпочел Расу другим. Если я скажу вам откровенно, такой причины нет, за исключением того, что мне нужен фреймворк с открытым исходным кодом, который может предоставить мне достаточный контроль при создании бота. Бот, который может понять намерения пользователя, учиться на нем, разумно реагировать и выполнять действия, если это необходимо, и все это с помощью эффективного механизма обучения. Эти требования заставили меня использовать Rasa Stack для создания своего первого чат-бота, который я назвал Wall-E (Моя любовь к фильму Wall-E :))

Теперь давайте сначала разберемся, что такое Rasa Stack и что он предоставляет -

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

Раса состоит из двух компонентов -

Rasa NLU - библиотека для понимания естественного языка (NLU), которая классифицирует намерения и извлекает сущность из пользовательского ввода и помогает боту чтобы понять, что говорит пользователь.

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

NLU и Core независимы, и можно использовать NLU без Core, и наоборот. Хотя Раса рекомендует использовать оба.

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

Намерение - Намерение - это не что иное, как цель пользователя. Например, если пользователь говорит «Зарезервировать столик в Cliff House сегодня вечером», намерение может быть классифицировано как зарезервировать столик.

Сущность - Сущность предназначена для извлечения полезной информации из пользовательского ввода. В приведенном выше примере «Зарезервируйте столик в Cliff House сегодня вечером» извлеченными объектами будут место и время. Место - Клифф Хаус и Тайм - сегодня вечером.

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

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

Теперь, когда мы знаем основы, давайте перейдем к практическим действиям :). В этом посте мы в основном сосредоточимся на понимании естественного языка Rasa (NLU), которое включает в себя классификацию намерений и извлечение сущностей, а также создадим структурированный вывод, который можно будет передать в Rasa Core.

Если кто-то хочет вникнуть в подробности, Раса предоставил отличную документацию, чтобы лучше понять контекст.

Понимание естественного языка раса (NLU)

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

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

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

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

Файл домена. В этом файле перечислены все намерения, сущности, действия, шаблоны и некоторая дополнительная информация. Шаблоны, которые я только что упомянул, - это не что иное, как образец ответа бота, который можно использовать в качестве действий. Мы обсудим этот файл более подробно при обсуждении Rasa Core.

Задача

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

Установка и настройка

Давайте сначала настроим среду, а для этого нам нужно установить python. Я использую Conda (miniconda) для настройки виртуальной среды для Python и настоятельно рекомендую создать ее, так как было бы хорошо иметь всю установку Rasa в одном месте.

Сначала установите Conda (miniconda) отсюда в соответствии с ОС. После установки проверьте версию Conda

$ conda --version or conda -V

В случае необходимости обновления выполните команду ниже

$ conda update conda

После установки Conda мы должны создать виртуальную среду и продолжить установку пакетов Rasa NLU. Для этого поста я использую python 3.6

## Creating a virtual environment
conda create --name botenv python=3.6
## Activate the new environment to use it
LINUX, macOS: conda activate botenv
WINDOWS: activate bot
## Install latest Rasa stack
## Rasa NLU
pip install rasa_nlu
or Python3 install rasa_nlu
## For dependencies
## spaCy+sklearn (pipeline)
pip install rasa_nlu[spacy]
python3 -m spacy download en
python3 -m spacy download en_core_web_md
python3 -m spacy link en_core_web_md en

##Tensorflow (pipeline)
pip install rasa_nlu[tensorflow]

После завершения установки пакета давайте создадим структуру проекта. Я назвал проект wall-e, так что это наш базовый каталог проекта. Для файлов обучения / данных мы создаем каталог данных в wall-e и создаем в нем обучающий файл nlu.md.

$ mkdir wall-e
$ cd wall-e
$ mkdir data
$ cd data
$ touch nlu.md

Предоставленные данные помогут в обучении бота. Чем больше данных, тем лучше бот будет обучен. ‘## intent:’ определяет имя намерения, а [word] (entity) определяет объект, например - [world] (category). Мы определили несколько примеров для бота, чтобы лучше его понять.

Теперь нам нужно определить конвейер, через который будут передаваться эти данные, и для бота можно будет выполнить классификацию намерений и извлечение сущностей. Я использовал конвейер spacy_sklearn, создал файл nlu_config.yml в каталоге базового проекта (т.е. wall-e) и добавил в него конвейер.

Раса предоставил дополнительную информацию о конвейере здесь.

Теперь, когда наши данные и конвейер NLU готовы, пришло время обучить бота. Мы можем сделать это либо запустив скрипт в терминале, либо создать файл python и запустить его.

Если вы используете скрипт в терминале (не забудьте активировать виртуальную среду, в которую были установлены все пакеты. В нашем случае это botenv)

$ conda activate botenv
$ cd wall-e
$ python3 -m rasa_nlu.train -c nlu_config.yml --data data/nlu.md -o models --fixed_model_name nlu --project current --verbose

Если вы используете файл python, создайте nlu_model.py в каталоге базового проекта (например, wall-e) и добавьте в него код ниже.

$ cd wall-e
$ python3 nlu_model.py

Это обучит модель NLU и сохранит ее в файле «models / current / nlu». Тот же путь передается интерпретатору NLU для анализа некоторых примеров намерений от пользователя, чтобы увидеть, может ли NLU классифицировать намерение и правильно извлекать сущности. Результат выглядит примерно так

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

Наконец, мы успешно завершили обучение бота, в котором он может понимать естественный язык, но нам все еще нужно построить диалоги, чтобы бот мог отвечать на сообщения. Это мы рассмотрим в следующей части Создание разговорного чат-бота с Rasa Stack и Python - Rasa Core

Я настоятельно рекомендую пройти каждый раздел шаг за шагом и прочитать документацию Rasa, чтобы лучше понять ее. Если вам нужен код, это репозиторий git.

Поделитесь своими мыслями, отзывами, комментариями и пояснениями. Это поможет мне импровизировать.

Если вам понравился этот пост, вы можете помочь мне поделиться им, порекомендовав его ниже ❤

Следуйте за мной в Linkedin и Twitter