Как я сделал своего чат-бота умнее, помогая ему понять намерения

kak ya sdelal svoego chat bota umnee pomogaya emu ponyat namereniya?v=1656595821

П. Даниэля Тиреуса

NTSxmPSaK1rQ17ppPjodQQXvWbMsnYR8ukyN
«Рыскание пыльцы из белых цветов» Алекса Джонса на Unsplash

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

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

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

Первый проход: деревья диалогов

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

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

В компьютерной игре можно выбрать только варианты на экране, а с помощью IVR вы можете нажимать только цифры на основе предоставленных вариантов.

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

Cuz5hCGmyBUZOwpXSc-phjZiok6MAddfovv8
Попытка форсировать направление разговора с помощью быстрого ответа.

Вторая попытка: диаграммы разговоров

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

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

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

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

Пока пользователь не отходил вдали от набора ответов, определенных краями в графике, это работало достаточно хорошо. Например, ниже приведен чат, который я имел из Hayfever в Facebook Messenger.

pBYi8RR-PeMyB-iPPghx9SW76MQKrdaOji22
Успешный чат с Facebook в Мессенер с помощью модели разговора на основе графиков.

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

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

Ниже приведены несколько примеров неестественных и разочаровывающих разговоров.

sabbwOL8d-cdfsD--Yjy4qHUKIyuzC0HAPO2
Сена лихорадка явно непонимание пользователя, что приводит к неестественному и разочаровывающему разговору.
WAKTt3UY73ysHlqIMlByydGxOBQSf-gabcxa
Пользователь сделал естественный запрос, который Hayfever не мог понять, поскольку он не совпадал с ребром в графе.

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

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

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

Третья попытка: понять намерение

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

Мой первый опыт работы с намерением был когда я программировал пользовательские навыки для службы Amazon Alexa. Служба Alexa превращает слова, которые вы говорите в такое устройство, как Echo, в письменный текст. Затем он проверяет, соответствуют ли слова любому из встроенных намерений, например «помощь» или «выход».

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

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

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

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

Для этого проекта я выбрал DialogFlow. Пользовательский интерфейс мне показался приятным, API понятен, и он почти не требовал блокировки поставщика. Он также включал в себя веселое дополнение под названием Small Talk, которое легко позволяло моему боту отвечать на обычный разговор вроде «как дела?». и «как тебя зовут». Как ни странно, я заметил в журналах, что многим пользователям нравится обмениваться случайными ругательствами с моим ботом.

Использование Dialogflow

Цикл применения при использовании службы NLU действительно проще, чем у меня раньше. Бот полностью управляется событиями. Он ожидает ввода от пользователя через веб-хук Facebook Messenger, передает текст Dialogflow для анализа намерения, генерирует ответный ответ для намерения и отправляет отформатированный ответ обратно в API Facebook Messenger.

JmPRkmoeD3mjXA43CSC8ZDVyv-tgw3SFlMhS

Обновление Hayfever для использования Dialogflow было относительно гладким, за несколькими исключениями.

Во-первых, кажется, что я поймал Dialogflow внутри миграции с их API V1 до V2, и документация не совсем догнала. При поиске StackOverflow и других блогов оказалось немало устаревшей информации, которая касалась API V1.

Во-вторых, Hayfever – это бот Facebook Messenger. Формат JSON для встраивания ответов Facebook Messenger в DialogFlow API достаточно плохо документирован. Если бы вместо этого выбрал wit.ai от Facebook, я уверен, что эта часть была бы легче. Но я хочу, чтобы Hayfever работала любую платформу обмена сообщениями, а также голосовые платформы в будущем.

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

Переход на Dialogflow NLU немедленно улучшил качество разговоров Hayfever. Бот больше не был отражен тонкими изменениями ожидаемых вводов, он мог общаться с пользователями и даже мог догадываться о намерениях из введенных данных, которых он никогда раньше не видел.. Я еще могу многое тренироваться и оптимизировать, но это, несомненно, движение в правильном направлении.

Подведению

Hayfever – это чат-бот, разработанный, чтобы помочь пользователям отслеживать и понимать симптомы аллергии. Ранние версии использовали примитивную механику дерева диалогов и довольно плохо понимали естественный разговор. Переход к службе понимания естественного языка на основе глубокого обучения (NLU), например Dialogflow, значительно улучшил способность Hayfever общаться с пользователями.

Сохраняя обработку NLU отдельно от специфических для платформы ввода и вывода, почти не было увеличения сложности кода и блокировки платформы.

В будущем я надеюсь сделать Hayfever доступным на голосовых устройствах, таких как Amazon Alexa и Google Home, а также на дополнительных платформах обмена сообщениями, например Telegram. Я также хотел бы попытаться соединить NLU с некоторыми инструментами разговора на основе графиков, которые я использовал раньше, чтобы, возможно, чат-бот лучше запомнил то, что произошло во время разговора.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *