Могут ли боты распознавать эмоции в диалоге? Мы решили проверить

Могут ли боты распознавать эмоции в диалоге? Мы решили проверить

Всем привет! Меня зовут Олег Юшков и сегодня я от лица нашей команды TWIN расскажу о том, способен ли бот определять эмоции человека по голосу в реальном времени по телефону или в голосовом сообщении и насколько точен этот анализ.

Кратко о нас

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

Что такое эмоции?

Чтобы подвести к теме, для начала нужно понять что такое эмоции и какие они могут быть? Краткий курс психологии за 2 абзаца:

1. Эмоция — психический процесс средней продолжительности, отражающий субъективное оценочное отношение к существующим или возможным ситуациям и объективному миру. (взято с wikipedia.org)

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

Ученые определяют некий базовый список эмоций, а всё остальные это уже производные от него. Очевидно, что список эмоций может быть огромным. Изучая различные виды эмоций я например узнал, что такое «проноя» (обратное от паранойи). В общем, точно определить каждую эмоцию, испытанную человеком, не в силах даже самым опытным и титулованным специалистам. Но все теории сходятся в одном — все эмоции можно разделить на положительные, отрицательные и нейтральные, если кратко, то:

1. К положительным относятся: удовольствие, восторг, радость, уверенность, симпатия, любовь, нежность, блаженство.

2. К негативным: злорадство, месть, горе, тревога, тоска, страх, отчаяние, гнев.

3. К нейтральным: любопытство, изумление, безразличие.

Теперь о ботах

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

Какие возможности модуль даёт нашим клиента?

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

Решение

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

Теперь по порядку о каждом методе и особенностях.

Первый этап

Распознавание эмоций человека по тексту (по его сообщениям)

В ходе небольшого брейншторма мы решили разработать модуль с простой рекуррентной нейронной сетью, обученной на открытых источниках данных с небольшой ручной корректировкой. Для обучения мы решили использовать датасет из набора русскоязычных постов в соцсетях (250 тыс. постов).

Что получили

Как я писал в вводной информации, мы разделили эмоции на 3 базовых вида. На основе этого и была разработана нейронная сеть, которая умеет определять 3 типа эмоций: негативные, нейтральные и позитивные. Причём нейтральным считается текст, который нельзя точно отнести к положительному или отрицательному — то есть когда текст лежит на границе двух классов эмоций (формально, нейронка умеет определять только положительные эмоции, остальные эмоции вычисляются на основе близости текста к данной эмоции). В результате получили точность распознавания 75.3% на тексте, длиной от 1 слова (большую роль играет «смысловая нагрузка» слов, а не их количество (например, маты или похвала)).

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

Второй этап

Распознавание эмоций человека по тексту в режиме онлайн.

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

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

Третий этап

Распознавание эмоций человека по его речи/голосу.

Следующей задачей для нас стояла разработка модуля для определения эмоций по речи человека. Модуль является уже более сложной рекуррентной нейронной сетью (добавили несколько слоёв свёртки), чем для распознавания пола, о которой мы писали в предыдущей статье. Модуль обучался на аудиозаписях разговоров с реальными людьми в разных call-центрах, проверенных и размеченных вручную. Нейронная сеть умеет определять 3 типа эмоций: негативные, нейтральные и позитивные. Точность распознавания эмоций составила:

- для аудиозаписей, длиной от 1 секунды — 79.3%

- для аудиозаписей, длиной менее 1 секунды — около 60% и ниже (в этом случае слишком мало данных для точной работы)

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

Четвертый этап

Распознавание эмоций человека по его речи в режиме онлайн.

В самом начале поток с речью клиента анализируется детектором голосовой активности. Как только детектор определил наличие голоса — фрагмент речи записывается, до момента, пока не наступит тишина. Данный фрагмент затем отправляется в модуль распознавания эмоций человека по его речи. Если модуль распознал эмоции с уверенностью выше 70%, то этот ответ принимается и дальше используется в скрипте. Если уверенность распознавания ниже, либо модулю не удалось распознать эмоцию — ему отправляется следующий фрагмент речи, содержащий голос клиента.

Для модуля критично количество речи, отправляемой на анализ. Если длительность речи меньше 1 секунды — модуль вернёт ошибку. Чем больше речи отправлено на анализ, тем точнее будет результат (в пределах «одной» эмоции, конечно же).

Результат работы

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

Заключение

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

Если у вас есть желание протестировать модуль на собственном кейсе, то мы готовы помощь с реализацией. Сейчас модуль уже доступен в нашем редакторе скриптов и может использоваться в любом месте, как в начале разговора, так и после определённого элемента скрипта. Главное при работе с модулем учитывать возможное количество речи, которое может поступить от клиента (т.е. в самом начале разговора использовать модуль нет смысла, т.к. люди редко говорят больше 1-3 слов в этот момент).

Будем рады ответить на ваши комментарии или вопросы:)

77
Начать дискуссию