Чат-боты: создание естественного языка из структурированных данных

Представление структурированных данных в неструктурированном формате

Вступление

Но давайте сначала посмотрим на базовую трансляцию, происходящую внутри чат-бота…

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

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

И по смыслу неструктурированный.

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

  • Определение границ предложения (полезно для более длинного ввода)
  • Определение языка (сценарии, в которых пользователи говорят на разных языках)
  • Обнаружение намерения
  • Определение сущностей
  • и многое другое…

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

Разговор с пользователем

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

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

{
  "id": 803,
  "main": "Clouds",
  "description": "broken clouds",
  "icon": "http://openweathermap.org/img/wn/[email protected]",
  "weather": "Clouds",
  "temp": 80,
  "high": 82,
  "low": 78,
  "city": "New York"
}

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

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

Этот процесс неструктурирования данных в диалоге называется генерацией естественного языка, NLG.

Генерация естественного языка

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

Основы создания естественного языка (NLG)

Как и все, NLG может выполняться на разных уровнях сложности. Самый упрощенный подход - получить однозначное соответствие кодов возврата и фраз.

Если API возвращает 0, тогда бот отвечает «Спасибо, ваш запрос был зарегистрирован».

В противном случае, если API отвечает 1, бот отвечает «Извините, что-то пошло не так, повторите попытку позже».

Вы можете рассматривать это как очень простую форму неструктурированных данных.

Иллюзия жизни

Конечно, вы можете сделать еще один шаг вперед, создав иллюзию жизненности. Некоторые среды разработки, такие как IBM Watson Assistant, позволяют определять несколько ответов для каждого диалогового узла.

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

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

Создание скриптового языка

Сделав еще один шаг вперед, мы создадим сценарий генерации языка.

Microsoft Bot Framework Composer имеет слева параметр Ответ бота, где вы можете определить ответы бота.

В отмеченном примере определен сценарий создания языка с именем:

#DescriberWeather

Цель этого примера - получить ответ от API погоды и преобразовать его в язык с более естественным звучанием. Если API возвращает «Dust», мы хотим, чтобы диалог нашего чат-бота возвращал: «В воздухе витает пыль» и т. Д.

Мы можем быстро и легко создать несколько таких сценариев для разных API и сценариев.

А в элементе Отправить ответ мы можем ссылаться на языковой скрипт для обратной связи с пользователем:

- @{DescribeWeather(dialog.weather)} and the temp is @{dialog.weather.temp}°

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

Легкость масштабирования

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

Максимальное сегментирование элементов чат-бота в значительной степени помогает.

И сегментирование сценария / диалогового окна из потока диалогов является разумным, и Генератор языков отвечает на это.

Но почему бы не пойти еще дальше…

Обратное понимание естественного языка

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

С помощью NLU мы берем неструктурированный разговорный ввод от пользователя (естественный язык) и структурируем его для нашего программного процесса. С помощью NLG мы берем структурированные данные из серверных и конечных автоматов и превращаем их в неструктурированные данные. Разговорный вывод на человеческом языке.

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

Генератор обзоров поддельных продуктов

Для этого примера я взял около 580 000 обзоров продуктов и создал на их основе модель TensorFlow.

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

Фиктивный отзыв создается на основе совокупности данных обзора на основе ключевого слова.

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

Генератор заголовков фейковых новостей

В видео ниже я получил набор данных с сайта kaggle.com, содержащий около 185 000 записей.

Каждая из этих записей содержала заголовок газеты, на основе которой я создал модель TensforFlow.

На основе этой модели я мог затем ввести одно или два намерения, и были сгенерированы случайные «фальшивые» (следовательно, несуществующие) заголовки.

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

Заключение

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

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

Подробнее здесь…