Калибровка диаризации: порог кластеризации и модель эмбеддингов на русской речи #10
Notifications
Due Date
No due date set.
Blocks
#11 Чистота ASR-сегментов: подтвердить долю загрязнённых на трёх записях
ddmitry/local-transcriber
Reference: ddmitry/local-transcriber#10
Reference in New Issue
Block a user
Часть карты: Карта: диаризация спикеров в транскрипте (#8)
Question
При каких настройках
sherpa-onnxдаёт диаризацию, которой можно доверять нанашем материале?
Из разведки известно: на пороге кластеризации 0,5 из примеров
sherpa-onnxполучилось 29 говорящих вместо трёх, на 0,9 — верное число. Это одна запись, на
ней же порог и подбирался, поэтому значение принимать нельзя.
FastClusteringConfig.thresholdна нескольких записях сизвестным составом участников, включая разговор на двоих;
num_clusters) инасколько результат от него отличается;
wespeaker_en_voxceleb_resnet34_LMобученна англоязычном VoxCeleb; проверить хотя бы одну многоязычную альтернативу
(например, из семейства 3D-Speaker) на русской речи;
Метод. Каждая конфигурация — это полный прогон сегментации и эмбеддингов,
около 2,5 минут на 26-минутную запись, и число прогонов растёт произведением
записей, порогов и моделей эмбеддингов. Свип вести на коротких фрагментах,
полные записи оставить для проверки финального кандидата, иначе тикет не влезет
в одну сессию.
Важно для соседних тикетов. Смена модели эмбеддингов меняет и время работы,
поэтому результат этого тикета может потребовать перепроверки замера на
целевом i5.
Вход от слуховой проверки
Проверка границ диаризации на слух показала, что на пороге 0,9 три основных голоса в целом устойчивы, но остаются ложный остаточный кластер, небольшие пропуски и неполная разметка перекрывающейся речи.
Поэтому совпадение числа кластеров с числом участников не может быть единственным критерием калибровки. Финального кандидата нужно прослушать на плотном диалоге, проверить устойчивость «голос → кластер», пропуски, остаточные кластеры и перекрытия; короткий почти пустой кластер нельзя автоматически считать отдельным участником.
Ответ — рекомендуемая пара «порог + модель эмбеддингов» с данными, на которых
она выбрана, и понимание, насколько результат устойчив между записями.
Методика разведки описана в
docs/benchmarks/2026-08-12-diarization-feasibility.md.Решение: для автоматического определения числа спикеров рекомендую
wespeaker_en_voxceleb_resnet34_LM.onnx+FastClusteringConfig.threshold=0.89,num_clusters=-1.Почему:
num_clustersпомогает: когда число участников известно, его стоит передавать явно как страховку. Для WeSpeaker на двух записях с опорными метками это не ухудшило purity.Сравнение моделей:
Лицензии: выбранная WeSpeaker/VoxCeleb модель — CC BY 4.0; 3D-Speaker и CAMPPlus — Apache 2.0. ONNX-артефакты брались из официального релиза
k2-fsa/sherpa-onnx.Воспроизводимый отчёт:
docs/benchmarks/2026-08-14-diarization-calibration.md. Скрипт свипа:scripts/benchmarks/diarization_calibration.py. Сырые JSON не добавлены: они содержат локальные пути к рабочим записям; в отчёте есть SHA-256 медиа и моделей.Проверки:
uvx ruff checkиruff format --check— чисто;uv run pytest— 243 passed, 1 skipped.Замер сделан на Ryzen 7 8845H и не заменяет приёмку производительности на целевом Intel Core i5 11-го поколения.