💬 «Отличается умом и сообразительностью». Как правильно выбрать архитектуру чат-бота

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

Чат-боты сейчас на подъёме. Компании стремятся сократить рутину, чтобы работникам не приходилось повторять однообразный набор процедур. Программы с этим справляются куда эффективнее. Благодаря IoT боты работают не только на сайтах, но и в ресторанах, банках, торговых центрах. Мы уже и не замечаем, как алгоритмы принимают наши заказы, бронируют отели и рейсы, оказывают техническую поддержку. Конечно, если они делают это правильно.

Для чего вам нужен бот?

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

Выбор правильной архитектуры зависит от области применения чат-бота. Цель развлекательных чат-ботов – увеличить среднее время, затрачиваемое пользователем на общение. В то же время бизнес-бот должен решать проблему пользователя за минимальное число вопросов-ответов. То есть максимизируется не время, а число успешных результатов за единицу времени.

Разговоры с бизнес-ботами обычно занимают не более 15 минут и имеют определенную цель. Тревел-чат-боты предоставляет информацию о рейсах, отелях и турах, помогают найти и сделать заказ в соответствии с критериями пользователя. Google Assistant находит информацию, Uber bot принимает заказы на перевозку.

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

1. Намерение – контекст

При разработке бота сначала нужно определиться с намерениями пользователя, которые бот будет обрабатывать. Намерение (англ. intent) – это то, что хочет сделать пользователь. Выражение (англ. entity) – запрос, которым пользователь описывает намерение.

Пусть нужно создать чат-бота, c функцией будильника. Назовем класс для обработки этого намерения ALARM_SET. Пользователь может выразить намерение различными выражениями:

  • «Установить будильник на 10 утра»
  • «Разбуди меня в 10 утра»
  • «Включить напоминание, когда будет 10 утра»

Когда пользователь создает запрос, подпадающий под категорию, срабатывает ALARM_SET и чат-бот генерирует ответ.

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

2. Подход, основанный на шаблонах

Самый простой способ создания бота – использование шаблонов, подход rule-based чат-ботов. Его суть – указать возможный входящий вопрос пользователя и связанный с ним ответ.

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

Пример шаблона на AIML. Тегом pattern обозначен запрос пользователя, тегом template – ответ бота.
<context>
   <pattern>Какое у тебя имя?</pattern>
   <template>Мое имя $(‘QUERY_RESULT’)</template>
</context>

Эвристика выбора правильного ответа может быть спроектирована различными способами – как классическим if-else, так и по модели машинного обучения.

Для ответов, построенных по шаблонам, часто используют опенсорсный движок ChatScript. Его удобно встраивать в пайплайн обработки естественного языка с речевыми тегами и синонимами, что повышает точность при сопоставлении шаблонов и пользовательского ввода. Библиотека не использует алгоритмы машинного обучения и сторонние API, но это можно настроить. Узнать об основных концепциях ChatScript и посмотреть пример построения чат-бота на ChatScript и JavaScript можно в этой статье (англ.).

3. Классификация интентов

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

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

Машинное обучение применяется совместно с алгоритмом классификации для поиска интентов в естественном языке. Такой алгоритм может быть построен с использованием библиотек машинного обучения, например scikit-learn, Keras (англ.), Tensorflow или PyTorch. Другой вариант – использовать один из облачных API: wit.ai, api.ai или Microsoft LUIS. Облачные API платные, но предоставляют готовый функционал, поэтому разработка будет быстрее и проще. Самостоятельная разработка сложнее и займет больше времени, но результат будет проще кастомизировать и расширять.

Способы создания ответа

Сопоставление шаблонов, классификация намерений и извлечение контекста помогают понять сообщение пользователя. Теперь возникает вопрос: «Как сгенерировать ответ?»

Простейший способ – поместить некоторые значения в переменную, а потом обратиться в БД или к стороннему API.

В: Сколько лет Илону Маску?
О: Возраст $(‘Entity’) составляет $(‘Query result’)

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

Данная концепция генерации ответов на основе сообщений пользователей называется моделированием ответов. Существует два основных типа моделирования:

  1. Генеративное моделирование.
  2. Моделирование на основе поиска.
Как работает бот при использовании моделирования на основе поиска

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

Заключение

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

Если вам интересны чат-боты, обратите внимание на другие наши публикации:

Источники

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

matyushkin
07 апреля 2020

ТОП-15 книг по Python: от новичка до профессионала

Книги по Python (и связанным с ним специальным темам) на русском языке. Рас...
admin
14 июля 2017

Пишем свою нейросеть: пошаговое руководство

Отличный гайд про нейросеть от теории к практике. Вы узнаете из каких элеме...