Реализация автоматического транскрибирования медицинских диктовок

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация автоматического транскрибирования медицинских диктовок
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Реализация автоматического транскрибирования медицинских диктовок

Медицинская диктовка — врач диктует осмотр, анамнез, диагноз, назначения — система создаёт структурированный текст в нужном формате медкарты. Экономия времени врача: 30–60 минут в день. Специфика: высокая цена ошибки, медицинская терминология, аббревиатуры, латинские названия.

Требования к системе

  • WER <5% на медицинских терминах
  • Структурирование в формат SOAP/HL7 FHIR
  • HIPAA/152-ФЗ совместимость — данные в защищённом контуре
  • Интеграция с МИС (1С:Медицина, Медиалог, ЕМИАС)

Архитектура медицинской диктовки

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 = {
    "ад": "артериальное давление",
    "чсс": "частота сердечных сокращений",
    "жкт": "желудочно-кишечный тракт",
    "орви": "острая респираторная вирусная инфекция",
    # Расшифровываем при диктовке, сокращаем в финальном тексте
}

Особенности работы с МИС

Интеграция через FHIR R4 API или специфические API 1С:Медицина, Медиалог. Создаём ClinicalDocument или DocumentReference в FHIR.

Сроки реализации

  • Базовая система: 4–6 недель
  • Дообучение Whisper на медицинских данных: +4–6 недель (при наличии датасета)
  • Интеграция с конкретной МИС: +2–4 недели