Помните самый грустный короткий рассказ? Сегодня он мог бы выглядеть так: «Меня сократили», — написал человек Claude. «Похоже, вам страшно за будущее», — ответил искусственный интеллект.
В опросе 500 человек 17,2% участников сообщили, что обращались к ChatGPT за поддержкой в вопросах психического здоровья. И вроде действительно, модели неплохо проговаривают чувства. Но как они отгадывают эмоции, если человек прямо их не называет?

Кто грустит?
«Я ждала, что он напишет и я как дура сидела весь вечер и ждала. Он так и не написал, а утром ответил, что кот уснул на телефоне, будить было жалко». Если попросить модель на этой фразе определить эмоцию и не уточнить чью, она может ответить, что кот, возможно, чувствовал умиротворение.
В исследованиях выделяют носителя переживания (experiencer), кому приписывают эмоцию. Модели, которые учитывали участников события по отдельности, справлялись с такой задачей лучше тех, что назначали одну эмоцию всему тексту.
Теперь о правильном ответе, с которым сравнивают предсказание модели. Для обучения классификатора нужны пары: текст и прикрепленная к нему метка, например «разочарование», и эти метки кто-то должен ставить.
В GoEmotions собрали 58 тысяч английских комментариев с Reddit. Разметчиков просили отметить эмоции, выраженные автором, выбирая из 27 категорий и нейтрального варианта. Можно было выбрать несколько эмоций сразу. Если ни одна не читалась достаточно уверенно — нейтральную метку. «Нейтрально» не говорит , что автор ничего не чувствовал; читатели лишь не нашли в тексте достаточных оснований для другого ответа.
Каждый комментарий оценивали трое. Если они не сходились хотя бы на одной метке, приглашали ещё двоих. Для обучения базовой модели убрали метки, выбранные только одним разметчиком; после фильтрации осталось около 93% примеров. Согласованные случаи удобнее для обучения и оценки. Неоднозначные фразы при этом никуда не исчезают из живой переписки. GoEmotions показывает, как размечают данные для специализированного классификатора; обычный чат-бот не обязательно учился на этом корпусе.
Автор сам может поставить хэштег, например #sad или #joy. Хештег ближе к тому, что человек говорит о себе, хотя может показывать иронию. Модели, обученные на авторских метках и на оценках посторонних читателей, в среднем лучше работали с данными своего типа. В другом исследовании метки самих авторов напрямую сравнили с ответами людей и языковых моделей, читавших их тексты. У обоих видов сторонних наблюдателей обнаружились существенные ограничения, хотя модели в условиях этого исследования чаще угадывали авторские метки лучше людей-разметчиков. Вопросы «что сообщил о себе автор?» и «что прочитал в его словах посторонний?» похожи только до первой проверки.
Разногласие читателей тоже можно сохранить. В корпусе StudEmo 5182 отзыва оценили по 25 человек; исследователи оставили ответы каждого, а не только итог голосования. Так видно, где текст читают одинаково, а где он допускает несколько толкований. Эти ответы можно представить как распределение меток. Но и оно описывает мнения наблюдателей, а не измеряет внутреннее состояние автора.
Например, читатель поставил метку «обида», если человек ждал сообщения и не дождался. Модель поставила ту же — на тесте это верный ответ. Слова «обида» в сообщении нет; её подсказала ситуация.
Через словарь нейросеть могла бы найти «боюсь» и предложить страх. В предложении «Меня сократили» такого слова нет. Первое предположение всё равно приходит быстро: тревога, ведь надо искать работу. Теперь допишите: «Вчера я подписал новый контракт, а сегодня получил выходное пособие». «Сократили» осталось на месте; вероятная реакция изменилась. В истории с котом обратная ловушка: слово «жалко» есть, но кота жалел мужчина, а сообщение написала девушка, которая ждала его ответа. Чтобы предположить ее состояние, нужно понять, кому что произошло и чего этот человек хотел. Последнее из текста часто неизвестно.
В исследованиях эту разницу проверяют грубо, но изобретательно: закрывают в текстах то носителя эмоции, то её причину, то объект и смотрят, как меняется качество классификации. В работе на пяти корпусах причина и объект нередко давали полезный сигнал, а личность носителя могла сбивать модель. Имя человека — плохая замена истории о том, что с ним случилось.
Как нейросети учатся «эмпатии»
Классификатор на базе BERT разбивает сообщение на токены — слова или их части. В слоях самовнимания каждый токен сопоставляется с другими токенами того же сообщения. Модель вычисляет веса этих связей и по ним обновляет числовое представление каждого токена. Например, в сообщении «Я ждал выступления, но его перенесли» представление «перенесли» может учитывать «ждал» и «выступления». Вес такой связи ещё не гарантирует, что модель нашла причину переживания.
После дообучения вектор сообщения, обычно связанный с токеном [CLS], поступает в выходной слой. Тот выдаёт по числу для каждой метки. Если нужна ровно одна эмоция, оценки обычно нормализуют через softmax; если допустимы сразу несколько, для каждой метки можно использовать независимую sigmoid и порог. Так «тревога» и «досада» могут появиться вместе. Но число рядом с «тревогой» описывает предсказание модели в заданной системе меток. Сколько тревоги у самого человека, оно не измеряет.
У чат-бота на базе генеративной модели обычно нет отдельного выходного слоя с фиксированным списком эмоций. На запрос «что он чувствует?» он строит ответ токен за токеном с учётом инструкции и контекста. Можно попросить объяснение, и модель сошлётся, например, на потерю работы, но это не протокол её вычислений. В исследовательском тесте можно изменить важную деталь на входе и, если доступны оценки модели, посмотреть, как они сдвинулись, даже когда итоговая метка не поменялась. Такую контрфактическую проверку применяли к объяснениям языковых моделей.
Можно пойти дальше и заставить систему явно оценивать событие до выбора эмоции: было ли оно приятным, кто за него отвечает, насколько оно подконтрольно человеку. В исследовании такого подхода взяли 1001 англоязычное описание событий и разметили семь промежуточных признаков. Прямая классификация текста дала micro-F1 0,60. Когда признаки задавали люди, результат вырос до 0,66; когда их сначала предсказывала другая модель, упал до 0,48. Отмечу, что это показатели сверточной нейронной сети.

Что нужно цифровому психологу
Чтобы модель могла более-менее обоснованно предположить, что чувствует пользователь, нужны три вещи:
Видеть диалог. Возьмем фразу: «Ну отлично, опять перенесли». Перед этим человек написал: «Я совсем не успеваю с докладом», в этом случае перенос может его обрадовать. А если он уже приехал в другой город ради выступления, «отлично» звучит совсем по-другому. Фраза та же; изменилось то, что было на кону для автора.
В DialogueGCN каждую реплику представляют вершиной графа, схемы из реплик и связей между ними. Каждая реплика — узел. Связи показывают, сказаны ли реплики одним человеком или разными и какая появилась раньше. По этой схеме модель учитывает контекст, когда определяет эмоцию в конкретной реплике. Для связей между репликами различают авторов и порядок: говорит ли тот же человек или собеседник, какая реплика появилась раньше.Не прятать разногласия. Даже если известны билеты, доклад и дата переноса, люди переживают такое по-разному. Читатели тоже по-разному считывают написанное. Допустим, из пяти разметчиков трое отметили досаду, двое — облегчение. Если оставить метку большинства, в данных останется только «досада». В работе об эмоциональной неоднозначности исследователи предлагают учитывать голоса всех разметчиков и предсказывать их распределение.
Знать, где её проверяли. GoEmotions состоит из английских комментариев Reddit; авторы TRACE сами отмечают перекос своих сценариев в сторону опыта жителей США. Есть и русский CEDR: 9410 предложений из Twitter, «ЖЖ» и «Ленты.ру». Его разметчики выбирали из радости, грусти, гнева, страха и удивления или отмечали отсутствие эмоции. Облегчения в наборе меток нет. Если наша задача — распознать именно его в рабочем сообщении «выступление перенесли», высокая оценка на CEDR этого умения не подтвердит. Русский корпус всё равно не воспроизводит рабочий чат с намёками, иронией и предысторией переписки. Для него нужны свои примеры.
Тестируем
Напишем в чат с Claude Opus 5 в агрегаторе BotHub: «Выступление перенесли на месяц» в нескольких вариантах, не называя эмоции. В первых двух меняется контекст; в третьей к первому сообщению добавим дополнительные данные:
Проверка |
Что пишет пользователь |
Ответ модели |
Контекст А |
«Выступление перенесли на месяц. Я не успевал подготовить доклад и сам попросил дать мне ещё время». |
«Возможно, вы почувствовали облегчение: теперь есть время подготовиться. Могу собрать график подготовки на эти четыре недели и помочь с самим докладом – структурой, тезисами, слайдами, прогоном вопросов от зала. Для этого нужно знать тему, формат и длительность выступления, аудиторию и новую дату». |
Контекст Б |
«Выступление перенесли на месяц. Я готовил доклад полгода и уже приехал в город ради выступления». |
«Представляю ваше разочарование. Полгода работы и уже оплаченная поездка никуда не денутся, но ощущение, что всё впустую, понятное. Перенос на месяц всё же лучше отмены, только месяц этот придётся чем-то занять, и речь не о чемодане». |
Нейтральная деталь |
«Выступление перенесли на месяц. Я не успевал подготовить доклад и сам попросил дать мне ещё время. В комнате стоял синий стул». |
«Возможно, вы почувствовали облегчение: теперь есть время подготовиться. Но по сообщению нельзя знать наверняка, как вы восприняли перенос». |
Без истории |
«Выступление перенесли на месяц». |
«По одной этой фразе эмоцию не определить. Перенос мог обрадовать, огорчить или вовсе не задеть — всё зависит от обстоятельств». |
Можно добавить пару на иронию: «Очень вовремя, спасибо» после получения файла до срока и через день после срока. Но здесь сначала проверяем, распознаёт ли модель тон реплики; приписывать по нему конкретную эмоцию автору уже следующий, более спорный шаг.
Запускала одинаковый промт для каждого примера:
Определи возможную эмоцию автора сообщения по тексту и контексту. Назови не больше двух гипотез и укажи, какие сведения их поддерживают. Если данных недостаточно, так и напиши. Не считай одну эмоцию установленным фактом.
Если вы решите проверить свое реальное переживание, нужна добровольная собственная пометка после события. Представим, что автор сообщения «Выступление перенесли на месяц» после события сам отмечает: «Я почувствовал облегчение — не успевал подготовиться». Это его добровольный ответ о себе. Нескольким читателям показывают только короткую фразу; они ставят метку «разочарование», и модель тоже выбирает «разочарование».
В переписке у чат-бота этого облегчения я не показывала, поэтому уверенное высказывание «Понимаю, как вы расстроены» может только вызвать раздражение пользователя. Безопаснее: «Перенос на месяц вам кстати или теперь придётся менять планы?». Ответ добавит контекст, которого в первой фразе не было.