Друзья, мы предлагаем вашему вниманию сокращённый перевод любопытного выступления, посвящённого проблематике создания чат-ботов: каковы особенности этой задачи, какие трудности встают на пути разработчиков и как их можно решать. А ещё мы попросили прокомментировать этот материал эксперта Центра машинного обучения «Инфосистемы Джет». Его мнение вы найдёте в конце статьи.
Не социальные сети, не мобильные приложения, а обмен сообщениями — это новая и очень важная тенденция. Сегодня интенсивность обмена сообщениями растёт в геометрической прогрессии, и по объёму данных этот способ общения обогнал социальные сети ещё где-то в начале 2015 года. Например, Facebook сосредотачивается на сообщениях и собирается задвинуть всё остальное, что связано с вашей страницей в этой соцсети — ленту новостей и прочее — куда-то далеко на задворки.
Сегодня благодаря смартфонам мир завоевали сенсорные интерфейсы. И, похоже, следующим шагом станет пользовательский интерфейс чата, в котором у вас будет голосовой или текстовый чат-бот.
Давайте поговорим о том, какие сложности приходится преодолевать — и придётся преодолеть в будущем — разработчикам полноценных чат-ботов.
Что нам говорят аналитики
Gartner утверждает, что к 2022 году 70 % всех взаимодействий с клиентами будет происходить через какую-нибудь разновидность ИИ. Предполагается, что даже количество голосовых обращений в компании снизится на 10 %. Как минимум, при звонках пользователей в компании в 60 % случаев участие человека не требуется. А в остальных случаях люди будут участвовать лишь на каком-то этапе процесса, вероятно, непосредственно общаться с пользователями.
Согласно результатам других исследований, рынок чат-ботов будет расти в геометрической прогрессии. И речь идет не только об обслуживании клиентов, но и о продажах и маркетинге. Исследователи считают, что чат-боты смогут заменить 6 % рабочей силы во всём мире. Это означает, что почти 200 миллионам человек придется искать новую, более интересную работу.
Наконец, аналитики считают, что использование чат-ботов может сэкономить 7 триллионов долларов в год во всем мире.
Намерения и выражения
Два года назад я ненавидел чат-боты, а сегодня они мне нравятся, потому что я их разрабатываю. Но многие сегодня их по-прежнему не любят. Почему же чат-боты так плохи?
Мне кажется, причины их несовершенства можно разделить на две группы: одна относится к сфере ИИ, а вторая группа связан с людьми. Но поскольку я инженер и не слишком силён в психологии и прочих темах, относящихся к самим пользователям, то говорить будут только об ИИ.
В первую очередь нам нужно задаться вопросом: как чат-боты распознают, что им говорят пользователи? С распознаванием связано два ключевых понятия. Каково намерение пользователя, его цель? Например, человек получил счёт за услуги на огромную сумму и хочет знать, почему так много. Он обращается в службу поддержки клиентов, его намерение в том, чтобы получить ответ на свой вопрос. Такой пользователь может использовать несколько выражений; он может спросить: «Почему мой счёт такой большой?»; «Что случилось?»; «Что не так с моим счётом?»; «Почему я должен платить так много?» Эти понятия очень широко используются в сфере создания чат-ботов.
Как распознать намерения и выражения?
Раньше чат-боты вычленяли ключевые слова. Скажем, если в тексте от пользователя было слово «счёт», то обращение, вероятно, относится к службе биллинга. Но ведь пользователь может сказать: «Я увидел в счёте, что у меня, вероятно, была неправильная подписка». Этому человеку не интересен счёт, он хочет другую подписку. И приходится изобретать всевозможные правила-костыли.
Но пользователь может перевернуть предложение и сказать: «Я думаю, что у меня неправильная подписка, так как я заметил что-то не то в моем счёте». И ваши костыли уже не работают! И вы расширяете эти правила, громоздя новые слои костылей.
Подобные правила не работают идеально, и разработчики тратили слишком много времени на доработку. Дальнейшего прогресса удалось добиться только благодаря машинному обучению. В сфере понимания естественного языка (Natural Language Understanding, NLU) существует отдельное направление, которое работает над этой задачей.
При этом NLU является составной частью обработки естественного языка (Natural Language Processing, NLP) — этот термин описывает всё, что связано с пониманием и генерированием речи. Понимание того, о чём тебе говорят кто-то говорит — это, по сути, классификация выражений по принадлежности к определённому намерению.
Трудности определения намерений
Одна из основных проблем заключается в существовании «плохих» выражений. Чтобы обучить алгоритмы, нужно сгенерировать свои собственные выражения намерений. Например, у вас есть такие примеры:
Почему мой счёт такой большой?
Почему мой счёт такой дорогой?
Почему сумма в моем счёте такая большая?
Их можно использовать в качестве входных данных для обучения систем NLU и NLP. Эти предложения очень похожи, они начинаются с «Почему...». Также все предложения содержат слова «мой счёт», поэтому можно использовать простое правило смены порядка, например, о наличии словосочетания «мой счёт». Кроме того, каждый раз упоминается слово «так», и можно предположить, что оно относится именно к обсуждению счёта. Если вы не объясняли алгоритму, что именно имеет значение при определении такого рода намерений, то ваша система NLP будет работать плохо.
В предложении «С какой стати я должен платить намного больше, чем обычно?» нет ни одного из выделенных выше слов. Система NLP не сможет понять, что предложение принадлежит к этой группе, если только у вас нет единого намерения. Но если намерений несколько, то ситуация становится очень сложной.
Разнообразие выражений
Итак, нам нужен очень разнообразный набор выражений. Сгенерировать их — задача непростая. Для этого я разработал свою стратегию диверсификации.
Разнообразие синонимов → Разнообразие порядка слов
Одна часть системы NLP управляет разнообразием синонимов, и ещё одна часть обрабатывает разнообразие порядка слов. Большинство NLP-систем состоят из двух основных блоков:
- Word2Vec, преобразующий распознаваемые слова в векторное представление.
- Свёрточная нейронная сеть (СНС) или рекуррентная нейронная сеть (РНС), обрабатывающая порядок слов.
Особенности Word2Vec позволяют ему узнавать определённые свойства слов, и в результате слова, схожие по смыслу, окажутся близки друг к другу. Отложим по оси «размер» транспортные средства:
И если вы сделали всё правильно, то сможете распределить эти сущности по ещё одной оси — среда, для которой предназначен этот вид транспорта.
Для обучения системы вам нужно знать, какое разнообразие актуально для вашей задачи, а какое не актуально. Допустим, вам нужно перевезти что-то действительно большое, и способ перевозки не имеет значения. Тогда, вероятно, будет допустимо такое разнообразие:
В другом случае, размер может не иметь значения, лишь бы доставлялось по суше.
Word2Vec преобразует слова в векторное представление. Затем это представление передаётся нейросети, которая изучает порядок слов.
Моя стратегия довольно простая. Сначала создаём много предложений. В случае со счётом нас интересуют не синонимы, а только порядок слов.
Почему мой счёт такой большой?
Мой счёт такой большой!
В моем счёте возмутительная сумма!
Слово «счёт» находится в разных местах предложения. Мы пытаемся сгенерировать как можно больше примеров с различным порядком слов, не заботясь о том, как бы выразить одну мысль разными словам.
Затем нужно добавить синонимы разнообразия. Допустим, в первом предложении вместо «почему» можно сказать «как так получилось,...», «объяснить мне, почему...» или «скажите, как так произошло, что...», а затем можно закончить предложение любым другим вариантом. Например, «Объясните мне, почему ваш чек такой громадный».
Создаём список синонимов, разрешённых в этом контексте, пишем сценарий для генерирования выражений, и получаем хороший обучающий датасет. А далее нужно явным образом сказать системе, какие синонимы разрешены в этом контексте.
Совершенствование
Мне кажется, многие компании забывают о том, что получившегося чат-бота необходимо совершенствовать.
Возьмём предложение: «Как так получилось, что мне нужно платить намного больше, чем обычно?» Эти слова не входят в мои синонимы, и порядок слов отличается от использованных ранее. Не нужно добавлять это предложение в качестве другого выражения. Сначала посмотрите, существует ли такой порядок слов, и если нет, то просто добавьте предложение как новый порядок слов, а затем добавьте синонимы. Таким образом, вы получите очень разнообразный набор выражений.
Оценка разнообразия выражений
Как узнать, насколько хорошо всё работает? Можно поэкспериментировать с объединением векторных представлений слов в кластеры упрощённых выражений, и оценить, насколько они разнообразны.
Метрика очень простая: мы подсчитываем количество кластеров и делим его на количество выражений. В среднем, самые разнообразные выражения имеют уровень примерно 50 %.
Очевидно, что если разнообразие ниже 20 %, то вы работаете не очень хорошо. С другой стороны, если разнообразие выше 80 %, то выражения, вероятно, не связаны друг с другом, и алгоритму очень трудно найти хорошее сочетание.
Точность распознавания
Оценка обучения (train score) означает, насколько точно работает система на обучающем датасете. Это не очень интересно, потому что вы получите лишь оценку вашего обучающего датасета. И что делать дальше, непонятно.
В этой ситуации вас должно интересовать то, какие выражения классифицированы неправильно. Где всё пошло не так?
У предложения «Я увидел в счёте, что у меня, наверное, неправильная подписка» высокая вероятность быть неправильно классифицированным даже с примерами, которые я показал выше.
И если вы видите, что предложение неправильно классифицировано, то нужно выяснить, как улучшить ситуацию.
Word2Vec и рекуррентную нейросеть часто считают чёрными ящиками, их очень трудно интерпретировать. Но всё же есть один не слишком сложный способ. Отдельно для каждого слова мы добавляем шум. И начав менять какое-то слово, вы увидите, насколько чувствительным становится определение этого конкретного слова.
Так мы поступаем с каждым словом в предложении: добавляем шум в вектор и прогоняем его через алгоритм. Если результат получается таким же, то алгоритм это слово не интересует. Если после добавления шума результат становится совершенно другим, то, вероятно, это слово очень актуально.
Проанализировав таким образом чувствительность, вы сможете понять, что намерение было определено ошибочно, например, из-за слова «счёт». Или, если в предложении есть только слова «почему...», то, возможно именно они привели к такому определению намерения. Если всё дело в слове «счёт», то у вас есть несколько вариантов:
- Удалить это выражение, и ваше неправильно классифицированное выражение исчезнет.
- Либо в группе выражений, связанных с подпиской, вы просто добавляете больше выражений со словом «счёт», чтобы система начала «понимать», что эти два слова могут встречаться вместе. И, исходя из контекста, вы должны выяснить, что происходит, независимо от того, идёт ли речь о счёте или о подписке.
- Или, наоборот, вы можете добавить больше выражений, связанных со «счётом», но не содержащих его, чтобы система стала менее чувствительной к «счёту».
Разговорные потоки
Следующее, чему тоже мало кто уделяет внимание, — это разговорные потоки (conversational flow). Как люди используют ваш бот? Как они работают с ним? Что происходит в разговоре? Что делают большинство пользователей?
На этой схеме представлено развитие разговора. Видно, что этот поток используется чаще всего, что многим людям нравится эта часть бота. Но важнее увидеть, где в разговоре возникают моменты, из-за которых люди перестают пользоваться ботом: что-то спрашивают, а потом внезапно уходят.
Анализ эмоций
Важно стараться понять, что люди чувствуют, когда общаются с вашим чат-ботом. Для этого мы используем анализ эмоций. Если вы можете понять, что 60 % или больше пользователей чувствуют недовольство после общения с чат-ботом, то с этим необходимо что-то делать. Я не думаю, что какая-либо диалоговая платформа учитывает такую информацию.
Довольно часто негативные эмоции вызывают предложения, которые не выглядят негативными — они просто были выучены чат-ботом на основе эмодзи. Если у вас в датасете есть саркастическое предложение, то оно может означать всё, что угодно. Бот не должен считать, что оно связано с плохой эмоцией, потому что выражение может быть нейтральным.
Примеры использования
Когда стоит использовать чат-боты? Когда вашим клиентам нужен быстрый ответ, или они не хотят висеть в очереди на телефоне, прежде чем появится оператор, готовый помочь им.
Если не хватает персонала, то почему бы не воспользоваться чат-ботом, чтобы быстро ответить на основные или частые вопросы?
Также очень важно выяснить, на какую сферу вашей деятельности приходится большая часть затрат, потому что тогда вы сможете сэкономить немало денег, если передадите эту сферу чат-ботам.
Роботы — не лучшие собеседники с точки зрения эмоциональности. Если вы звоните в службу спасения, то хотите получить прямой ответ. Но если у вас проблемы с автомобилем или небольшая авария, вы звоните в автосервис и не хотите долго ждать на линии, то можете просто сказать: «У меня лопнула шина», что-то типа того. Конечно, я не имею в виду небольшие аварии или несчастные случаи с большим количеством раненых, в таких ситуациях чат-боты использовать нельзя.
И хочу затронуть ещё один аспект: оценка того, подходит ли чат-бот для конкретной задачи. Многие из наших клиентов приходят к нам и говорят: «У нас есть такая форма на сайте, почему бы не передать её чат-боту?» Но мы работаем с формами уже много лет, и считаем, что они очень эффективны.
Формы очень просты, и люди знают, как с ними работать. Зачем превращать форму в чат-бот? Какая-то часть взаимодействия с пользователем подходит для чат-бота, но иногда лучше просто заполнить форму, потому что это намного проще.
Но бывают и другие ситуации.
Например, если графический интерфейс не слишком удобен для поиска информации, то выходом может стать разговорный пользовательский интерфейс. Конечно, если у вас есть «плохие» выражения, то чат-бот не будет работать. И обычно такие выражения генерируются человеком.
Самое главное — это дизайн разговора. Этой теме посвящена целая конференция VoiceCon. Дизайн разговора должен быть очень строгим. А если вы сделаете хороший дизайн, то вам может сойти с рук не очень качественный ИИ. И это довольно печально, поскольку вызывает сбои в чат-ботах.
Полезные советы
Наверное, многие из вас встречали всплывающие окна на сайтах: «Здравствуйте. Могу ли я вам чем-то помочь?» или «Я вижу, что ты пытаешься отправить письмо. Позволь мне помочь тебе!»
Не ставьте чат-боты на главной странице. НЕ ДЕЛАЙТЕ ЭТОГО.
Такие боты можно использовать лишь в более мягкой форме, если они не занимают всю страницу. Тогда люди начинают использовать бота, потому что он может помочь вам найти ответы. Кроме того, поскольку вы ограничиваете сферу действия бота, его становится легче разрабатывать. При этом вы не докучаете людям ботом, который им в данный момент не нужен.
Люди склонны персонализировать чат-бота. Им не нравятся нарочитые роботы.
Персонализируйте своего чат-бота! Даже если вы каждый раз говорите своим клиентам, что это робот, всё равно придайте ему некоторые индивидуальные черты.
Если вы менеджер отеля, то, быть может, вам нужен очень формальный чат-бот, который говорит как дворецкий: «Да, сэр», «Спасибо, сэр». А если вы телекоммуникационная корпорация, и разрабатываете тарифные планы для молодежи, то лучше использовать что-то типа: «Эй, чувак, как дела?»
Всегда помните о том, кто является вашей аудиторией.
Если будете аккуратными и последовательными, то чат-бот больше понравится вашим клиентам. Соблюдайте согласованность на протяжении всего разговорного потока, ведь часто в начале всё идёт хорошо, а через некоторое время беседа становится очень роботизированной.
Очень важно, чтобы ваш чат-бот общался в духе сотрудничества. И огромное значение имеет то, как он представляется в самом начале.
Человек открыл вашего чат-бота по какой-то причине. Объясните сразу пользователю, что можете сделать чат-бот. Кроме того, управляйте ожиданиями пользователя: говорите, что вы бот, потому что некоторые ошибки ему будут простительны.
Не используйте слишком общих фраз. Не спрашивайте: «Чем я могу вам помочь?»
Таких ботов я обычно прошу: «Помоги мне выиграть в лотерею», или что-то в этом роде. Так что пусть бот общается ясно и просто.
Действительно важно — и трудно — обрабатывать передачу инициативы в разговоре.
Когда мы общаемся друг с другом, то используем визуальные сигналы, позволяющие нам понять: «Теперь моя очередь говорить». Но в чате это реализовать довольно сложно. Нужно дать понять пользователю, что сейчас бот ждёт, что ему напишет человек. Например, он заказал бургер, и бот можете спросить: «Хотите ещё картошку фри?»
Очень важно использовать в ботах «человеческий» язык.
Сухой разговор очень раздражает. Используйте личность бота, чтобы сделать разговор более правдоподобным.
Очень соблазнительно начать подтверждать или проверять подтверждения на протяжении всего разговора с клиентом.
Но это раздражает, если бот постоянно спрашивает: «Всё в порядке?» или «Правильно?» или «Вы заказали бургер, верно?» Не делайте это в своём чат-боте!
Такое допустимо лишь там, где это действительно актуально. Например, в конце разговора добавьте: «Хорошо. Теперь вы должны оплатить бургер с фри и напитком. Всё верно?» Изящный способ справиться с этой задачей — иметь встроенное подтверждение. Если заказывают бургер, вы можете спросить: «Хорошо. Вы хотите фри к вашему бургеру?»
В какой-то момент бот может что-то неправильно истолковать. К тому же людям свойственно ошибаться. Иногда вы что-то заказываете и думаете: «Хмм, наверное, я вместо этого возьму тройной бекон, так лучше». Поэтому разработчик должны убедиться, что чат-бот способен справиться с этим. Вы должны создать разговорный поток, чтобы понять, что в этот момент разговора мы хотим изменить заказ.
Разрабатывайте потоки, устойчивые к ошибкам пользователей, потому что люди постоянно ошибаются!
Смысл в том, чтобы немного напоминать человека, но общение с людьми, которые постоянно извиняются, очень раздражает. Так что пусть ваш чат-бот не извиняется слишком часто. Избегайте извенений, предлагайте решения. Скажите: «Я не понял. Вы можете перефразировать?» Если вы допустите несколько ошибок, то можете сказать пользователю: «Вы спрашиваете что-то, чего я не понимаю. Вы можете заказывать у меня бургер, фри и напитки».
Будущее
Упростите для клиента создание чат-бота с хорошим дизайном разговора. Если вы допустите ошибку, попробуйте её исправить. Честно говоря, чат-боты всё ещё отстой. Но можно создать чат-боты, которые действительно будут работать, делать за нас какую-то работу. Только придётся подойти к этому правильно.
Мнение эксперта
А теперь мы хотим поделиться с вами мнением эксперта нашей компании об описанных здесь идеях и советах.
Николай Князев, ведущий специалист машинного обучения компании «Инфосистемы Джет»:
Выступление автора посвящено тому, что нужно знать разработчику, чтобы делать успешных чат-ботов. Тема интересная, многие моменты не лежат на поверхности. Однако, стоит понимать, что, с точки зрения алгоритмов, обзор методов довольно общий, и нет указаний на их реализации.
Например, приведён пример с Word2vec, но не сказано о других методах векторизации слов, например, Glove, Fasttext. Приведены различные способы классификации текста (от мешка слов до RNN и CNN), но нет их сравнения или библиотек, где они реализованы (например, для Python это Keras, Scikit-learn и т. д.). Из общего обзора упущено два важных момента. Во-первых, региональная специфика: для разных языков будут успешны разные методы. И реализация для английского языка точно не подойдёт для русского языка. Хотя и в нашей стране есть разработки, например, bigARTM или корпус Тайга, на основе которого как раз можно и обучить упомянутый Word2vec.
Другой аспект, это концепция использования бота: one-shot бот (выбор квартиры, решение проблемы) или постоянное использование (часть рабочего процесса). В первом случае, действительно, запоминаются эмоции от общения и всё то, о чём говорил автор. Во втором же люди ждут именно «автомат Калашникова», чтобы он выполнял свои функции без дополнительных вопросов, потихоньку обучаясь наиболее коротким путям использования. И тут на первый план выходят не эмоциональный окрас, а user experience, ведь пока ещё нейросети в нашей голове подстраиваются под реальность куда быстрее своих собратьев в железе.
Автор: JetHabr