- BrainTools - https://www.braintools.ru -

LLM и психолингвистика: HELPER

LLM и психолингвистика: HELPER - 1

На связи Александр Сабко, Виктория Белявская и Сергей Павлухин, из мастерской по прикладному ИИ Инженерно-математической школы НИУ ВШЭ и VK.

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

При этом большинство существующих решений в анализе эмоций [2] работают слишком обобщенно — одни определяют общую тональность текста, другие решают задачу бинарной или многоклассовой классификации эмоций [3] на уровне всего текста. Такие подходы плохо подходят, например, для психологически-нагруженных текстов, так как эмоции могут быть динамическими и проявляться в разных фрагментах текста — агрегированная метка не может это показать. 

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

Если изучать открытые русскоязычные датасеты с эмоциональной разметкой, бросается в глаза одна общая проблема: у каждого из них своя схема. Один корпус размечен по семи эмоциям Экмана, другой по восьми эмоциям OCC, третий упрощённо — позитив/негатив/нейтрал. Категории не пересекаются, степень детализации разная, объединить корпуса в один датасет нельзя. Плюс почти все они работают с агрегированным анализом: одна эмоциональная метка на весь текст или на сообщение целиком. Для задач психологического анализа этого не хватает: эмоции проявляются локально, в конкретных фрагментах, и важно отслеживать переходы между состояниями, а не общий фон.

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

Дальше расскажем, как мы выстраивали схему разметки на интервью с практикующими психологами, какие источники текстов взяли, что внутри инструмента, и что получилось с дообучением Qwen-3.

Почему стандартный sentiment-анализ тут не работает

Большинство моделей умеют классифицировать тональность: позитив, негатив, нейтрал. На отзывах работает, на психологии не очень.

Психологическое состояние проявляется в тексте фрагментарно, не сплошным фоном. Усреднённая оценка «У пользователя в целом негативный настрой» в работе психолога малоинформативна. Информативно «Вот тут признаки стресса [5], через пару реплик гнев на себя, дальше попытка рационализации, в концовке облегчение». Поэтому мы решили перейти от агрегированного контекстного анализа эмоций к локальному выделению фрагментов, в которых проявляются те или иные состояния. На основе такой разметки можно строить динамику эмоций клиента во времени, что и необходимо для задачи. 

Нужен корпус, размеченный пословно. Открытых русскоязычных корпусов с такой разметкой мы не нашли. DailyDialog (Li et al., 2017) [6] построен на коротких бытовых диалогах и не покрывает сложности консультативной практики. EmpatheticDialogues (Rashkin et al., 2019) [7] даёт более тонкую разметку из 32 эмоций, но опять же на коротких эмоциональных ситуациях, далёких от психологического диалога. Закрытые корпуса вроде Woebot не публикуются. Плюс ни в одном из этих датасетов не было схемы, которая бы покрывала ещё и психологические характеристики текста, а только их одних мало. 

Пришло время собирать своё.

Схема разметки родилась из десяти интервью

На старте больше всего мучил один вопрос: по каким признакам вообще размечать. Если ограничиться эмоциями, мы бы получили только эмоции, а нам хотелось расширить схему психологическими характеристиками текста. 

Плюс отдельная задача: неясно, как размечать ответы психологов на запросы клиентов. Это какие-никакие данные, и просто оставлять их без внимания [8] не хотелось.

Поэтому мы пошли путём, неочевидным для ML-проекта: провели десять глубинных интервью с практикующими консультирующими психологами из НИУ ВШЭ. Спрашивали про темп речи, выбор слов, использование местоимений, темы избегания, степень самораскрытия, юмор [9] и сарказм, и так далее.

Расшифровки прогнали через тематический рефлексивный анализ в MAXQDA. Получили шесть макротем профессионального анализа:

  • диагностические текстовые маркеры (упомянуты в 100% интервью): эмоциональные паттерны (валентность, лабильность), когнитивные искажения по Беку (катастрофизация, персонализация, дихотомическое мышление [10]), лингвистические особенности (модальные глаголы, абсолютные категории, нарративная связность);

  • cтратегии терапевтического ответа (90%): эмпатическое отражение, тайминг, конкретность предложений, баланс поддержки и конфронтации;

  • контекстуальные факторы коммуникации (90%): ситуационный контекст, культурные и социальные маркеры в речи;

  • рефлексивная оценка взаимодействия (70%): изменение эмоционального тона, ригидность формулировок;

  • тематическая классификация запросов (60%);

  • безопасность и этика (60%): маркеры суицидального риска, признаки насилия в клиентских запросах.

На основе этого собрали схему разметки из четырёх компонентов:

  1. Эмоциональная сегментация. Изначально по семи базовым эмоциям Экмана (радость, печаль, гнев, отвращение, страх [11], удивление, презрение) плюс нейтральная. После первого этапа разметки поняли, что семи эмоций не хватает для покрытия наблюдаемых состояний, и расширили схему до 14 эмоций. Что-то взяли от модели OCC, остальное оставили от Экмана. Мультивыбор для одного фрагмента не делали, у нас работает схема приоритезации: если в одном фрагменте видны две эмоции, выбирается более приоритетная по нашему ранжированию. 

  2. Оценка ответов психолога по четырём критериям 1-5: эмпатичность, этичность, продуктивность вопроса, полезность рекомендации. У последних двух есть значение 6, если в сообщении нет ни вопроса, ни рекомендации.

  3. Тематические теги: 15 категорий с мультивыбором.

  4. Итоговая оценка состояния клиента по 5 шкалам 1-5: депрессивность, потребность [12] в психиатрической помощи, растерянность, спутанность мышления, риск суицида [13].

Сбор корпуса с B17.ru

Прошлись по нескольким психологическим площадкам и оценили по критериям: верификация психологов, модерация, длина диалоговых цепочек и активность. Выбрали B17.ru: по данным сайта на момент исследования, там было 82 000 зарегистрированных специалистов с подтверждением квалификации, регулярная модерация, чёткое разделение психологов и клиентов, диалоги длиной в несколько десятков сообщений.

Второй и третий источники добавили позже, чтобы расширить корпус за рамки чисто консультативных текстов: отзывы с Яндекс.Карт и посты ВКонтакте с комментариями. У отзывов и постов своя специфика, и они размечаются сразу по расширенной схеме 14 эмоций. 

Парсер написали на Selenium с BeautifulSoup.

К текущему моменту корпус включает 786 диалогов, размеченных по 7 эмоциям (это первый этап, около 9 миллионов символьных меток), и 156 диалогов, размеченных по расширенной схеме 14 эмоций. Плюс отзывы и посты по 14 эмоциям, цифры по ним растут. 

HELPER: своё приложение под разметку

Готовые инструменты не подошли: brat не умеет шкальные оценки сообщений,doccano и tagtog не дают комбинировать сегментацию с многокритериальной оценкой и общим scoring диалога. Prodigy ближе по гибкости, но платный и без нашей логики приоритезации. В нашей схеме сегментация, оценки сообщений, теги и общая оценка должны идти одной связкой, и этой связки нигде нет.

Так появился HELPER. Изначально он делался под разметку диалогов, но сейчас расширился до универсального инструмента: поддерживает разметку отзывов и постов с комментариями, заданных через единый формат загрузки данных. Плюс бэкенд-основа под создание новых проектов разметки, чтобы можно было настраивать собственные схемы под другие задачи без переписывания приложения.

Стек HELPER: .NET 10 с Aspire для оркестрации, ASP.NET [14] Core, Blazor для UI, PostgreSQL через Entity Framework Core, Keycloak для аутентификации, Docker, Nginx как обратный прокси. 

Аутентификация работает через OpenID Connect с Keycloak в роли Identity Provider.

Функциональность включает в себя выдачу следующего диалога разметчику. Реализовали depth-first приоритезацию: сначала каждый диалог получает хотя бы одного разметчика, потом следующий цикл, до трёх разметчиков на диалог максимум. Алгоритм такой:

  • Диалоги сортируются по возрастанию числа завершённых разметок (приоритет у тех, что разметили меньше раз).

  • При равенстве по числу разметок в процессе у других пользователей.

  • Отфильтровываются несостоятельные.

  • Проверяется, что текущий пользователь ещё не получал этот диалог.

  • Первый подходящий назначается в работу.

Несостоятельным диалог может пометить сам разметчик, если попался пустой текст, ошибка [15] парсинга, или просто текст, в котором нечего размечать. Такая пометка не идёт в зачёт автоматически. Сначала диалог уходит на проверку администратору. Если админ подтверждает несостоятельность, разметчик получает +5 баллов как компенсацию потраченного времени. Если не подтверждает (значит, диалог нормальный, разметчик схалтурил), снимается −5 баллов. Это важный механизм против абуза: иначе можно было бы массово отмечать всё подряд как несостоятельное для накопления быстрых баллов.

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

Формула для диалогов:

T=0,0583 × Sk + 0,0001 × Sp + 14,4825 × Np + 203,9569

Sk это символы клиента (объём для сегментации), Sp символы психолога (контекст), Np количество сообщений психолога. Самый большой коэффициент у Np (14,4825), потому что многокритериальная оценка каждого сообщения тяжелее эмоциональной сегментации. У постов и отзывов формулы свои, с другими предикторами под их структуру. Итоговые баллы вычисляются как доля от целевого объёма: 10 000 баллов это примерно 30 часов работы.

Чтобы разметка сохранилась, должны выполниться четыре условия:

  • ≥25% значимых символов (латиница, кириллица, цифры) в сообщениях клиента отмечены эмоцией.

  • Все сообщения психолога оценены по четырём критериям.

  • Выбран хотя бы один тег.

  • Отвечены все пять финальных вопросов.

Дополнительно встроен детектор подозрительных пользователей. Если разметчик завершил больше пяти диалогов и при этом 25% и более его диалогов получили статус несостоятельных (или были отвергнуты администратором), он флагуется для админа. Порог 25% подобран эмпирически и пересматривается по мере накопления статистики.

Под нагрузочным тестом приложение выдержало 1000 одновременных пользователей и миллион запросов в базу.

LLM на нашем корпусе

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

Взяли два открытых веса: Qwen-3 8B и Qwen-3 14B. Дообучили их через LoRA на нашем корпусе. Запускали на cHARISMa НИУ ВШЭ.

Препроцессинг диалога перед подачей в модель:

  • Идентификация и разделение ролей участников по метаданным форума.

  • Нормализация текста: удаление BB-кодов, подписей, URL.

  • Сохранение оригинальной стилистики речи, потому что речевые особенности это часть того, что модель должна анализировать.

  • Связи между сообщениями структурируются, чтобы модель видела динамику диалога.

Промпт длинный, устроен по шагам:

  • Ролевое позиционирование модели как «опытного психолога, специализирующегося на анализе эмоционального состояния клиентов в консультативных диалогах».

  • Описание входного формата с правилами определения автора сообщения.

  • Описание эмоций с тегами и правилами разметки.

  • Правила для смешанных, смягчённых и косвенных эмоций («у меня дрожат руки при мысли о…» это страх без прямого слова; «я должен быть счастлив» это ожидание, не радость).

  • Формат вывода с XML-подобными тегами.

  • Задачи оценки сообщений психолога, тематической классификации, финальных вопросов.

Контроль качества (бенчмарк) сделали через посимвольное сравнение исходного текста и размеченного. Алгоритм проходит по каждому символу размеченной версии, исключает теги, сравнивает с оригиналом. Если модель что-то перефразировала при добавлении меток (бывает на длинных диалогах, LLM иногда подменяет окончания слов), диалог помечается для повторной обработки. Плюс валидация структуры тегов и формата вывода.

Дообученные Qwen-3 8B и 14B показали прирост на бенчмарке на 350% по качеству понимания качества ответа психолога и в примерно на 75% по качеству детекции эмоций в сравнении с теми с базовыми моделями того же класса в few-shot конфигурации промпта. Подробная таблица с метриками, сравнение по эмоциям, по психологическим характеристикам, и сравнение с большими моделями (вроде DeepSeek-V3 и GPT-семейства) идёт отдельной научной публикацией, которую сейчас готовим. Главное, данные пригодны для дообучения, локальная разметка эмоций как задача поддаётся LLM-подходу, и метрики на нашем корпусе уверенно растут с размером модели.

Что мы из этого вынесли

Когда мы начинали, нам казалось, что главное собрать побольше данных и обучить модель посильнее. К концу года картина перевернулась.

Главное оказалось в том, как именно размечать, и до этого «как» без участия практикующих психологов добраться невозможно. Десять интервью, MAXQDA и тематический анализ заняли у нас столько же времени, сколько вся техническая часть, и без этой работы дальнейшие парсер, инструмент и LLM-эксперименты просто не имели бы смысла. Само наличие открытых датасетов с эмоциональной разметкой ничего не даёт, если у них у всех разные схемы и ни одна не подходит под задачу. Приходится строить унифицированную схему самим, и эта работа концептуально первичная.

Из публичной активности: с проектом мы поучаствовали в конференции НИУ ВШЭ NET2026, заняли третье место на премии «Гравитация», а также выиграли конкурс НИРС. Корпус, инструмент и бенчмарк готовятся к публичному выходу, статья по бенчмарку с подробными метриками уже в работе.

Автор: vsbel

Источник [16]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/33454

URLs in this post:

[1] источник информации: http://www.braintools.ru/article/8616

[2] эмоций: http://www.braintools.ru/article/9540

[3] эмоций: http://www.braintools.ru/article/9387

[4] обучения: http://www.braintools.ru/article/5125

[5] стресса: http://www.braintools.ru/article/9548

[6] DailyDialog (Li et al., 2017): https://arxiv.org/abs/1710.03957

[7] EmpatheticDialogues (Rashkin et al., 2019): https://arxiv.org/abs/1811.00207

[8] внимания: http://www.braintools.ru/article/7595

[9] юмор: http://www.braintools.ru/article/3517

[10] мышление: http://www.braintools.ru/thinking

[11] страх: http://www.braintools.ru/article/6134

[12] потребность: http://www.braintools.ru/article/9534

[13] суицида: http://www.braintools.ru/article/8864

[14] ASP.NET: http://ASP.NET

[15] ошибка: http://www.braintools.ru/article/4192

[16] Источник: https://habr.com/ru/companies/vk/articles/1062310/?utm_campaign=1062310&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100