Если в автомобильной пробке голосовой помощник пожалуется, что он эти пробки тоже терпеть не может, то водителю и пассажирам станет легче, что не они одни мучаются. В психологии это называется раппортом и обычно ведет к доверительным отношениям между людьми. Если представить, что чат-боты тоже способны сопереживать, а главное, что люди это ценят, то чем это не сильный эмоциональный ИИ? На примере диалогов между людьми и чат-ботами попробуем разобраться, насколько эмпатичны аватары сегодня и какие фичи им можно еще добавить.
Начало тут.
В прошлый раз мы остановились на анализе и визуализации множества эмоций в диалогах, которые взяли из расшифровок роликов на ютубе. В них пользователи общаются с аватарами - воплощенными искусственными агентами - в играх и приложениях. Напомним, что все данные доступны в нашем репозитории на Каггле.
В этот раз попробуем сделать разбор отдельной эмоции, чтобы детально разобрать, как именно происходит эмоциональное взаимодействие пользователей и аватаров, которое проявляется в их репликах.
В этот раз мы также использовали чанки диалогов в 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-координат.
Тот факт, что можно измерить дистанцию между вершинами агента и пользователя в каждый момент перехода, позволяет ранжировать диалоги по степени близости координат. Что мы и сделали.
Наша гипотеза - чем ближе по координатам находятся реплики пользователя и чат-бота в каждый момент перехода, чем больше выражено сходство по эмоциям, тем больше в диалогах выражена эмпатия, другими словами, сопереживание. Почему это важно? В диалогах с эмпатичным чат-ботом есть большая вероятность, что пользователь и чат-бот больше понимают друг друга.
Кроме того, у нас есть еще и датасет с диалогами людей-собеседников, а значит их можно сравнить по расстоянию с диалогами людей и аватаров.
Вот что мы получили, когда проранжировали все диалоги по среднему расстоянию между репликами собеседников в обоих датасетах.
Реплики людей-собеседников в среднем ближе по расстоянию друг к другу, чем реплики людей и ботов. Если гипотеза верна, то эмпатия в них проявляется больше. А разговоры людей и ботов довольно дистантные по сравнению с разговорами людей. Результат в целом очевидный - люди лучше ладят с людьми, чем с чат-ботами. Но хорошо, что мы подтвердили это данными на графике.
Тут важно понимать, что эмпатия определяется с помощью различных способов ее выражения в диалоге и расстояние - только один из них. Поэтому чтобы получить взвешенную оценку уровня эмпатии между собеседниками, мы добавили такие переменные. Вот некоторые из них:
Синхронность - насколько часто смена эмоций у собеседников ведет к похожим эмоциональным состояниям у обоих. Мы можем отследить, изменилась ли эмоция у обоих собеседников в положительную или отрицательную сторону. Если это так, то мы уловили эмоциональную синхронность в диалоге.
Сближение. Если эмоциональное состояние обоих собеседников сходится от начала к концу диалога, это может быть признаком роста эмпатии.
Перекрестная корреляция. Даже если эмоции собеседника изменяются не сразу, эта переменная поможет уловить похожесть смены эмоций. Возьмем ее в качестве дополнительного признака к эмоциональной синхронности.
Инерция. Показывает, насколько стабильны эмоции каждого собеседника.
Изменчивость. Наоборот, показывает насколько нестабильны эмоции.
Лидерство. Кто из собеседников обычно инициирует изменения.
Стабильность. Насколько постоянны эмоции.
Разнообразие. Насколько много разных эмоций.
Инертность. Степень изменения PAD-параметров от предыдущего шага к следующему.
Поскольку диалоговые реплики в нашем случае - это еще и направленные подграфы, мы добавили еще и графовые метрики. Поскольку расстояния между предыдущими и последующими вершинами в графе разное, можно использовать это свойство в качестве весов ребер, а также вычислить меры центральности для вершин графа. Вот некоторые из них:
Средний вес ребер в графе. Среднее арифметическое всех весов ребер.
Общая длина пути графа. Сумма всех весов ребер
Мера центральности по собственному вектору - степень влиятельности, которая ранжирует вершины в графе
Поскольку в основе наших данных - диалоги, то мы также добавили подходящие для них метрики, например, меру семантического сходства реплик для лучшего понимания взаимодействия пользователей и аватаров.
Теперь мы можем получить корреляции всех показателей в виде квадратной матрицы и посмотреть, что с чем связано.
Вот что мы получили:
Заметно, что переменные образуют большие кластеры и сильно скоррелированы друг с другом. Поэтому посмотрим только на одну из корреляций, которая указывает на важность анализа того, что именно люди и аватары обсуждают в диалогах.
Семантическое сходство и степень влияния: 0.8824. Фактически это значит, что близкие по смыслу реплики собеседников сильнее влияют на ход беседы. Возможно, здесь и находится ключ к аватарной эмпатии, то есть подстройке под собеседника со стороны чат-бота, что можно использовать при разработке и запуске ботов в прод.
Это значит, что имеет смысл представить диалоги количественно и добавить их к другим фичам. Мы сделали это с помощью кодирования диалогов моделью sentence-transformers. Модель-кодировщик позволяет получить эмбеддинги, или пространство векторов, в нашем случае 746-мерное. Таким образом мы закодировали и чанки в 250 слов, и отдельные реплики пользователя и агента.
Для каждого диалога в нашем датасете есть вручную размеченные признаки, которые не содержатся в самом диалоге.
Самый главный для нас признак - это упрощенный или реалистичный образ аватаров, с которыми общаются пользователи.
В прошлый раз мы остановились на обсуждении теории социального отклика Клиффорда Насса. В терминах этой теории мы мгновенно переключаемся в режим общения с равным собеседником, если у того есть минимальные антропоморфные признаки. Например, мы видим, что два кружка с точками внутри них расположены близко друг к другу по горизонтальной линии. Мы распознаем это в виде глаз собеседника.
Этой теорией давно пользуются разработчики антропоморфных собеседников. Но есть и другой подход, когда разработчики создают гиперреалистичных аватаров. В таком случае аватар с помощью продвинутой невербалики - мимики, жестов, положения частей тела и так далее - достоверно передает мельчайшие переливы эмоций. Это помогает выразить вторичные или сложные эмоции, в то время как у упрощенных аватаров эмоции в основном первичные, то есть простые.
Приложение Replika в свое время стало революцией в своей нише и открыло дорогу разработке реалистичных аватаров. Пользователи Реплики вступают в романтические отношения со своими аватарами, а также женятся и заводят детей, то есть вступают в сложные и длительные формы взаимодействия с ними. Конечно, при желании и должном уровне фантазии завести детей можно и со скрепкой Клиппи, но в случае Реплики это обрело буквально таки массовый характер, о чем есть многочисленные посты в тематических сообществах. Не забываем и про разработчиков, для которых такая бурная активность означает заметное увеличение длины пользовательской сессии и частоты сессий, а это основные метрики оценки эффективности чат-бота.
Однако с гиперреализмом есть известная проблема - если аватар слишком похож на человека, возникает эффект зловещей долины. Люди воспринимают такие образы уже скорее как образы живых существ, но не совсем живых, что вызывает ощущение страха и отвращения к таким аватарам.
Типичный пример - различные аниматроники. Японские куклы Бунраку могут вызвать неприятные эмоции у неподготовленного зрителя, потому что хотя и выглядят как куклы, но своими естественными движениями напоминают скорее живых людей. И даже слишком реалистичные движения роботов-собак Бостон Дайнемикс в далекие нулевые поначалу выглядели пугающими, настолько они были похожи на движения живых существ, преимущественно пауков. То есть разработчикам реалистичных воплощенных чат-ботов нужно балансировать между похожестью и чрезмерной похожестью аватаров на живые существа.
Другой признак, который мы взяли для классификации - это тип взаимодействия. Он может быть диадным, где аватар и пользователь общаются лицом-к-лицу. Или усложненным, где может быть много аватаров и пользователей, то есть при общении собеседник удерживает во внимании множество других собеседников и согласует свои действия с этой сложностью.
Третий признак - это среда или окружение, в которое помещены пользователь и аватар. Вспомним, что мы работали с видеороликами ютуберов, которые разговаривали с аватарами - воплощенными чат-ботами. При этом общение происходило в различном окружении. Например, это болтовня в Character.ai, где вы можете выбрать бота-персонажа или, что гораздо интереснее, создать своего. Другой пример - это игровое окружение, где общение с аватаром происходит в логике предустановленного геймплея. В выборку попали такие игры, как Suck Up, Replica Smart NPCs и Yandere AI Girlfriend Simulator. Иными словами, чат и игра - это различные фреймы, которые влияют на поведение пользователей, а значит их нужно учитывать при разборе диалогов.
В итоге у нас получилось три пары признаков и восемь групп, каждая из которых содержит комбинацию из трех признаков.
Окружение | Внешний вид | Тип взаимодействия |
чат / игра | упрощенные / реалистичные | диадный / сложный |
В нашем датасете эти признаки представлены неравномерно. Поэтому возьмем самые часто встречаемые. Это внешний вид аватара - реалистичный и упрощенный.
Заметно, что данных мало, поэтому во время их готовки мы сгенерировали дополнительные синтетические данные, сбалансировали классы, провели отбор признаков и настроили гиперпараметры для различных методов предсказания этих признаков. Все как всегда доступно в ноутбуке на Каггле.
В итоге модели тренировались на таком наборе фичей:
эмбеддинги диалогов
эмоциональные метрики
графовые метрики
Ранжирование фичей по степени важности дало такой результат:
Больше всего для обучения пригодилась перекрестная корреляция. Вспомним, что с ее помощью можно отследить тончайшие смены эмоций в диалогах, даже если они происходят не сразу. Сделаем пометку: в следующей итерации исследования изучить ее подробнее, чем это сделано сейчас.
Вот результаты предсказаний типа внешности аватара, которые мы получили:
Метод | Оценка 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 |
Результат обучения и проверки на тестовых данных дал довольно высокий скор. Это значит, что мы можем довольно точно предсказывать внешность аватара по диалоговым и эмоциональным признакам. Конечно, в условиях небольшого набора данных всегда есть риск переобучения, поэтому в дальнейшем мы планируем зачерпнуть еще больше данных из ютуба и перепроверить на них эти результаты.
Что это дает разработчикам аватаров, то есть какие возможности появляются, если мы можем предсказывать такие признаки, как тип аватара? Если мы можем прогнозировать внешний облик аватара по диалоговым эмоциям и репликам, то это значит, что в ходе беседы аватар сможет подстроиться под собеседника-пользователя и слегка изменить свою внешность, например, стать чуть более реалистичным или наоборот мультяшным. Если наша гипотеза верна, то это значит, что пользователь и аватар лучше поймут друг друга и получат еще большее удовольствие от общения.