Разработка AI-системы медицинского NLP (извлечение данных из историй болезни)
Медицинская история болезни содержит богатые клинические данные в неструктурированном тексте: симптомы, диагнозы, назначения, лабораторные показатели. AI-NLP превращает эти тексты в структурированные данные для аналитики, поддержки клинических решений и автоматизации документооборота.
Клинические NLP-задачи
Clinical NER: извлечение медицинских сущностей
-
DISEASE: «артериальная гипертензия», «сахарный диабет 2 типа» -
DRUG: «Метформин», «Лизиноприл» -
DOSAGE: «500 мг», «2 раза в день» -
PROCEDURE: «ЭКГ», «коронарография» -
LAB_VALUE: «глюкоза 7.8 ммоль/л», «HbA1c 8.2%» -
ANATOMY: «левый желудочек», «аорта»
Assertion detection: контекст сущности
-
present: диагноз установлен -
absent: «болей в груди нет» -
uncertain: «возможно, стенокардия» -
history: «в анамнезе инфаркт» -
family_history: «у отца гипертоническая болезнь»
Temporal reasoning: хронология событий — когда началось, когда выявлено, когда лечили.
Стек для русскоязычного медицинского NLP
Готовые инструменты для медицинского NLP на русском языке ограничены — это нишевая область. Варианты:
BERT fine-tuning на медицинских данных: DeepPavlov/rubert-base-cased + размеченный медицинский корпус. Требует 2000–5000 аннотированных предложений на тип сущности.
BiomedBERT / PubMedBERT (для английского): затем cross-lingual transfer или перевод.
LLM с медицинским промптингом: GPT-4o / Claude с few-shot медицинскими примерами. Хорошее качество без обучения, но:
- On-premise обязателен для соблюдения медицинской тайны
- Возможны галлюцинации при редких терминах
medspaCy / scispaCy (английский): специализированные spaCy модели для биомедицинских текстов. Интеграция с UMLS (Unified Medical Language System) для нормализации терминов.
Нормализация медицинских терминов
Одно понятие — множество написаний: «сахарный диабет 2 типа», «СД2», «Diabetes mellitus type 2», «T2DM». Нормализация к UMLS CUI (Concept Unique Identifier) или МКБ-10 коду (E11 для СД2) позволяет агрегировать данные.
from quickumls import QuickUMLS
matcher = QuickUMLS(QUICKUMLS_FP, overlapping_criteria="score", threshold=0.7)
def normalize_medical_term(term: str) -> list[dict]:
matches = matcher.get_matches([[{"token": t} for t in term.split()]])
return [{"cui": m["cui"], "name": m["preferred_name"], "score": m["similarity"]}
for m in matches[0] if m["similarity"] > 0.7]
Privacy и соответствие законодательству
Медицинские данные — особая категория персональных данных (ст. 10 152-ФЗ). Требования:
- Обработка только с явного согласия или на законном основании (лечение)
- Деперсонализация для аналитики и обучения моделей
- Хранение только на российской инфраструктуре
- Шифрование in-transit и at-rest (AES-256)
- Специальная лицензия на медицинскую деятельность при определённых применениях
LLM: только on-premise (Llama, Mistral) или российские облака без передачи данных за рубеж.
Применение в клинической практике
Поддержка принятия клинических решений (CDSS): система предупреждает врача о потенциальных взаимодействиях лекарств, противопоказаниях на основе диагнозов из истории болезни.
Автоматическое кодирование диагнозов: МКБ-10 코드 по тексту диагноза (отдельный сервис).
Популяционная аналитика: агрегация de-identified данных для исследования распространённости заболеваний, эффективности лечения.
Клиническое резюме: автоматическая выписка для направлений, структурированный Summary по госпитализации.
Оценка качества
- Entity-level F1 по каждому типу сущностей
- Assertion detection accuracy (особенно critical: отличить «присутствует» от «отсутствует»)
- Drug-dosage linkage accuracy: правильная связь «препарат → доза»
Для safety-critical применений: human validation > 95% F1 обязателен перед production.
Сроки реализации
Месяц 1–2: Сбор и разметка медицинского корпуса, обучение базового NER
Месяц 3–4: Assertion detection, нормализация к МКБ/УМЛС, деперсонализация
Месяц 5–6: Интеграция с МИС, валидация на клинических данных, пилот
Месяц 7–8: CDSS модуль, аналитический дашборд, промышленное внедрение







