LLM и психолингвистика: HELPER. helper.. helper. llm.. helper. llm. обучение моделей.. helper. llm. обучение моделей. Открытые данные.. helper. llm. обучение моделей. Открытые данные. психолингвистика.
LLM и психолингвистика: HELPER - 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сбор корпуса с 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 Core, Blazor для UI, PostgreSQL через Entity Framework Core, Keycloak для аутентификации, Docker, Nginx как обратный прокси. 

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

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

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

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

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

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

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

Несостоятельным диалог может пометить сам разметчик, если попался пустой текст, ошибка парсинга, или просто текст, в котором нечего размечать. Такая пометка не идёт в зачёт автоматически. Сначала диалог уходит на проверку администратору. Если админ подтверждает несостоятельность, разметчик получает +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

Источник