Индустрия чат-ботов все еще находится в зачаточном состоянии, но очень быстро растет. То, что сначала могло показаться увлечением или маркетинговой стратегией, становится реальной потребностью. Хотите узнать, какие фильмы популярны в вашем районе, в ближайших кинотеатрах или, может быть, посмотреть трейлер? Вы могли использовать Фанданго-бот. Вы фанат НБА и хотите узнавать об основных моментах игры и обновлениях? Может, стоит попробовать бота НБА. А как насчет еды или одежды? Вы видели, у скольких брендов сейчас есть чат-боты, которые позволяют вам легко заказывать еду или исследовать одежду для покупок в Интернете?

Нельзя отрицать маркетинговую мотивацию, но если чат-боты оправдают высокие ожидания пользователей, они станут незаменимыми инструментами во многих случаях использования. Важность, которую технологические гиганты, такие как Google, Facebook, Microsoft, IBM и Amazon, придают чат-ботам, является убедительным показателем того, что эта технология будет играть ключевую роль в будущем.

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

В прошлом году в Tryolabs мы много работали над чат-ботами и сталкивались с этим вопросом каждый раз, когда начинали новый проект. В этом посте мы дадим вам обзор некоторых платформ, которые мы изучили и протестировали. Мы увидим, что в зависимости от варианта использования, рассматриваемого чат-ботом, некоторые платформы более подходят, чем другие. И поскольку все, что блестит, не является золотом, мы также увидим, что еще есть возможности для улучшения, и что иногда настраиваемые обработка естественного языка (NLP) и машинное обучение (ML ) компоненты необходимы для достижения желаемых результатов.

Общая архитектура чат-бота

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

Понимание того, что говорит пользователь

Предположим, вы имеете дело с чат-ботом для путешествий и спрашиваете следующее:

Я хочу вылететь в Венецию, Италия, из Парижа, Франция, 31 января

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

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

I want to fly to <CITY> from <CITY> on <DATE>

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

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

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

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

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

Статические ответы

Самый простой способ - получить статический ответ со списком вариантов для каждого ввода пользователя. Эти статические ответы могут быть шаблонами, такими как The flight time is <ft> hours, где <ft> - переменная, вычисляемая чат-ботом на лету.

Динамические ответы

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

Сгенерированные ответы

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

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

Сколько сумок я могу взять с собой?

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

Существующие платформы

Прежде чем вы сможете выбрать платформу, вы должны знать, какого типа чат-бот вы пытаетесь создать. Это чат-бот, ориентированный на достижение цели, на общение или на достижение цели с сильными разговорными способностями?

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

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

Выяснив это, мы можем выделить три семейства среди существующих платформ:

  • Нет платформ для программирования.
  • Платформы для общения.
  • Платформы, поддерживаемые техническими гигантами.

Это не формальная таксономия, а, скорее, способ группировки или категоризации платформ.

Нет программных платформ

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

Платформ для программирования не существует, и перечислить их все здесь невозможно. В Tryolabs мы протестировали некоторые из них, чтобы понять их плюсы и минусы: Chatfuel, ManyChat, Octane Ai, Massively и Motion.ai.

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

Плюсы

  • Вы можете очень быстро разработать чат-бота.
  • У них низкая кривая обучения.
  • Они идеально подходят для простых ботов.

Минусы

  • Существует множество платформ с разным уровнем зрелости и стабильности.
  • Иногда графический интерфейс не так прост для понимания, а когда логика чат-бота становится более сложной, с ней становится трудно справиться.
  • У них практически нет возможностей обработки естественного языка. Например, некоторые платформы не могут выполнять извлечение информации. Следовательно, учитывая такую ​​фразу, как «Я в Бостоне», они не могут извлечь тот факт, что находится город Бостон (объект местоположения).
  • Они не подходят для сложных ботов.

Вывод

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

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

Основная цель здесь - позволить пользователю разговаривать с ботом, не учитывая сценарий, ориентированный на задачу. Эти платформы обычно используют языки спецификации, такие как AIML (язык разметки искусственного интеллекта), для моделирования взаимодействия с пользователем. В приведенном ниже примере показано, как кодировать взаимодействия с AIML.

<aiml version="1.0.1" encoding="UTF-8">
   <category>
      <pattern>MY DOGS NAME IS *</pattern>
      <template>
         That is interesting that you have a dog named <set name="dog"><star/></set>
      </template>
   </category>
   <category>
      <pattern>WHAT IS MY DOGS NAME</pattern>
      <template>
         Your dog's name is <get name="dog"/>.
      </template>
   </category>
</aiml>

Когда пользователь говорит «мою собаку зовут Макс», чат-бот распознает этот шаблон и извлекает имя собаки. Следует отметить, что это извлечение путем сопоставления текста очень просто, если мы сравним его с мощностью извлечения информации НЛП. Чат-бот ответит: «Интересно, что у вас есть собака по имени Макс». Позже, если пользователь спросит, как зовут его собаку, чат-бот сможет ответить: «Имя вашей собаки Макс».

Самый известный пример такого рода платформ - Пандоработы.

Плюсы

  • AIML - это стандарт.
  • Создавать беседы очень гибко.

Минусы

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

Вывод

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

Платформы, поддерживаемые технологическими гигантами

Эти платформы разрабатываются компаниями-гигантами технологий, и каким-то образом они уже представляют собой стандарт или, по крайней мере, вот-вот станут таковыми:

Они стараются иметь низкую кривую обучения и в то же время сильную выразительную силу.

По разным причинам мы в Tryolabs сосредоточились на Api.ai и Wit.ai. У нас сложилось впечатление, что LUIS и Watson предлагают структуру немного более сложную (и, в конечном итоге, более мощную), чем то, что нам было нужно. Что касается Amazon Lex, у нас не было доступа к Ограниченному предварительному просмотру на момент написания этого поста.

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

Api.ai

Поведение чат-бота

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

По сути, когда Api.ai получает запрос пользователя, он сначала классифицируется, чтобы определить, соответствует ли он известному намерению. Api.ai предлагает «Резервное намерение по умолчанию» для обработки запросов, не соответствующих ни одному намерению пользователя.

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

В приведенном выше примере, когда пользователь говорит «Я хочу заказать большую пиццу», этот запрос соответствует намерению с именем order, которое может создать контекст с именем ordering. Когда пользователь указал тип пиццы, размер и т. Д., Вы можете создать контекст с именем pizza_selected (и сохранить контекст ordering в активном состоянии). Позже, если пользователь спросит: «Какое время доставки?» бот может соответствовать намерению с именем get_order_info, только если существует контекст с именем pizza_selected.

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

Сущности

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

Возможности заполнения слотов

Это ключевой момент Api.ai, который дает одновременно гибкость и мощность. Заполнение слотов позволяет вам указать, для данного намерения, какие поля играют роль и являются ли они обязательными или нет.

Это замечательно, так как вам не нужно иметь дело с недостающей информацией, поскольку это делается на стороне Api.ai. В приведенном выше примере Api.ai будет запрашивать каждое обязательное поле, пока оно не будет заполнено пользователем: тип и размер пиццы, адрес и время доставки. Как видите, поле «число» может быть частью намерения, но не обязательно.

Кодирование размера сервера

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

Плюсы

  • Api.ai предлагает мощный способ моделирования больших и сложных потоков с использованием намерений и контекстов.
  • Заполнение слотов - это интегрированная функция. Следовательно, большая часть логики может быть решена чат-ботом, что уменьшает кодирование на стороне сервера.
  • Доступны домены, то есть спецификации, которые могут иметь дело с несколькими распространенными сценариями использования и приложениями (например, светская беседа, мудрость, расписания полетов, напоминания…).
  • Для обучения чат-бота на примерах предлагается раздел «Обучение» (в бета-версии).
  • Интеграция в один клик с несколькими платформами: Facebook Messenger, Slack, Twitter, Telegram…

Минусы

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

Wit.ai

Поведение чат-бота

Истории - это ключевая концепция для моделирования поведения чат-бота с Wit.ai. Каждая история представляет собой пример возможного разговора. Следует отметить, что «намерение» больше не является концепцией, а является субъектом пользователя, не обязательным. Это изменение оказало большее влияние на Wit.ai, мотивированное тем фактом, что сложному чат-боту требуется множество намерений, которые можно каким-то образом сгруппировать в истории.

Разработчики ботов в основном учат Wit.ai своим примером. Основная идея заключается в том, что когда пользователь пишет «похожие» запросы, Wit.ai обрабатывает запрос, извлекает сущности и применяет логику, определенную разработчиком.

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

Для взаимодействия со стороной сервера у вас есть команды «Бот отправляет», которые в основном являются вызовами функций. Очень интересным моментом является то, что вы можете установить роль сущностей во фразе. Например, в строке «Я хочу вылететь в Венецию, Италию из Парижа, Франция, 31 января» вы можете указать, что первый город - это пункт отправления, а второй - пункт назначения.

Сущности

Wit.ai позволяет вам определять свои собственные сущности или использовать предопределенные сущности.

Кодирование размера сервера

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

Плюсы

  • Концепция истории очень сильна.
  • Wit.ai позволяет управлять потоком разговора с помощью веток, а также условий для действий (например, показывать это сообщение, только если определены некоторые конкретные переменные).
  • Назначение ролей сущностям помогает обработке на стороне сервера.
  • Для обучения чат-бота на примерах предлагается раздел «Понимание».
  • Существует «почтовый ящик», в котором перечислены запросы, которые не удалось обработать чат-ботом, чтобы разработчики могли обучить его.

Минусы

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

Текущие ограничения: улучшение с помощью НЛП и машинного обучения

Как мы видели, для моделирования чат-бота нам необходимо предоставить логику и лингвистические ресурсы, в основном входные и выходные фразы и сущности. Это особенно верно для Api.ai и Wit.ai. Для небольших чат-ботов это не должно быть проблемой, но если вы планируете иметь дело с большой терминологией и множеством вариантов фраз, вам следует рассмотреть возможность использования NLP и ML. Приведем несколько примеров, в которых они могут быть полезны.

Единственное и множественное число

Если вы хотите, чтобы ваш чат-бот извлекал «пиццу» как единое целое, недостаточно дать определение «пицца», вам также необходимо предоставить «пиццу».

В Api.ai есть функция, называемая «автоматическое расширение», а в Wit.ai есть объекты «с произвольным текстом». Это механизмы, которые будут пытаться поймать новые элементы в зависимости от контекста слова. Таким образом, если вы обучили своего чат-бота фразами типа «Я хочу заказать пиццу», он, скорее всего, поймет, что в слове «Я хочу заказать 3 пиццы» слово «пицца» является сущностью. Но точность этой функции будет зависеть от тренировки, и вы не можете быть уверены в том, сколько шума она принесет.

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

Синонимы, гиперонимы и гипонимы

Предположим, что пользователи запрашивают газировку, но ваш чат-бот знает только определенные термины, такие как coca-cola или pepsi, которые являются гипонимами сода. Гиперонимы, синонимы и гипонимы могут обрабатываться на английском языке, потому что существует множество ресурсов НЛП, называемых тезаурусом и онтологиями, но обычно они предназначены для общего языка. Следовательно, кока-кола, очень специфический предметный термин, вряд ли будет частью такого рода ресурсов.

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

Анализ настроений

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

Однако это может оказаться непростой задачей, если вы используете Api.ai или Wit.ai. Если вам нужен очень гибкий и многофункциональный чат-бот, вам, вероятно, следует подумать о его разработке с нуля.

Выводы / Заключительные мысли

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

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

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

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

У вас есть вопросы / комментарии, связанные с созданием чат-бота? Пожалуйста, поделитесь ими с нами в комментариях. И… не забудьте 💚.

Мы Tryolabs, бутик-магазин AI, специализирующийся на создании продуктов на базе машинного обучения / НЛП для стартапов и предприятий.

Первоначально опубликовано на сайте tryolabs.com 25 января 2017 г. Автор: Хавьер Коуту.