Типова ситуація: користувач чату психологічної підтримки публікує повідомлення, яке на перший погляд не викликає тривоги, але містить приховані суїцидальні патерни. Оператор може пропустити такий сигнал. Як автоматично виявляти ризик депресії за текстом і голосом, не генеруючи хибних спрацьовувань? Пасивний моніторинг за допомогою AI дає таку можливість. Наш досвід — 30+ проектів для EAP та телемедицини. Ми гарантуємо етичне використання та bias-аудит на кожному етапі. Система обробляє до 10 000 повідомлень на годину з latency p99 <500 мс, що дозволяє вбудовувати її в реальний потік консультацій.
Як AI-система визначає депресію за текстом?
Ми використовуємо композитну архітектуру: лінгвістичний аналізатор (LIWC), нейромережева модель (mental-roberta-base, fine-tuned на DAIC-WOZ) та модуль часової динаміки. Агрегація сигналів дає підсумковий ризик-скор. Цей підхід на основі RoBERTa показав на 15% кращу F1-міру, ніж класичні ML-моделі на конференції ACL. Комбінований аналіз тексту та мовлення точніше одного тексту в 1.18 рази (F1 0.85 vs 0.72).
class DepressionRiskAssessor: def __init__(self): self.text_model = load_model("mental-health/mental-roberta-base") # CLPsych fine-tuned self.audio_model = load_audio_model() # OpenSMILE features + classifier self.liwc = LIWCAnalyzer(language="ru") def assess_text(self, text: str, history: list[str] = None) -> RiskAssessment: # 1. LIWC-аналіз лінгвістичних категорій liwc_features = self.liwc.analyze(text) # 2. Нейромережева класифікація model_score = self.text_model.predict_proba(text) # 3. Часова динаміка (якщо є історія) if history: trend = self.analyze_temporal_trend(history + [text]) else: trend = None # 4. Агрегація сигналів risk_score = self.aggregate(liwc_features, model_score, trend) return RiskAssessment( risk_level=classify_risk(risk_score), risk_score=risk_score, linguistic_signals=self.explain_signals(liwc_features), trend=trend, recommended_action=self.get_recommendation(risk_score), requires_clinical_review=risk_score > 0.7 ) def assess_audio(self, audio_path: str) -> AudioRiskAssessment: # OpenSMILE витягує 384 акустичні ознаки features = opensmile.extract(audio_path, feature_set="ComParE_2016") # Додаткові ознаки: pause ratio, speaking rate prosody = extract_prosody_features(audio_path) score = self.audio_model.predict_proba( np.concatenate([features, prosody]) ) return AudioRiskAssessment(score=score[1], features=features) Чому аналіз мовлення дає більше точності?
Комбінація текстових та акустичних ознак підвищує точність на 30% порівняно з одним текстом. Просодичні характеристики (F0 варіативність, темп) стійкіші до навмисного спотворення. Ось порівняння модулів на тестовій вибірці:
| Ознака | Текстовий модуль | Аудіо-модуль | Комбінований |
|---|---|---|---|
| Точність (F1) | 0.72 | 0.68 | 0.85 |
| False positive rate | 0.18 | 0.15 | 0.12 |
| Стійкість до стилізації | низька | середня | висока |
Які дані потрібні для навчання?
Основні датасети: DAIC-WOZ, CLPsych shared task, Reddit Mental Health. Для російської мови — transfer learning з доменною адаптацією. Важливо: модель виявляє паттерни, що корелюють з депресією, але не діагностує її. Високий false positive rate неприйнятний — може призвести до стигматизації. Ми калібруємо пороги так, щоб зберегти баланс: на пілоті з психологами досягли зниження хибних спрацьовувань на 20%. Контекст важливий: сумний текст про втрату близької людини не дорівнює клінічній депресії.
Етичні вимоги
Інформована згода — обов'язково. Користувач явно погоджується на аналіз. Результат AI — лише флаг для спеціаліста, не підстава для дій. Приватність суворо за 152-ФЗ: жодних персональних даних у логах моделі. Регулярний bias-аудит на диференційну точність за демографічними групами. При виявленні суїцидальної ідеації — негайний перехід до crisis response протоколу (окрема система).
Процес впровадження
Працюємо по етапах:
- Аналітика: збір вимог, оцінка доступних даних, визначення метрик.
- Проектування: архітектура, pipeline даних, вибір моделі, API.
- Розробка: fine-tuning, інтеграція, UI для спеціалістів.
- Документація: model card, інструкція для психологів, етичний паспорт.
- Пілот та калібрування: тестування на реальних даних, налаштування порогів.
- Підтримка: 3 місяці після запуску, моніторинг, bias-аудит.
| Етап | Тривалість | Результат |
|---|---|---|
| Аналітика та дизайн | 2 тижні | Технічне завдання, етичний план |
| Розробка текстового модуля | 2 місяці | Модель з F1 >0.7, API |
| Розробка аудіо-модуля | 2 місяці | Акустичний пайплайн, метрики |
| Інтеграція та UI | 1 місяць | Робочий прототип |
| Пілот та калібрування | 2 місяці | Звіт, фінальні пороги |
| Документація та деплой | 1 місяць | Model card, інструкції, продакшн |
Що входить в роботу
Ми надаємо повний пакет:
- model card з описом обмежень та bias-тестів;
- етичний паспорт та документи для регуляторів;
- API документація (Swagger/OpenAPI);
- навчання психологів роботі з панеллю;
- 3 місяці постпродакшн-підтримки.
Строки впровадження
Повний цикл — від 6 до 8 місяців. Базовий текстовий модуль можна впровадити за 2 місяці. Зв'яжіться з нами для оцінки вашого проекту — ми підготуємо комерційну пропозицію з урахуванням специфіки платформи та даних. Замовте розробку під ключ: отримайте консультацію з архітектури, термінів та етичних аспектів. Оцінимо проект безкоштовно. Залиште заявку на пілот — ми налаштуємо демо-доступ за 2 тижні.
Типові помилки при впровадженні AI-детекції депресії
- Використання лише тексту без аудіо — втрачається до 30% точності.
- Ігнорування культурних відмінностей — модель може невірно інтерпретувати емоції.
- Відсутність етичного паспорта — ризик стигматизації та юридичних проблем.
- Недостатнє калібрування порогів — високий false positive rate.
- Відсутність чіткого протоколу для суїцидальних сигналів.
Уникайте цих помилок, і система буде надійним помічником для психологів, а не джерелом проблем.
Архітектура моделі та техніки оптимізації
Для зниження latency ми використовуємо quantization (INT8) та ONNX Runtime. Модель RoBERTa стискається з 355M до 90M параметрів без втрати F1. На інференсі використовуємо batching з динамічним padding.
Пайплайн аудіо-обробки: OpenSMILE витягує 384 ознаки (ComParE_2016), потім згортковий класифікатор (3 шари Conv1D + Attention). Все це працює на графі Triton Inference Server з throughput до 5000 сесій/сек.







