Автоматичне транскрибування медичних диктовок: знижуємо WER до 2-4%
Лікар диктує запис, але ASR плутає «ацетилсаліцилова кислота» з «ацетилцистеїн». Або пропускає латинські назви препаратів. Знайомий біль? Ми вирішуємо її дообученням Whisper на ваших даних. Наш досвід — понад 7 років у медичному NLP, 12 впроваджень у клініках України та СНД. Гарантуємо точність, що відповідає вимогам 152-ФЗ та HIPAA.
Чому медична диктовка складніша за звичайну?
На відміну від транскрипції загальних переговорів, медичні записи містять специфічну термінологію: номенклатуру МКХ-10, латинські назви препаратів, дозування з одиницями виміру (мг, мл), синдроми та епоніми. Стандартні ASR-моделі показують WER 10-20% на такому контенті. Для вирішення потрібне дообучення на спеціалізованому датасеті медичних диктовок мінімум 100 годин чистого аудіо.
Технічна реалізація: дообучення, архітектура та нормалізація
Дообучення Whisper з LoRA
Дообучення (fine-tuning) проводиться на ваших аудіозаписах з експертними розшифровками. Застосовуємо LoRA та квантизацію INT8 — це знижує вимоги до GPU і прискорює інференс. Модель адаптується під вашу термінологію, включаючи рідкісні абревіатури та латиницю. Результат: WER 2-4% замість 10-20%. Наша дообучена модель Whisper у 3 рази точніша за стандартну на медичних текстах.
Архітектура медичної диктовки
from enum import Enum from dataclasses import dataclass class MedicalSection(Enum): COMPLAINT = "complaint" # Скарги ANAMNESIS = "anamnesis" # Анамнез OBJECTIVE = "objective" # Об'єктивний огляд DIAGNOSIS = "diagnosis" # Діагноз TREATMENT = "treatment" # Призначення @dataclass class MedicalRecord: patient_id: str doctor_id: str sections: dict[MedicalSection, str] raw_transcript: str created_at: str class MedicalDictationProcessor: def __init__(self): # Whisper дообучений на медичних даних self.stt = WhisperModel( "whisper-medical-uk-v1", device="cuda", compute_type="float16" ) self.medical_normalizer = MedicalTextNormalizer() async def process_dictation( self, audio_path: str, patient_context: dict ) -> MedicalRecord: # 1. Транскрибуємо з медичним словником segments, _ = self.stt.transcribe( audio_path, language="uk", initial_prompt="Медична диктовка лікаря. Скарги, анамнез, діагноз, призначення." ) raw_text = " ".join(seg.text for seg in segments) # 2. Нормалізація медичної лексики normalized = self.medical_normalizer.normalize(raw_text) # 3. Структурування через LLM structured = await self.structure_medical_text(normalized, patient_context) return MedicalRecord( patient_id=patient_context["patient_id"], doctor_id=patient_context["doctor_id"], sections=structured, raw_transcript=raw_text, created_at=datetime.utcnow().isoformat() ) async def structure_medical_text(self, text: str, context: dict) -> dict: response = await client.chat.completions.create( model="gpt-4o", messages=[{ "role": "system", "content": """Ти медичний редактор. Структуруй диктовку лікаря. Розбий на розділи: Скарги, Анамнез хвороби, Об'єктивний огляд, Діагноз (МКХ-10 код), Призначення. Виправ медичні терміни. JSON відповідь.""" }, { "role": "user", "content": f"Пацієнт: {context.get('age')} років, {context.get('gender')}.\n{text}" }], response_format={"type": "json_object"} ) return json.loads(response.choices[0].message.content) Медичний нормалізатор: як він працює
MEDICAL_ABBREVIATIONS = { "ат": "артеріальний тиск", "чсс": "частота серцевих скорочень", "шкт": "шлунково-кишковий тракт", "грві": "гостра респіраторна вірусна інфекція", # Розшифровуємо при диктовці, скорочуємо в фінальному тексті } Нормалізатор враховує контекст: «АТ» у скаргах — артеріальний тиск, а в діагнозі — алергічний дерматит. Він також коригує відмінкові закінчення та латинські терміни.
Порівняння моделей і підходів до впровадження
Порівняння моделей ASR для медичної диктовки
| Модель | WER (медична українська) | Вимагає дообучення | Конфіденційність |
|---|---|---|---|
| OpenAI Whisper large-v3 | 8-12% | Так, знижує до 3-4% | Так (on-premise) |
| Google Medical ASR | 5-7% | Ні, але платно | Ні (хмара) |
| Yandex SpeechKit (медицина) | 6-10% | Частково | Так (on-prem option) |
| Наша дообучена Whisper | 2-4% | Так (включено) | Так (on-premise) |
Порівняння підходів до впровадження
| Підхід | Терміни | Точність |
|---|---|---|
| Готова хмарна ASR | 1-2 тижні | 5-7% |
| Дообучена Whisper on-premise | 6-10 тижнів | 2-4% |
| Ручна розшифровка | 0 | 100% |
Впровадження в клініці: етапи, терміни та економія
Етапи впровадження
- Аудит поточного процесу та збір вимог (1-2 тижні).
- Збір та підготовка датасету аудіозаписів з розшифровками (2-3 тижні).
- Дообучення моделі Whisper з LoRA та INT8-квантизацією (1-2 тижні).
- Інтеграція з МІС через FHIR R4 (2-4 тижні).
- Тестування на реальних диктовках та коригування (1 тиждень).
- Навчання персоналу та запуск (1 тиждень).
Терміни реалізації
- Пілотний проект: 4-6 тижнів.
- Доробка під специфіку клініки: +2-4 тижні.
- Інтеграція з МІС: +2-4 тижні.
Економія часу та ресурсів
Лікарі витрачають до 2 годин на день на заповнення карток. Наша система скорочує це до 20-30 хвилин. Для клініки з 10 лікарями економія часу — 100 годин на тиждень, що еквівалентно ставці медсестри.
Що входить у сервіс під ключ
- Адаптована модель ASR, дообучена під термінологію вашої клініки.
- Медичний нормалізатор з розширеним словником і контекстним розв'язанням абревіатур.
- Модуль структурування на базі LLM (GPT-4o або відкрита LLaMA 3).
- Інтеграція з МІС (FHIR R4) — від 1С:Медицина до ЕМІАС.
- Документація та навчання персоналу (2-3 сесії).
- Технічна підтримка на 3 місяці.
Як ми тестуємо точність?
На кожному етапі ми заміряємо WER на контрольній вибірці ваших диктовок. Якщо результат не досягає 4% — дообучаємо модель додатково. Фіксуємо метрики в дашборді MLflow. Ви отримуєте звіт з розбивкою помилок за категоріями (латиниця, дозування, абревіатури).
Чому HIPAA-сумісність критична?
Персональні медичні дані (PHI) захищені законом. Передача аудіо в хмарні ASR-сервіси порушує вимоги 152-ФЗ та може призвести до штрафів. Наше рішення працює у вашому контурі, використовуючи on-premise GPU-сервер. Ми гарантуємо, що жоден файл не залишає захищену мережу. Детальніше про HIPAA.
Wikipedia: Whisper (model) - https://en.wikipedia.org/wiki/Whisper_(speech_recognition_system)
Зв'яжіться з нами для аудиту вашого поточного процесу заповнення карток. Ми підберемо оптимальну архітектуру та розрахуємо вартість. Замовте пілотний проект, щоб оцінити точність на ваших даних. Отримайте консультацію безкоштовно.







