Автоматическое транскрибирование медицинских диктовок: снижаем 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 часов в неделю, что эквивалентно ставке медсестры. Бюджет пилотного проекта — от 150 до 300 тысяч рублей, а годовая экономия при 10 врачах достигает 1,5 млн рублей.
Что входит в сервис под ключ
- Адаптированная модель 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)
Свяжитесь с нами для аудита вашего текущего процесса заполнения карт. Мы подберём оптимальную архитектуру и рассчитаем стоимость. Закажите пилотный проект, чтобы оценить точность на ваших данных. Получите консультацию бесплатно.







