💬 «Отличается умом и сообразительностью». Как правильно выбрать архитектуру чат-бота
by eFusionЧат-боты сейчас на подъёме. Компании стремятся сократить рутину, чтобы работникам не приходилось повторять однообразный набор процедур. Программы с этим справляются куда эффективнее. Благодаря 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 можно в этой статье (англ.).
- Создание rule-based чат-бота на Python (англ.)
- Туториалы по AIML (англ.)
3. Классификация интентов
В узконаправленных областях шаблонная архитектура – идеальный выбор. Но как только от бота требуется что-то посложнее, нельзя использовать шаблонный подход. Иначе придется кодить каждое условие, на которое мог бы ответить бот, а такой код трудно поддерживать: начнутся проблемы с пересекающимися паттернами, снизится точность.
Для чат-ботов, имеющих дело с несколькими задачами, лучшими вариантами костяка являются современные архитектуры нейронных сетей с долгой краткосрочной памятью (LSTM) и агенты обучения с подкреплением.
Машинное обучение применяется совместно с алгоритмом классификации для поиска интентов в естественном языке. Такой алгоритм может быть построен с использованием библиотек машинного обучения, например scikit-learn, Keras (англ.), Tensorflow или PyTorch. Другой вариант – использовать один из облачных API: wit.ai, api.ai или Microsoft LUIS. Облачные API платные, но предоставляют готовый функционал, поэтому разработка будет быстрее и проще. Самостоятельная разработка сложнее и займет больше времени, но результат будет проще кастомизировать и расширять.
Способы создания ответа
Сопоставление шаблонов, классификация намерений и извлечение контекста помогают понять сообщение пользователя. Теперь возникает вопрос: «Как сгенерировать ответ?»
Простейший способ – поместить некоторые значения в переменную, а потом обратиться в БД или к стороннему API.
В: Сколько лет Илону Маску?
О: Возраст $(‘Entity’) составляет $(‘Query result’)
Различные виды ботов используют разные механизмы обработки и реагирования. Например, в медицинский чат-бот встроен заранее заданный набор симптомов заболеваний. Генерирование ответа будет происходить с помощью статистического моделирования и вероятностного подхода. На основании пользовательского ввода будет предсказываться заболевание с похожими симптомами.
Данная концепция генерации ответов на основе сообщений пользователей называется моделированием ответов. Существует два основных типа моделирования:
- Генеративное моделирование.
- Моделирование на основе поиска.
Моделирование на основе поиска проще строить, оно обеспечивает более предсказуемые результаты. При таком моделировании чат-бот использует интенты и контекст разговора для выбора наилучшего ответа из предопределенного статического списка сообщений. Такого бота можно создать с помощью библиотек TensorFlow (англ.) или NLTK (англ.).
- Сравнение retrieval-based и generative архитектур
- Использование глубокого обучения в создании чат-ботов
Заключение
Рынок чат-ботов растет в геометрической прогрессии, появляются новые, более сложные модели архитектур, которые позволяют делать более сложных и «умных» ботов. Мы кратко рассмотрели основные подходы к построению чат-ботов. Надеемся, что этот материал помог определиться с архитектурой вашего бота.
Если вам интересны чат-боты, обратите внимание на другие наши публикации: