Обрабатывайте сложные пользовательские намерения в своем чат-боте

Вот два подхода: один очень простой, а другой всеобъемлющий

Вступление

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

По сути составные намерения…

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

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

Также может быть несколько сущностей. Пользователи не всегда говорят с единым намерением и выражением сущности.

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

Какое намерение из всего множества намерений пользователя выиграет в этом раунде диалога?

Но… что, если бы чат-бот мог обнаружить, что он только что получил четыре предложения; Цель первого - погода завтра в Кейптауне. Второе предложение - это цена акций Apple, третье - будильник на завтрашнее утро и т. Д.

Вам может показаться слишком амбициозным?

Вовсе нет… очень возможно, выполнимо, и инструменты для этого существуют.

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

Простой подход с использованием IBM Watson Assistant

Как и во всех облачных средах разработки чат-ботов, с помощью Watson Assistant вы можете создать список ожидаемых пользовательских намерений.

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

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

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

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

Наш подход

В большинстве случаев намерения определяются десятичным процентом.

Десятичный процент, который показывает, насколько ваш помощник доверяет распознанным намерениям. Из ее примера видно, что намерение встречи составляет 81%, а намерение времени - 79%. Так что очень близко и ясно, что необходимо решить обе проблемы.

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

Конфигурация диалога для нескольких намерений

Есть простые способы решения этой проблемы и повышения устойчивости вашего чат-бота. Здесь я покажу вам простой способ добиться этого в среде IBM Watson Assistant.

Структура диалога

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

Веб-среда для создания диалогов и управления ими в Watson Assistant является мощной и многофункциональной. Он постоянно развивается, и время от времени появляются новые функции.

Установка порога

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

Намерения, которые мы фиксируем с помощью этой контекстной переменной позже в диалоговом окне, будут включать все намерения. Вы видите, что мы также создаем контекстную переменную с именем $ trust_threshold. Это установлено на 0,5. Идея состоит в том, чтобы отбросить намерения с уверенностью ниже 50%. Этот порог может быть изменен в зависимости от результатов, которые вы достигли в своем приложении.

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

Получение значений намерения

В третьем узле диалога мы определяем еще три контекстные переменные и присваиваем им значения. Сначала мы определяем переменную с именем $ intents. Затем мы используем поле Значение, чтобы ввести следующее:

“<? intents.filter(‘intent’, ‘intent.confidence >= $confidence_threshold’) ?>”

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

Отсюда..

Мы собираемся извлечь только первые два намерения, так как это те, которые нас интересуют. Для первого намерения мы определяем переменную first_intent, а для value используем:

“<? intents.get(0).intent ?>”

Это извлекает первое значение намерения из списка намерений. Затем мы создаем контекстную переменную со значением second_intent и присваиваем второму перечисленному намерению значение:

“<? intents.get(1).intent ?>”

Здесь вы можете увидеть узор и перейти вниз по списку. Вы также можете создать цикл для просмотра списка.

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

Решение диалога

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

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

Тестирование нашего прототипа

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

Комплексный подход с использованием первого уровня высокочастотного НЛП

Представьте первый, высокочастотный уровень обработки естественного языка (NLP).

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

Мы, люди, рассматриваем вопрос сверху вниз и отвечаем на разные аспекты вопроса.

Шаг 1. Автоматическое определение языка

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

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

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

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

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

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

Шаг 2: определение границ предложения

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

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

Шаг 3. Найдите все именованные объекты

Но сначала, что такое сущность?

Сущности - это информация во вводимых пользователем данных, которая имеет отношение к намерениям пользователя.

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

Распознавание сущностей во вводимых пользователем данных поможет вам выработать более полезные и целенаправленные ответы. Например, у вас может быть намерение # купить_ что-то.

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

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

  • Текст: исходный текст объекта.
  • Начало: индекс начала объекта в документе.
  • Конец: указатель конца объекта в документе.
  • Ярлык: ярлык объекта, т. е. тип.

Шаг 4: Определите зависимости

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

Если мы посмотрим на предложение «Мэри гребет в лодке». Есть два существительных: Мария и лодка. Есть еще один глагол, являющийся строками. Чтобы правильно понять предложение, важен порядок слов, мы не можем смотреть только на слова и их часть речи.

Это будет трудная задача, но в spaCy мы можем использовать фрагменты существительных. Согласно документации spaCy, фрагменты существительных можно рассматривать как существительное плюс слова, описывающие существительное, например, «щедрая зеленая трава» или «крупнейший в мире технологический фонд». Чтобы получить фрагменты существительного в документе, просто перебирайте фрагменты Doc.noun_chunks.

Предложение «Смартфоны создают проблему для страховых компаний с точки зрения мошенничества» возвращает следующие данные:

Текст - это исходный текст фрагмента существительного. Корневой текст - это исходный текст слова, соединяющий кусок существительного с остальной частью фразы. Root dep: отношение зависимости, соединяющее корень с его головкой. Текст заголовка корневого токена: текст заголовка корневого токена.

  • NSUBJ обозначает именную тему.
  • DOBJ - прямой объект.
  • POBJ - объект предлога.

Шаг 5. Очистите текст от любой возможной разметки

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

Шаг 6: жетоны

Токенизация - это задача разбиения текста на значимые сегменты, называемые токенами.

Этот пример ниже не требует пояснений.

Заключение

Не существует волшебного средства для создания диалогового интерфейса именно таким; разговорный.

На это потребуется время и усилия.

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

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

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