Автоматичне транскрибування медичних диктовок: знижуємо 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)
Зв'яжіться з нами для аудиту вашого поточного процесу заповнення карток. Ми підберемо оптимальну архітектуру та розрахуємо вартість. Замовте пілотний проект, щоб оцінити точність на ваших даних. Отримайте консультацію безкоштовно.







