Создание умных чат-ботов с помощью Botkit и Rasa NLU

машинное обучение искусственный интеллект NLP робот

Приветствую всех вОблако + сообщество, получить больше крупной технической практики Tencent по галантерее ~

Каждый день мы слышим новости о запуске новых роботов, способных путешествовать, общаться, юридически, поддерживать, продавать и многое другое. Только в Facebook Messenger насчитывается более 11 000 ботов, согласно последним данным, которые я просматривал, но к тому времени, когда я пишу это, по оценкам, были добавлены еще тысячи. Боты первого поколения были глупы, потому что могли анализировать только ограниченное количество вопросов на основе ключевых слов в разговоре. Но с чем-то вродеWit.ai,API.ai,Luis.ai,Amazon Lex,IBM WatsonКоммерциализация услуг машинного обучения, таких как НЛП и обработка естественного языка (НЛП), способствовалаdonotpay иchatShopperРазработка таких интеллектуальных роботов.

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

Название статьи ясно дает понять, что мы будем использоватьBotkitиRasa(NLU), чтобы построить нашего робота. Но прежде чем перейти к технологии, я хотел бы поделиться причинами выбора этих двух платформ и объяснить, как они должны вписаться в наш вариант использования.

Фреймворк для разработки роботов

Howdy, Botkit и Microsoft (MS) Bot Framework — очень сильные соперники в этой области. Что общего у этих фреймворков:

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

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

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

API.ai(принадлежит Google) иWit.ai(принадлежит Facebook) — это два популярных инструмента NLU в индустрии робототехники, которые мы рассмотрели в первую очередь для этой задачи. Их общие реализации:

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

Как упоминалось ранее, мы не можем использовать ни одно из вышеперечисленных решений для хостинга из-за проблем с соблюдением требований. Вместо этого мы идеально заменили API.ai и Wit.ai, используя NLU с открытым исходным кодом под названием Rasa, который мы можем размещать и управлять им на AWS.

Прочитав это, вы можете удивиться, почему я использую термин NLU для описания двух инструментов Api.ai и Wit.ai, а не термин NLP (обработка естественного языка).

Фактически НЛП относится ко всем системам, которые могут естественным образом взаимодействовать с людьми. Это означает, что мы можем общаться с системой так же, как с реальным человеком. Напротив, NLU — это всего лишь подполе NLP, его задача — преобразовать необработанный входной сигнал в структуру данных, которую машина может распознать и понять, и может дать обратную связь, что является небольшой ветвью, но очень сложной. Например, когда вы говорите «Дата=20 апреля 2017 года, Место=Сан-Франциско, Действие=Отель», система это понимает.

Rasa NLU

В этом разделе я подробно объясню Раса НЛУ и дам вам некоторые общие термины, используемые в НЛП, с которыми вы должны быть знакомы.

  • Цель: информировать машину о запросе пользователя.
    • Например: подача жалобы, запрос на возврат средств и т. д.
  • Entity: Атрибуты, которые извлекают детали обращений пользователей.
    • Например: жалобы, связанные с перерывами в обслуживании, возвратами средств и т. д.
  • Уверенность: индикатор расстояния, который может отражать разницу между результатом, проанализированным NLU, и апелляцией в списке намерений.

Следующие примеры помогут вам лучше понять приведенные выше концепции.

входить: "Сегодня утром мой интернет не работал."

  • намерение: перерыв в обслуживании
  • организация: "сервис=интернет", "длительность=все утро"
  • Уверенность: 0,84 (может варьироваться в зависимости от индивидуального стиля тренировок)

Задача NLU (в данном случае Rasa) состоит в том, чтобы взять предложение или утверждение и вывести «намерение», «сущность» и «уверенность», которые могут быть использованы роботом. Rasa в основном предоставляет высокоуровневый API поверх различных библиотек NLP и ML, чтобы позаботиться о классификации «намерений» и извлечении «сущностей». Эти библиотеки NLP и ML называются бэкендами, и они делают Rasa умной. Вот некоторые бэкенды, обычно используемые с Rasa:

  • MITIE: всеобъемлющая библиотека; другими словами, она имеет встроенную библиотеку НЛП для извлечения «сущностей» и библиотеку машинного обучения для классификации «намерений».
  • spaCy + sklearn: spaCy — это библиотека НЛП, которая выполняет только извлечение «сущностей». И sklearn используется с spaCy, чтобы добавить к нему возможности ML для операций классификации «намерения».
  • MITIE + sklearn: в этой комбинации используются две лучшие библиотеки в соответствующих областях. Эта комбинация имеет как хорошее распознавание «сущностей» в MITIE, так и быструю и отличную классификацию «намерений» в sklearn.

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

  • Мой телефон не работает.
  • Мой телефон не включается.
  • Мой телефон сломался и больше не может быть использован.

Мои тренировочные данные выглядят так:

{
  "rasa_nlu_data": {
      "common_examples": [
            {
             "text": "hi",
             "intent": "greet",
             "entities": []
            },
            
            {
             "text": "my phone isn't turning on.",
             "intent": "device_failure",
             "entities": [
               {
                "start": 3,
                "end": 8,
                "value": "phone",
                "entity": "device"
               }
                         ]
             },
             
             {
               "text": "my phone is not working.",
               "intent": "device_failure",
               "entities": [
                  {
                   "start": 3,
                   "end": 8,
                   "value": "phone",
                   "entity": "device"
                  }
                           ]
               },
               
               {
                 "text": "My phone crashed and isn’t working anymore.",
                 "intent": "device_failure",
                 "entities": [
                    {
                     "start": 3,
                     "end": 8,
                     "value": "phone",
                     "entity": "device"
                     }
                             ]
                }
                             ]
          }
 }

Примечание. Мы заметили, что MITIE более точен, чем spaCy+sklearn, при экспериментировании с небольшими обучающими наборами, но процесс обучения MITIE становится все медленнее и медленнее по мере того, как набор «намерений» продолжает расти. Для набора из 200+ примеров с примерно 10–15 «намерениями» MITIE требуется около 35–45 минут для обучения на экземпляре AWS C4.4xlarge (16 ядер, 30 ГБ ОЗУ).

Этот— хороший учебник по обучению Rasa с помощью MITIE. Если вы новичок, то можете обратиться к этомуДокументациядля установки Расы.

Интеграция с Botkit и Rasa

BotkitОтHowdyФреймворк для разработки роботов с открытым исходным кодом, разработанный создателями . По сути, он предоставляет набор инструментов, способных создавать ботов для Facebook Messenger, Slack, Twilio, Kik и других популярных платформ. Они также предлагаютBotkit StudioIDE для разработки роботов. В целом, Botkit — это инструмент, который позволяет нам написать его один раз и развернуть на нескольких платформах обмена сообщениями.

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

В этой демонстрации я интегрировал Slack и botkit. ты можешь использовать этоэтоШаблон действует как шаблон для настройки модулей Slack для Botkit. Здесь мы расширили мультимедийное программное обеспечение Botkit-Rasa, вы можете найти его вздесьнайдите их.

Botkit-Rasa имеет две функции: получение и мониторинг, эти две функции охватывают исходную работу Botkit по умолчанию.

  1. receiveВызывается, когда Botkit получает сообщение. Он отправляет сообщение пользователя в Rasa и сохраняет «намерение» и «сущность» в ботките.messageв объекте.
  2. hearsперезаписывает оригинал"hears"метод--controller.hears。дефолтhearsМетод использует регулярные выражения для поиска заданного шаблона в сообщении пользователя, в то время как метод «услышать» посредника Botkit-Rasa делает это путем получения «намерений».
let Botkit = require('botkit');
let rasa = require('./Middleware/rasa')({rasa_uri: 'http://localhost:5000'});
let controller = Botkit.slackbot({
  clientId: process.env.clientId,
  clientSecret: process.env.clientSecret,
  scopes: ['bot'],
  json_file_store: __dirname + '/.db/'
  });
  // 改写botkit中的接收方法
  controller.middleware.receive.use(rasa.receive);
  // 改写botkit中的监听方法
  controller.changeEars(function (patterns, message) {
  return rasa.hears(patterns, message);
  });
  controller.setupWebserver(3000, function (err, webserver) {
  // 配置一个能够从slack中获取webhooks的路径
  controller.createWebhookEndpoints(webserver);
  });

Возьмем пример: «Мой телефон не включен». Rasa вернет следующее:

  • намерение: Устройство не работает
  • организация: устройство = мобильный

Если вы обратите пристальное внимание, введенных мной данных не было в моем тренировочном файле, и встроенный интеллект Расы смог правильно идентифицировать эти комбинированные «намерения» и «сущности».

нам нужно добавитьhearsметод мониторинга设备宕机Это намерение обработать это входное сообщение. Помните, что «намерение» и «сущность», возвращенные Rasa, будут сохранены программным обеспечением мультимедиа вmessageв объекте.

controller.hears(['device_failure'], 'direct_message,direct_mention,mention',
function (bot, message) {
  let reply = 'Try pressing the power button for 30 seconds. ';
      reply += 'Bring the phone to the service center if it does not start. ';
      reply += 'Do not forget to carry your warranty card.';
      bot.reply(message, reply);
      });

Вы можете запустить бота через Slack и увидеть вывод, показанный ниже (support_bot — это имя моего бота).

Теперь вы должны быть знакомы с процессом создания диалогового бота с использованием среды разработки ботов и NLU. Надеюсь, эта статья поможет вам быстрее приступить к созданию собственного робота.

Переводчик: KX_WEN, участник изОблако + Сообщество Бюро переводов

Исходная ссылка: https://dzone.com/articles/building-an-intelligent-chatbot-using-botkit-and-r

Оригинальный автор: Арджун Харихаран

Связанное Чтение

Проблема инициализации веса нейронной сети

Какие навыки нужны разработчикам в области искусственного интеллекта?

Учебное пособие по машинному обучению: классификатор текста с максимальной энтропией

Эта статья была разрешена автором для публикации в сообществе Yunjia, пожалуйста, укажите при перепечаткеИсточник статьи;