Чат-боты находятся на подъеме. Стартапы создают чат-ботов, платформы, API, инструменты, аналитику. Microsoft, Google, Facebook представляют инструменты и фреймворки и создают на их основе умных помощников. Множество блогов, журналов, подкастов сообщают о новостях в этой отрасли, а разработчики чат-ботов собираются на собраниях и конференциях.

Некоторое время я работал над программным обеспечением для чат-ботов и слежу за тем, что происходит в отрасли. Смотрите мои предыдущие сообщения:

В этой статье я углублюсь в архитектуру чат-ботов.

Какие бывают боты?

Есть два основных типа чат-ботов: чат-боты для развлечений и чат-боты для бизнеса.

Инженеры разрабатывали чат-ботов для развлечения на протяжении десятилетий с тех пор, как в 1966 году был представлен известный чат-бот-психотерапевт ELIZA. Создатели этих чат-ботов обычно пытаются сделать бота, который может выглядеть как человек, пройти тест Тьюринга. Возможно, все боты, участвующие в розыгрыше приза Лебнера и подобных соревнованиях, входят в эту группу. Боты Microsoft Xiaoice и Tay ведут себя схожим образом. Самый последний пример - бот «Спок» в Skype: «Поговорите со Споком, вторым командиром USS Enterprise, чтобы узнать способы логики вулкана!»

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

Один из способов оценить развлекательного бота - сравнить его с человеком (тест Тьюринга). Другие количественные показатели - это средняя продолжительность разговора между ботом и конечными пользователями или среднее время, затрачиваемое пользователем в неделю. Если разговоры короткие, значит, бот недостаточно интересен.

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

Разговоры обычно короткие, менее 15 минут. У каждого разговора есть цель, и качество работы бота можно оценить по тому, сколько пользователей достигли цели. Нашла ли пользователь информацию, которую искала? Успешно ли пользователь забронировал рейс и гостиницу? Купил ли пользователь продукты, которые помогают решить возникшую проблему? Обычно эти показатели легко отслеживать.

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

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

Модели

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

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

Генеративные модели

Генеративные модели - это будущее чат-ботов, они делают ботов умнее. Этот подход не получил широкого распространения среди разработчиков чат-ботов, сейчас он в основном находится в лабораторных условиях.

Модели на основе поиска

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

В настоящее время модели на основе извлечения более практичны, многие алгоритмы и API-интерфейсы доступны для разработчиков.

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

Если бот не использует контекст, он не имеет состояния. Он будет отвечать только на последнее сообщение пользователя, игнорируя всю историю разговора.

Эвристика на основе шаблонов

Эвристика для выбора ответа может быть разработана разными способами, от условной логики if-else до классификаторов машинного обучения. Самая простая технология - это использование набора правил с шаблонами в качестве условий для правил. Этот тип моделей очень популярен среди развлекательных ботов. AIML - широко используемый язык для написания шаблонов и шаблонов ответов. Разработчики ботов пишут код на языке AIML, код может включать в себя несколько таких блоков:

‹category›
‹pattern› ЧТО ТАКОЕ ВАШЕ ИМЯ ‹/pattern›
‹template› Меня зовут Майкл Н.С. Эваниус. ‹/template›
‹/category›

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

ChatScript - это современная реализация этой идеи. Это движок чат-бота с открытым исходным кодом, который позволяет определять чат-бота на языке, основанном на правилах. Каждое правило содержит шаблон и вывод:

s: (потому что [когда-нибудь «однажды»]) Это будет не скоро.

Движок ChatScript имеет мощный конвейер обработки естественного языка и богатый язык шаблонов. Используя ChatScript, вы можете сделать гораздо больше, чем с AIML. Он проанализирует сообщение пользователя, пометит части речи, найдет синонимы и понятия и найдет, какое правило соответствует вводимому. В дополнение к возможностям НЛП, ChatScript отслеживает диалоги, так что вы можете создавать длинные сценарии, охватывающие разные темы. Впрочем, ничего особенного из этого не выйдет. Он не будет запускать алгоритмы машинного обучения и не будет получать доступ к внешним базам знаний или сторонним API, если вы не выполните все необходимое программирование.

Машинное обучение для классификации намерений

Неотъемлемая проблема эвристики на основе шаблонов заключается в том, что шаблоны следует программировать вручную, а это непростая задача, особенно если чат-бот должен правильно различать сотни намерений. Представьте, что вы создаете бота для обслуживания клиентов, и бот должен ответить на запрос на возврат средств. Пользователи могут выразить это сотнями разных способов: «Я хочу вернуть деньги», «Вернуть деньги», «Мне нужно вернуть свои деньги». В то же время бот должен по-разному реагировать, если те же слова используются в другом контексте: «Могу ли я запросить возврат, если мне не нравится услуга?», «Какова ваша политика возврата?». Люди не умеют писать шаблоны и правила для понимания естественного языка, компьютеры намного лучше справляются с этой задачей.

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

Такие алгоритмы можно построить с использованием любой популярной библиотеки машинного обучения, например scikit-learn. Другой вариант - использовать один из облачных API: wit.ai, api.ai, Microsoft LUIS. Wit.ai, вероятно, был первым API машинного обучения для чат-ботов, он был куплен Facebook в этом году, и это бесплатно.

Генерация ответа

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

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

Архитектура с выбором ответа

Чат-бот может выразить одно и то же сообщение разными словами. Погодный бот может сказать: «Дождь», «Вероятность дождя 80%» или «Пожалуйста, несите сегодня зонтик». Какой из них лучше всего подойдет пользователю? Разные пользователи предпочитают разные стили ответа. Бот может анализировать предыдущие чаты и связанные показатели (продолжительность разговора, вероятность продажи, рейтинг удовлетворенности клиентов и т. Д.), Чтобы адаптировать ответы для пользователя.

Чат-бот может иметь отдельные модули генерации и выбора ответов, как показано на схеме ниже.

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

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

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

Как вы разрабатываете программное обеспечение для своих ботов и какие алгоритмы, библиотеки и API вы используете?

Смотрите также:

Естественный язык для чат-ботов

Сверточные сети на уровне символов для классификации текста

Лучшие источники новостей глубокого обучения

Изначально статья была опубликована на сайте http://pavel.surmenok.com/2016/09/11/chatbot-architecture/