Цель чат-ботов - сделать наше взаимодействие с услугами, продуктами или компаниями более естественным и удобным. Можно «разговаривать» с сервисами и компаниями на естественном языке через такой канал, как WhatsApp или Messenger. Чат-бот, который находится на другой стороне канала обмена сообщениями, в свою очередь, использует понимание естественного языка (NLU), чтобы понимать и говорить на человеческом языке.

По характеру взаимодействия чат-боты можно разделить на два типа. Некоторые чат-боты помогают выполнять четко определенные задачи, такие как проверка баланса аккаунта, бронирование или поиск правильного рецепта. Другие чат-боты предназначены для обучения, построения отношений или развлечения и, следовательно, для более длительных бесед. Первый тип чат-бота, который помогает пользователям выполнять определенные задачи, может называться диалоговыми агентами, ориентированными на задачи [Jurafsky and Martin, 2018] или чат-ботами, ориентированными на выполнение задач.

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

Чат-боты, ориентированные на задачи

Подобно многим сервисам, продуктам и веб-сайтам, предназначенным для использования людьми, карта пути пользователя может использоваться для описания того, как можно взаимодействовать с ориентированным на задачи чат-ботом [Lewis 2017] [Mears 2013]. Как упоминалось ранее, целью включения взаимодействия на естественном языке в поездки пользователя должно быть создание более естественного и удобного взаимодействия с пользователем.

Заслуга НЛУ

Одно из применений NLU - позволить пользователю перемещаться по пути пользователя, используя заявления на естественном языке о его намерениях навигации. Обычно это называется обнаружением намерений. Например, если пользователь говорит: «Я не понимаю свой счет, сколько составляет остаток на моем текущем счете?» тогда чат-бот обнаружит, что она хотела бы перейти на путь пользователя show_balance. Если пользователь скажет что-то вроде «Я хотел бы заплатить 300 рандов…», тогда чат-бот обнаружит, что он хотел бы отправиться в путешествие pay_account.

Извлечение информации из неструктурированного текста обычно происходит после обнаружения намерений. Обработка текста используется для извлечения таких сущностей, как сумма ранда, подлежащая выплате, цвет предмета, который человек хотел бы купить, начинки, которые пользователь хочет для своей пиццы и т. Д. Более поздний раздел Реализация NLU даст два примера извлечения информации.

Проблема контекста

Изображение выше должно продемонстрировать проблему контекста. Глядя на изображение, можно справедливо спросить, что же такое «Последние новости». Чизбургер зарезал другой чизбургер? Кто-то ударил чизбургер? Или человек, возможно, ударил другого по чизбургеру?

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

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

Ответы чат-бота на основе шаблонов

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

Стандартный шаблон: вы попросили заплатить R ‹amount› для ‹recipient›. Это нормально?

Прямой ответ: Вы попросили заплатить Mel’s Skates 300,0 рэндов. Это нормально?

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

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

Реализация NLU

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

Обнаружение намерения

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

В нашем сервисе FeersumNLU есть наивный байесовский классификатор текста, который я буду использовать в примере. Однако вы также можете использовать наивный байесовский классификатор из Python NLTK или Scikit-Learn.

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

После обучения можно начинать использовать модель, как показано выше. Текстовый ввод «Я хотел бы заполнить форму претензии». приведет к {‘label’: ‘claim ’,‘ вероятно ’: 0,941}. Текстовый ввод «Сколько времени нужно, чтобы получить расценки?» приведет к {‘label’: ‘quote’, ‘compatibility’: 0.9857254551692076}.

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

Извлечение информации

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

Если ввести текст «Моя машина - Jeep Wrangler 2007 года выпуска с табличкой AB 34 EF GP», будет извлечен объект {‘license’: ‘AB 34 EF GP’}. Обратите внимание, что регулярное выражение поддерживает два типа номерных знаков.

Можно использовать вложения слов, такие как Глобальные векторы Стэнфорда для представления слов (GloVe), чтобы извлекать такие вещи, как цвета, начинки для пиццы, животные и т.д. используются ли эти слова в одном и том же контексте и могут ли они быть каким-то образом семантически связаны.

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

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

Вывод

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

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

использованная литература

[Джурафски и Мартин 2019]: Обработка речи и языка (проект 3-го изд.), Глава 29, Дэн Джурафски и Джеймс Х. Мартин.

[Льюис 2017]: Чат-боты - отображение пути пользователя Белинды Энн Льюис.

[Mears 2013]: Путешествие пользователей - Руководство для новичков Криса Мирса.