Режим на детекторе речи вместо диаризации

Диаризация занимала 79 % времени, а её метку мы не используем: на записи
с одним микрофоном голоса не расходятся, роли расставляет LLM по смыслу.
Silero VAD решает единственную нужную задачу и делает это вчетверо быстрее.

Замер на 205 минутах: x16 -> x60, слов на 1,8 % меньше. Семь записей
из восьми в пределах +-4 %, на одной теряется 19 %.

Отдельно найдено: max_speech_duration у Silero по умолчанию 20 с, и на
таких кусках распознавание теряет текст. Снижение до 6 с даёт 6-8 п.п.
полноты бесплатно. Диаризация сохранена настройкой diarize.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vladimir Bryzgalov
2026-08-17 13:36:01 +05:00
co-authored by Claude Opus 5
parent b2bad9d8e6
commit 5d576dd3c4
7 changed files with 132 additions and 14 deletions
+4 -2
View File
@@ -75,13 +75,15 @@ def _process(job_id: str, worker: Pipeline, pool) -> None:
from app.worker import run_job
result = pool.submit(run_job, str(upload), speakers, worker.ffmpeg,
settings.normalize, settings.recover_gaps).result()
settings.normalize, settings.recover_gaps,
settings.diarize).result()
else:
with tempfile.TemporaryDirectory() as tmp:
wav = Path(tmp) / "audio.wav"
to_wav16k(upload, wav, worker.ffmpeg, settings.normalize)
result = worker.transcribe(wav, num_speakers=speakers,
recover_gaps=settings.recover_gaps)
recover_gaps=settings.recover_gaps,
diarize=settings.diarize)
result["filename"] = job["filename"]
store.mark_done(job_id, result)
log.info("задача %s готова: %.1f с аудио, x%s", job_id,