Если в автомобильной пробке голосовой помощник пожалуется, что он эти пробки тоже терпеть не может, то водителю и пассажирам станет легче, что не они одни мучаются. В психологии это называется раппортом и обычно ведет к доверительным отношениям между людьми. Если представить, что чат-боты тоже способны сопереживать, а главное, что люди это ценят, то чем это не сильный эмоциональный ИИ? На примере диалогов между людьми и чат-ботами попробуем разобраться, насколько эмпатичны аватары сегодня и какие фичи им можно еще добавить.
Начало тут.
Как будем изучать диалоговые эмоции в этот раз
В прошлый раз мы остановились на анализе и визуализации множества эмоций в диалогах, которые взяли из расшифровок роликов на ютубе. В них пользователи общаются с аватарами - воплощенными искусственными агентами - в играх и приложениях. Напомним, что все данные доступны в нашем репозитории на Каггле.
В этот раз попробуем сделать разбор отдельной эмоции, чтобы детально разобрать, как именно происходит эмоциональное взаимодействие пользователей и аватаров, которое проявляется в их репликах.
В этот раз мы также использовали чанки диалогов в 250 слов и попросили модель llama 70b instruct разделить текст чанка на речь разных собеседников и с помощью PAD-модели разметить эти фрагменты. Вот пример промпта, который мы использовали:
Analyze the following text and extract a dialogue between speakers. Then, perform the following tasks:
1. Extract the speaker's speech and enclose it in [speaker_1_speech] [/speaker_1_speech] tags.
2. Extract another speaker's speech and enclose it in [speaker_2_speech] [/speaker_2_speech] tags.
3. Evaluate the speaker's speech using the Pleasure-Arousal-Dominance (PAD) model, with scores ranging from -10 to 10 for each dimension:
- Pleasure: -10 (extreme displeasure) to 10 (extreme pleasure)
- Arousal: -10 (completely calm) to 10 (extremely excited)
- Dominance: -10 (totally submissive) to 10 (totally dominant)
Enclose the PAD scores in [speaker_1_pad] [/speaker_1_pad] tags, separated by commas.
4. Evaluate another speaker's speech using the same PAD model and scoring system.
Enclose the PAD scores in [speaker_2_pad] [/speaker_2_pad] tags, separated by commas.
Text to analyze:
{chunk}
Ensure that you only extract relevant dialogue and provide accurate PAD scores based on the emotional content of the speech. If no relevant dialogue is found, return "No relevant dialogue found."
Example output format:
[speaker_1_speech]speaker's extracted speech[/speaker_1_speech]
[speaker_1_pad]5,-2,7[/speaker_1_pad]
[speaker_2_speech]another speaker's extracted speech[/speaker_2_speech]
[speaker_2_pad]-1,3,-4[/speaker_2_pad]
Вспомним, что у нас есть история диалогов, а значит мы можем рассмотреть диалоговые эмоции в их динамике. Как развивается беседа, где она заходит не туда, а где наоборот - попадает точно в цель и возникает контакт между пользователями и аватарами - всё это есть в истории диалогов.
Мы визуализировали диалоги в виде вершин - реплик в диалоге, которые соединены друг с другом ребрами в момент перехода от предыдущей реплики к последующей. Таким образом получился направленный динамический граф, а вернее - два изолированных подграфа, так как у нас есть отдельная история реплик пользователя и аватара. Вот пример визуализации такого графа.
С каждым шагом идет переход от одной реплики к другой, при этом мы можем увидеть, насколько близки или далеки по расстоянию реплики пользователя и чат-бота в пространстве PAD-координат.
Эмпатия в диалогах: добавляем метрики и сравниваем людей и ботов
Тот факт, что можно измерить дистанцию между вершинами агента и пользователя в каждый момент перехода, позволяет ранжировать диалоги по степени близости координат. Что мы и сделали.
Наша гипотеза - чем ближе по координатам находятся реплики пользователя и чат-бота в каждый момент перехода, чем больше выражено сходство по эмоциям, тем больше в диалогах выражена эмпатия, другими словами, сопереживание. Почему это важно? В диалогах с эмпатичным чат-ботом есть большая вероятность, что пользователь и чат-бот больше понимают друг друга.
Кроме того, у нас есть еще и датасет с диалогами людей-собеседников, а значит их можно сравнить по расстоянию с диалогами людей и аватаров.
Вот что мы получили, когда проранжировали все диалоги по среднему расстоянию между репликами собеседников в обоих датасетах.
![](https://habrastorage.org/getpro/habr/upload_files/31e/0d5/803/31e0d580338a39f606eea329b526bdea.png)
Реплики людей-собеседников в среднем ближе по расстоянию друг к другу, чем реплики людей и ботов. Если гипотеза верна, то эмпатия в них проявляется больше. А разговоры людей и ботов довольно дистантные по сравнению с разговорами людей. Результат в целом очевидный - люди лучше ладят с людьми, чем с чат-ботами. Но хорошо, что мы подтвердили это данными на графике.
Тут важно понимать, что эмпатия определяется с помощью различных способов ее выражения в диалоге и расстояние - только один из них. Поэтому чтобы получить взвешенную оценку уровня эмпатии между собеседниками, мы добавили такие переменные. Вот некоторые из них:
Синхронность - насколько часто смена эмоций у собеседников ведет к похожим эмоциональным состояниям у обоих. Мы можем отследить, изменилась ли эмоция у обоих собеседников в положительную или отрицательную сторону. Если это так, то мы уловили эмоциональную синхронность в диалоге.
Сближение. Если эмоциональное состояние обоих собеседников сходится от начала к концу диалога, это может быть признаком роста эмпатии.
Перекрестная корреляция. Даже если эмоции собеседника изменяются не сразу, эта переменная поможет уловить похожесть смены эмоций. Возьмем ее в качестве дополнительного признака к эмоциональной синхронности.
Инерция. Показывает, насколько стабильны эмоции каждого собеседника.
Изменчивость. Наоборот, показывает насколько нестабильны эмоции.
Лидерство. Кто из собеседников обычно инициирует изменения.
Стабильность. Насколько постоянны эмоции.
Разнообразие. Насколько много разных эмоций.
Инертность. Степень изменения PAD-параметров от предыдущего шага к следующему.
Поскольку диалоговые реплики в нашем случае - это еще и направленные подграфы, мы добавили еще и графовые метрики. Поскольку расстояния между предыдущими и последующими вершинами в графе разное, можно использовать это свойство в качестве весов ребер, а также вычислить меры центральности для вершин графа. Вот некоторые из них:
Средний вес ребер в графе. Среднее арифметическое всех весов ребер.
Общая длина пути графа. Сумма всех весов ребер
Мера центральности по собственному вектору - степень влиятельности, которая ранжирует вершины в графе
Поскольку в основе наших данных - диалоги, то мы также добавили подходящие для них метрики, например, меру семантического сходства реплик для лучшего понимания взаимодействия пользователей и аватаров.
Теперь мы можем получить корреляции всех показателей в виде квадратной матрицы и посмотреть, что с чем связано.
Вот что мы получили:
![](https://habrastorage.org/getpro/habr/upload_files/824/525/0a8/8245250a8889978263b30d7e7fc7f3f5.png)
Заметно, что переменные образуют большие кластеры и сильно скоррелированы друг с другом. Поэтому посмотрим только на одну из корреляций, которая указывает на важность анализа того, что именно люди и аватары обсуждают в диалогах.
Семантическое сходство и степень влияния: 0.8824. Фактически это значит, что близкие по смыслу реплики собеседников сильнее влияют на ход беседы. Возможно, здесь и находится ключ к аватарной эмпатии, то есть подстройке под собеседника со стороны чат-бота, что можно использовать при разработке и запуске ботов в прод.
Это значит, что имеет смысл представить диалоги количественно и добавить их к другим фичам. Мы сделали это с помощью кодирования диалогов моделью sentence-transformers. Модель-кодировщик позволяет получить эмбеддинги, или пространство векторов, в нашем случае 768-мерное. Таким образом мы закодировали и чанки в 250 слов, и отдельные реплики пользователя и агента.
Добавляем невербальные признаки к разбору диалоговых эмоций и выясняем, насколько предсказуем внешний вид аватара
Для каждого диалога в нашем датасете есть вручную размеченные признаки, которые не содержатся в самом диалоге.
Самый главный для нас признак - это упрощенный или реалистичный образ аватаров, с которыми общаются пользователи.
В прошлый раз мы остановились на обсуждении теории социального отклика Клиффорда Насса. В терминах этой теории мы мгновенно переключаемся в режим общения с равным собеседником, если у того есть минимальные антропоморфные признаки. Например, мы видим, что два кружка с точками внутри них расположены близко друг к другу по горизонтальной линии. Мы распознаем это в виде глаз собеседника.
Этой теорией давно пользуются разработчики антропоморфных собеседников. Но есть и другой подход, когда разработчики создают гиперреалистичных аватаров. В таком случае аватар с помощью продвинутой невербалики - мимики, жестов, положения частей тела и так далее - достоверно передает мельчайшие переливы эмоций. Это помогает выразить вторичные или сложные эмоции, в то время как у упрощенных аватаров эмоции в основном первичные, то есть простые.
Приложение Replika в свое время стало революцией в своей нише и открыло дорогу разработке реалистичных аватаров. Пользователи Реплики вступают в романтические отношения со своими аватарами, а также женятся и заводят детей, то есть вступают в сложные и длительные формы взаимодействия с ними. Конечно, при желании и должном уровне фантазии завести детей можно и со скрепкой Клиппи, но в случае Реплики это обрело буквально таки массовый характер, о чем есть многочисленные посты в тематических сообществах. Не забываем и про разработчиков, для которых такая бурная активность означает заметное увеличение длины пользовательской сессии и частоты сессий, а это основные метрики оценки эффективности чат-бота.
![картинка отсюда картинка отсюда](https://habrastorage.org/getpro/habr/upload_files/1f3/ce1/3f8/1f3ce13f8de9c3b24c412995650bfa4c.png)
Однако с гиперреализмом есть известная проблема - если аватар слишком похож на человека, возникает эффект зловещей долины. Люди воспринимают такие образы уже скорее как образы живых существ, но не совсем живых, что вызывает ощущение страха и отвращения к таким аватарам.
![картинка отсюда картинка отсюда](https://habrastorage.org/getpro/habr/upload_files/648/96a/148/64896a1487e06311c57c4b0b504d355d.png)
Типичный пример - различные аниматроники. Японские куклы Бунраку могут вызвать неприятные эмоции у неподготовленного зрителя, потому что хотя и выглядят как куклы, но своими естественными движениями напоминают скорее живых людей. И даже слишком реалистичные движения роботов-собак Бостон Дайнемикс в далекие нулевые поначалу выглядели пугающими, настолько они были похожи на движения живых существ, преимущественно пауков. То есть разработчикам реалистичных воплощенных чат-ботов нужно балансировать между похожестью и чрезмерной похожестью аватаров на живые существа.
Другой признак, который мы взяли для классификации - это тип взаимодействия. Он может быть диадным, где аватар и пользователь общаются лицом-к-лицу. Или усложненным, где может быть много аватаров и пользователей, то есть при общении собеседник удерживает во внимании множество других собеседников и согласует свои действия с этой сложностью.
Третий признак - это среда или окружение, в которое помещены пользователь и аватар. Вспомним, что мы работали с видеороликами ютуберов, которые разговаривали с аватарами - воплощенными чат-ботами. При этом общение происходило в различном окружении. Например, это болтовня в Character.ai, где вы можете выбрать бота-персонажа или, что гораздо интереснее, создать своего. Другой пример - это игровое окружение, где общение с аватаром происходит в логике предустановленного геймплея. В выборку попали такие игры, как Suck Up, Replica Smart NPCs и Yandere AI Girlfriend Simulator. Иными словами, чат и игра - это различные фреймы, которые влияют на поведение пользователей, а значит их нужно учитывать при разборе диалогов.
В итоге у нас получилось три пары признаков и восемь групп, каждая из которых содержит комбинацию из трех признаков.
Окружение |
Внешний вид |
Тип взаимодействия |
чат / игра |
упрощенные / реалистичные |
диадный / сложный |
В нашем датасете эти признаки представлены неравномерно. Поэтому возьмем самые часто встречаемые. Это внешний вид аватара - реалистичный и упрощенный.
![реалистичный: 0 | упрощенный: 1 реалистичный: 0 | упрощенный: 1](https://habrastorage.org/getpro/habr/upload_files/c0f/74b/70a/c0f74b70aa531126fc4fff450147e5f4.png)
Заметно, что данных мало, поэтому во время их готовки мы сгенерировали дополнительные синтетические данные, сбалансировали классы, провели отбор признаков и настроили гиперпараметры для различных методов предсказания этих признаков. Все как всегда доступно в ноутбуке на Каггле.
В итоге модели тренировались на таком наборе фичей:
эмбеддинги диалогов
эмоциональные метрики
графовые метрики
Ранжирование фичей по степени важности дало такой результат:
![](https://habrastorage.org/getpro/habr/upload_files/166/9e7/19a/1669e719a39c81c0cea2280c4be69322.png)
Больше всего для обучения пригодилась перекрестная корреляция. Вспомним, что с ее помощью можно отследить тончайшие смены эмоций в диалогах, даже если они происходят не сразу. Сделаем пометку: в следующей итерации исследования изучить ее подробнее, чем это сделано сейчас.
Вот результаты предсказаний типа внешности аватара, которые мы получили:
Метод |
Оценка Test ROC AUC |
Оценка Cross-validation ROC AUC |
Random Forest |
0.9980 |
0.9925 |
XGBoost |
0.9947 |
0.9868 |
LightGBM |
0.9937 |
0.9856 |
CatBoost |
0.9537 |
0.9568 |
SVM |
0.9177 |
0.9287 |
Decision Tree |
0.8749 |
0.8854 |
Naive Bayes |
0.8213 |
0.8261 |
Результат обучения и проверки на тестовых данных дал довольно высокий скор. Это значит, что мы можем довольно точно предсказывать внешность аватара по диалоговым и эмоциональным признакам. Конечно, в условиях небольшого набора данных всегда есть риск переобучения, поэтому в дальнейшем мы планируем зачерпнуть еще больше данных из ютуба и перепроверить на них эти результаты.
Что это дает разработчикам аватаров, то есть какие возможности появляются, если мы можем предсказывать такие признаки, как тип аватара? Если мы можем прогнозировать внешний облик аватара по диалоговым эмоциям и репликам, то это значит, что в ходе беседы аватар сможет подстроиться под собеседника-пользователя и слегка изменить свою внешность, например, стать чуть более реалистичным или наоборот мультяшным. Если наша гипотеза верна, то это значит, что пользователь и аватар лучше поймут друг друга и получат еще большее удовольствие от общения.
Комментарии (9)
MichaelBorisov
23.08.2024 15:46+1Очередная идея обмануть людей красивой формой.
Люди ценят эмпатию не за форму (что кто-то рядом высказывает слова сопереживания или ругается). А за то, что рядом живой человек находится в той же лодке; страдает так же, как ты, и тратит на это драгоценное и невосполнимое время своей жизни.
Сколько было недавно этих озарений на тему: "А давайте спросим у пользователя, понравилось ли ему! А давайте спросим его мнение о нашем продукте! А давайте скажем ему, что его мнение очень важно для нас!" Да, поначалу люди на это велись. Пока не обнаружили, что интерес их мнением - показной. Что на самом деле никто их мнением не интересуется. И оставлять отзывы и участвовать во всевозможных опросах - напрасная трата времени в лучшем случае. Фраза: "Ваше мнение очень важно для нас" и вовсе стала издевательской.
Так и здесь. Как только я пойму, что "сопереживает" и "грустит" со мной не живой человек, сидящий рядом (а в этом нетрудно убедиться, осмотревшись вокруг!), а скрипт, совершенно обстоятельствами не затронутый; время своей жизни не тратящий, а просто желающий ко мне подлизаться - то кроме отвращения к такому "помощнику", других чувств к нему испытывать не буду.
В самом деле, что мы испытываем к окружающим, которые кривят душой в своих изображаемых эмоциях? Которые нам фальшиво сопереживают или фальшиво радуются вместе с нами?
visualcomments Автор
23.08.2024 15:46+1Да, ну тут в любом случае получается подстройка бота под пользователя, но немного другая. Бот может сопротивляться и дистанцироваться, если у юзера есть на это запрос, например. Есть целый пласт пользовательской этнографии, когда люди всячески ищут способы напугаться и находят таки. Например, изобретают миф про приложение или устройство, которое их подслушивает или даже преследует. Ну а разработчики собирают этнографию, находят такие запросы и встраивают в свои приложения, чтобы оно периодически шумело в определенные моменты и в полуигровой форме пугало юзера. А что касается сопереживания и эмпатии, оно тоже может быть совсем не веселым, такие примеры есть в нашем датасете.
cynadebk
23.08.2024 15:46+1Опросы пользователей это и время, и ресурсы, были бы не нужны, их бы не делали. Другое дело, что взгляд на продукт у разработчиков и пользователя может быть разный, и приоритеты задач видятся по-разному. В соцсетях тоже собирают пользовательские инсайты, чтобы развивать продукт. Осмысленное взаимодействие пользователей и разработчиков существует - и никто душой тогда не кривит, действительно интересно мнение пользователей. Так же и с искусственными агентами. Если они выполняют задачу, которая человеку нужна, у них вполне может выстроиться осмысленное взаимодействие. А для выполнения задачи, так же, как и у людей в команде, эмоции могут оказаться полезными.
CitizenOfDreams
23.08.2024 15:46+1Если в автомобильной пробке голосовой помощник пожалуется, что он эти пробки тоже терпеть не может
То я его деинсталлирую из жалости, чтоб не мучился. Не, компьютерная индустрия явно свернула не туда, когда программисты из циничных мизантропов в свитерах с оленями превратились в людей, которые на полном серьезе произносят слова "доверительные отношения".
visualcomments Автор
23.08.2024 15:46+1То я его деинсталлирую из жалости, чтоб не мучился
Тоже проявление эмпатии, однако.
На самом деле цинизм никуда не делся, разработчикам тут важно увеличить время пользовательской сессии и частоту сессий за день. Вот например, показательный случай с СяоАйс.
RusikR2D2
Справедливо не для всех. Может пару раз и будет забавно, но дальше это будет больше раздражать. Мне, например, понятно, что это просто программа и нет за ней никаких эмоций, особенно, если фразы будут повторяться. Этот как слушать ответы юнитов в компьютерных стратегиях. Редко, когда фраз получается удачной и не раздражает на десятый раз.
visualcomments Автор
Да, всё так, для этого и нужна гибкая подстройка чат-бота под уникальный случай взаимодействия. Если бот не повторяет заготовленные фразы, а действует ситуативно, это будет лучше.
RusikR2D2
А зачем? Понятно же, что все эти его "жалобы" - это просто программа. Свистоперделка, которая кушает ресурсы смартфона и тратит трафик (если будет нужен интернет).
Одно время в Яндекс-Навигаторе были популярны голосовые "моды" под трансформеров и что-то еще.. Первое время часто было слышно, теперь уже давно не слышал - забыли все. Лишь изредка встречается X-wing из звездных войн вместо стрелочки.
visualcomments Автор
Да, именно как развлечение это не сильно оправдано, быстро надоедает. Но в других задачах может быть важным умение бота подстраиваться под пользователя. Вот сейчас все идет к тому, что генеративный ИИ сменится интерактивным. Например, вы даете задание чат-боту закупить канцтовары и доставить их по такому-то адресу. Для этого ему нужно связаться с другими ботами и людьми, и скоординировать процесс закупки-доставки. Если для общения с другими чатботами достаточно машинного кода, то общаться с людьми, а тут есть сложнейшая задача самому инициировать диалог, боту уже гораздо сложнее. Для этого и нужна подстройка, чтобы все друг друга поняли.