Автоматическое транскрибирование медицинских диктовок с WER 2-4%

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Автоматическое транскрибирование медицинских диктовок с WER 2-4%
Сложный
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Автоматическое транскрибирование медицинских диктовок: снижаем 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. Аудит текущего процесса и сбор требований (1-2 недели).
  2. Сбор и подготовка датасета аудиозаписей с расшифровками (2-3 недели).
  3. Дообучение модели Whisper с LoRA и INT8-квантизацией (1-2 недели).
  4. Интеграция с МИС через FHIR R4 (2-4 недели).
  5. Тестирование на реальных диктовках и корректировка (1 неделя).
  6. Обучение персонала и запуск (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)

Свяжитесь с нами для аудита вашего текущего процесса заполнения карт. Мы подберём оптимальную архитектуру и рассчитаем стоимость. Закажите пилотный проект, чтобы оценить точность на ваших данных. Получите консультацию бесплатно.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.