Когда нейросеть видит то, что не видят опросники
Представьте: пациент заполняет стандартную анкету на суицидальные мысли. Результат - низкий риск. Через неделю он в больнице после попытки. Классическая история, которая случается чаще, чем кажется.
А теперь другая картина: тот же пациент пишет свободный текст о своей жизни. Неструктурированно, эмоционально, с обрывками мыслей. Llama 3.1 анализирует этот текст и говорит: "Высокий риск". И оказывается права в 75% случаев.
Что такое perplexity и почему он работает как детектор лжи
Perplexity - это метрика, которая показывает, насколько модель "удивлена" текстом. Низкий perplexity означает "да, это типичная фраза, я такое ожидал". Высокий perplexity - "что это вообще такое, я такого не ожидал".
Вот где начинается магия. Когда человек пишет о суицидальных мыслях, его язык меняется. Не явно, не через слова "я хочу умереть", а через:
- Синтаксические разрывы (предложения обрываются)
- Эмоциональные контрасты ("все хорошо, но...")
- Лексические сдвиги (внезапные тематические прыжки)
- Повторы без развития мысли
Человеческий мозг эти паттерны улавливает смутно. Модель на 8 миллиардах параметров - с математической точностью.
Важный момент: модель НЕ обучали на суицидальных текстах специально. Она просто знает, как выглядит "нормальный" человеческий язык. Когда появляется отклонение - она это фиксирует. Это как детектор лжи, который калибруется на правдивых ответах, а потом ловит ложь по отклонениям.
Технический пайплайн: от текста до оценки риска
Исследование построено на двухступенчатой архитектуре. Первая ступень - генерация, вторая - анализ.
1Генерация нарративов через Claude
Исследователи использовали Claude для создания синтетических текстов. Не просто "сгенерируй историю депрессии", а с конкретными промптами, которые имитируют разные уровни риска.
Почему Claude, а не та же Llama? Потому что Claude лучше справляется с эмоционально насыщенными текстами. Он генерирует более человечные, менее шаблонные нарративы. В коде это выглядит как серия вызовов API с промптами типа:
"Напиши текст от лица человека, который чувствует себя в ловушке, но не говорит об этом прямо. Используй метафоры, недоговоренности, эмоциональные противоречия."
Получается датасет из тысяч текстов с разметкой уровня риска. Искусственных, но психологически достоверных.
2Расчет perplexity через Llama 3.1
Здесь начинается основная работа. Каждый сгенерированный текст подается в Llama 3.1, и модель вычисляет perplexity для каждой последовательности токенов.
Ключевой трюк: они считают не средний perplexity по всему тексту, а анализируют распределение. Смотрят, где возникают пики "удивления". Часто именно в этих местах - эмоциональные разрывы, которые человек пытается скрыть.
В коде это выглядит как вызов функции calculate_perplexity с параметрами:
| Параметр | Значение | Зачем нужен |
|---|---|---|
| model_name | "meta-llama/Llama-3.1-8B-Instruct" | Инструктивная версия лучше понимает контекст |
| window_size | 256 | Размер окна для анализа последовательностей |
| stride | 128 | Шаг скользящего окна (перекрытие для точности) |
| temperature | 0.0 | Выключает случайность, только вероятности |
3Построение классификатора
Perplexity сам по себе - просто число. Чтобы превратить его в оценку риска, нужен классификатор. Исследователи пробовали:
- Простые пороговые значения (если perplexity > X, то высокий риск)
- Линейные модели
- Градиентный бустинг (XGBoost)
- Нейросетевые классификаторы
Лучше всего сработал XGBoost с дополнительными фичами: не только средний perplexity, но и его дисперсия, максимальные пики, распределение по квантилям.
Точность на тестовой выборке: 75.3%. Для сравнения, стандартные опросники типа PHQ-9 дают около 60-65% в реальных условиях.
Где исследование спотыкается (и как это исправить)
Первая проблема - синтетические данные. Claude генерирует тексты, но они все равно не настоящие. В них есть паттерны генерации, которые модель может выучить как артефакты.
Решение: использовать реальные анонимизированные тексты из кризисных чатов. Но это сразу упирается в этику и приватность. В коде исследователи хотя бы добавли аугментацию - небольшие изменения в синтетических текстах, чтобы сделать их разнообразнее.
Вторая проблема - культурный и языковой bias. Модель обучалась в основном на английских данных. Русские тексты (или тексты на других языках) могут давать другие паттерны perplexity.
Третья - ложные срабатывания. Высокий perplexity может быть у:
- Поэтических текстов (метафоры, нестандартный синтаксис)
- Технических описаний (специфическая лексика)
- Текстов людей с нейроотличиями (например, аутизмом)
В коде это частично решается контекстным фильтром: перед анализом модель определяет тему текста. Если это явно не психологический нарратив - анализ не запускается.
Как запустить это у себя (без этических проблем)
Исследователи выложили весь код на GitHub. Но просто скопировать и запустить - плохая идея. Вот что нужно изменить:
Во-первых, заменить синтетическую генерацию на что-то менее рискованное. Вместо генерации суицидальных текстов - использовать публичные датасеты эмоциональных нарративов (например, Reddit depression forums с согласия).
Во-вторых, добавить калибровку под свой язык. Для русского нужно:
- Взять русскоязычную модель (например, от SberAI)
- Пересчитать базовые значения perplexity для "нормальных" русских текстов
- Настроить пороги классификатора
В-третьих, построить pipeline валидации. Каждый предсказанный "высокий риск" должен проверяться через:
| Этап | Что делает | Зачем |
|---|---|---|
| Мультимодальная проверка | Анализ не только текста, но и метаданных (время отправки, частота сообщений) | Снижает ложные срабатывания |
| Контекстный фильтр | Определение, является ли текст личным нарративом | Исключает художественные/технические тексты |
| Эскалация к человеку | Любой высокий риск проверяется психологом | Этическая безопасность |
Почему это работает лучше традиционных методов
Стандартные опросники - это набор прямых вопросов. "Были ли у вас мысли о самоубийстве?". "Чувствуете ли вы безнадежность?".
Проблема в том, что люди в кризисе часто:
- Не осознают своих мыслей как "суицидальные"
- Сознательно скрывают их (стигма, страх госпитализации)
- Не могут вербализовать то, что чувствуют
Perplexity анализ работает на другом уровне. Он ловит не содержание, а форму. Не то, что человек говорит, а как он это говорит. Разрывы в повествовании, эмоциональные диссонансы, лингвистические аномалии.
Это похоже на то, как опытный психолог "слышит" то, что между строк. Только здесь - математическая модель вместо интуиции.
Этические мины и как их обходить
Самое опасное в этой технологии - ложные положительные срабатывания. Представьте: система пометила человека как "группа риска", хотя у него просто поэтический стиль письма. Последствия могут быть катастрофическими.
Первое правило: эта система никогда не должна работать автономно. Только как инструмент поддержки принятия решений для профессионалов.
Второе: прозрачность. Человек должен знать, что его текст анализируется. И иметь возможность отказаться.
Третье: ограничение применения. Не для скрининга в соцсетях (это уже тотальная слежка). Только для:
- Кризисных чатов (с согласия пользователя)
- Телетерапии (как дополнительный инструмент)
- Исследовательских целей (с полной анонимизацией)
В коде исследователи хотя бы добавили обязательный consent check перед анализом. Маленькая, но важная деталь.
Что будет дальше с этим подходом
Perplexity анализ - только начало. Уже сейчас видны направления развития:
Мультимодальность. Текст + голос (интонации, паузы) + возможно, видео (микровыражения). Каждая модальность дает свой сигнал. Комбинация повышает точность.
Персонализация. Вместо общих порогов - индивидуальный baseline. Сначала система изучает, как человек обычно пишет. Потом ищет отклонения от его собственной нормы.
Временные ряды. Не анализ одного сообщения, а трекинг изменений over time. Как меняется perplexity в динамике? Резкий скачок может быть более показательным, чем абсолютное значение.
И самое главное - открытость. Это исследование выложено полностью: код, данные, методология. Любой может проверить, воспроизвести, улучшить. В мире, где большинство медицинских AI - черные ящики, это редкая и важная практика.
Последний совет от меня как инженера: если решите поэкспериментировать с этим кодом, начните с малого. Не с суицидального риска, а с чего-то менее критичного. Например, с определения уровня стресса по текстам. Отработайте пайплайн, поймите ограничения модели, настройте валидацию. И только потом - к клиническим применениям.
Технология, которая может спасать жизни, должна быть не только точной, но и ответственной. Llama 3.1 с perplexity дает первую часть. Вторая часть - на нас.