Автоматическое транскрибирование медицинских диктовок: снижаем 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-ru-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="ru", 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 недель | Средняя (GPU + лицензия) | 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 часов в неделю, что эквивалентно ставке медсестры. Бюджет пилотного проекта — от $1.5k–3k, а годовая экономия при 10 врачах достигает $14k–20k.
Что входит в сервис под ключ
- Адаптированная модель 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)
Свяжитесь с нами для аудита вашего текущего процесса заполнения карт. Мы подберём оптимальную архитектуру и рассчитаем стоимость. Закажите пилотный проект, чтобы оценить точность на ваших данных. Получите консультацию бесплатно.







