Реализация автоматического транскрибирования судебных заседаний
Транскрибация судебных заседаний — высокоответственная задача с требованиями к точности >98% (WER <2%). Специфика: множество говорящих, перебивания, юридическая лексика, процессуальные формулы, имена собственные. Транскрипт является процессуальным документом.
Требования к системе
- WER <5% на юридической лексике (после постобработки)
- Точная атрибуция реплик (председатель, прокурор, адвокат, свидетель, ответчик)
- Временны́е метки для каждой реплики
- Автоматическая нормализация числительных, дат, статей закона
- Защищённое хранение (данные не покидают контур)
On-premise архитектура
# Полностью локальное развёртывание без облака
class CourtTranscriptionSystem:
def __init__(self):
# Whisper large-v3 дообученный на юридических данных
self.stt = WhisperModel(
"/models/whisper-legal-ru",
device="cuda",
compute_type="int8_float16"
)
# Диаризация — обязательно
self.diarizer = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1"
)
# Нормализатор юридических текстов
self.normalizer = LegalTextNormalizer()
async def transcribe_session(self, audio_path: str, participants: dict) -> dict:
"""
participants: {"SPEAKER_00": "Председатель Иванова И.И.", ...}
"""
# 1. Транскрибируем с word timestamps
segments, _ = self.stt.transcribe(
audio_path,
word_timestamps=True,
language="ru",
vad_filter=True,
initial_prompt="Судебное заседание. Председатель суда, прокурор, адвокат, подсудимый."
)
# 2. Диаризация
diarization = self.diarizer(audio_path)
# 3. Сопоставляем с участниками
labeled_transcript = self._label_speakers(
list(segments), diarization, participants
)
# 4. Нормализация: "сто пятьдесят вторая статья" → "ст. 152"
for segment in labeled_transcript:
segment["text"] = self.normalizer.normalize(segment["text"])
return {
"session_date": datetime.now().isoformat(),
"transcript": labeled_transcript,
"metadata": {
"audio_duration": self._get_duration(audio_path),
"speaker_count": len(participants)
}
}
Специализированный словарь для суда
LEGAL_VOCABULARY = [
"апелляционное определение",
"постановление о прекращении дела",
"кассационная жалоба",
"статья двести шестьдесят четвёртая",
"часть первая статьи",
"Уголовно-процессуальный кодекс",
"Гражданский процессуальный кодекс",
# ... несколько тысяч терминов
]
Экспорт в форматы
- DOCX с таблицей: время | говорящий | текст
- XML для систем электронного документооборота судов
- PDF с подписью и хэшем для целостности
Постредактирование
Система предназначена для поддержки секретаря, а не замены: выдаёт черновик с >90% точностью, секретарь исправляет и удостоверяет.
Сроки реализации
- Базовая система: 4–6 недель
- С дообучением на юридических данных: +4–6 недель
- Сертификация и интеграция в ГАС «Правосудие»: отдельный проект







