test(diarization): добавлен стенд сравнения CPU-моделей
- Зачем: - требовалось сравнить облегченные модели диаризации на старом CPU без изменения рабочей конфигурации. - Что: - добавлен воспроизводимый и возобновляемый прогон матрицы Pyannote FP32/INT8 с WeSpeaker и TitaNet. - зафиксированы измерения 108 ячеек, ограничения эксперимента и решение сохранить модель по умолчанию. - локальные записи в каталоге tmp исключены из индекса Git. - Проверка: - .venv/bin/python -m pytest. - /tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py.
This commit is contained in:
1 parent
95f295c37c
commit
1e14f2687a
8 files changed
+2704
-234
No files matched your search
@@ -2,6 +2,23 @@
|
||||
|
||||
**Статус**: Принято
|
||||
**Дата**: 2026-08-14
|
||||
**Обновлено**: 2026-08-30
|
||||
|
||||
## Решение
|
||||
|
||||
Диаризацию реализуем как явно включаемый пост-процессинг через `sherpa-onnx`.
|
||||
Говорящий назначается слову с временной привязкой, а не целому сегменту
|
||||
распознавания. Модель по умолчанию остаётся прежней: Pyannote Segmentation 3.0 FP32,
|
||||
WeSpeaker ResNet34 LM, порог кластеризации `0,89` и автоматическое число
|
||||
кластеров. Известное число говорящих можно передать явно.
|
||||
|
||||
Повторный CPU-тест FP32/INT8 × WeSpeaker/TitaNet не меняет это решение.
|
||||
INT8 с WeSpeaker дал только около 2% среднего ускорения без существенного
|
||||
выигрыша памяти и с худшими прокси-метриками. TitaNet оказался примерно на
|
||||
четверть быстрее, но потребовал ещё 147–149 МиБ RSS и не прошёл условие приёмки
|
||||
для общего автоматического порога. TitaNet можно исследовать только для режима
|
||||
с явно известным числом говорящих. Такой эксперимент должен завершиться
|
||||
слуховой проверкой. Код и модели по умолчанию на него не переключаем.
|
||||
|
||||
## Контекст
|
||||
|
||||
@@ -21,12 +38,20 @@
|
||||
## Эксперимент
|
||||
|
||||
Локальная связка `sherpa-onnx` с сегментацией Pyannote 3.0 и эмбеддингами
|
||||
WeSpeaker ResNet34 LM проверена на трёх записях с известным составом. Для
|
||||
автоматического определения числа голосовых кластеров выбран порог 0,89: это
|
||||
единственное проверенное значение, которое на трёх контрольных фрагментах дало
|
||||
3 / 2 / 2 кластера. На полной встрече втроём остался ложный кластер длительностью
|
||||
19,1 секунды; поэтому малые кластеры нельзя молча отбрасывать, а разметку нельзя
|
||||
считать эталоном точных границ и перекрывающейся речи.
|
||||
WeSpeaker ResNet34 LM проверена на трёх записях с известным составом. В исходной
|
||||
калибровке для автоматического определения числа голосовых кластеров выбран
|
||||
порог 0,89: среди проверенных тогда значений только он дал на трёх контрольных
|
||||
фрагментах `3 / 2 / 2` кластера. На полной встрече втроём остался ложный кластер
|
||||
длительностью 19,1 секунды; поэтому малые кластеры нельзя молча отбрасывать, а
|
||||
разметку нельзя считать эталоном точных границ и перекрывающейся речи.
|
||||
|
||||
В повторном CPU-переборе на тех же пятиминутных фрагментах FP32 + WeSpeaker
|
||||
прошёл условие приёмки `3 / 2 / 2` на плато `0,85–0,89`, а INT8 + WeSpeaker —
|
||||
на `0,85–0,90`.
|
||||
Это не отменяет порог 0,89: новый прогон не имел повторов и новой слуховой
|
||||
проверки. Обе связки TitaNet провалили условие приёмки во всех проверенных
|
||||
точках; число содержательных кластеров не использовалось как оправдание лишних
|
||||
голосовых кластеров.
|
||||
|
||||
Двуязычная CAMPPlus zh/en оказалась примерно на 30% быстрее и при известном
|
||||
числе участников улучшила прокси-метрику на двух записях, но для неё не нашлось
|
||||
@@ -44,6 +69,8 @@ WeSpeaker ResNet34 LM проверена на трёх записях с изв
|
||||
[калибровке](../benchmarks/2026-08-14-diarization-calibration.md),
|
||||
[смешении говорящих](../benchmarks/2026-08-14-asr-segment-speaker-mixing.md) и
|
||||
[производительности на Intel](../benchmarks/2026-08-14-diarization-intel-i7.md).
|
||||
Сравнение облегчённых моделей и границы его применимости описаны в
|
||||
[отдельном отчёте](../benchmarks/2026-08-30-lightweight-diarization-cpu.md).
|
||||
|
||||
### Сглаживание неизвестного говорящего
|
||||
|
||||
@@ -78,12 +105,7 @@ speaker Markdown хранит только начало реплики. Тем
|
||||
невозможна, потому что в нём уже потеряны доли секунды, конец слова и причина
|
||||
неопределённости.
|
||||
|
||||
## Решение
|
||||
|
||||
Диаризацию реализуем как явно включаемый пост-процессинг через `sherpa-onnx`.
|
||||
Первая версия использует Pyannote segmentation 3.0, WeSpeaker ResNet34 LM,
|
||||
порог кластеризации 0,89 и автоматическое число кластеров; известное число
|
||||
участников можно передать явно.
|
||||
## Сведение слов и разметки говорящих
|
||||
|
||||
Говорящий назначается [слову с временной
|
||||
привязкой](../../CONTEXT.md#language), а не сегменту распознавания. Каждый
|
||||
@@ -119,6 +141,9 @@ ASR-бэкенд приводит свой результат к общему н
|
||||
- Последовательный режим задаёт корректный baseline. Параллельный запуск и
|
||||
автоматическое включение на мощных устройствах требуют отдельных измерений
|
||||
после стабилизации.
|
||||
- Pyannote INT8 и TitaNet не становятся конфигурациями по умолчанию только на
|
||||
основании CPU-теста. Для TitaNet следующий допустимый эксперимент —
|
||||
режим с явно известным числом говорящих, повторами и слуховой проверкой.
|
||||
|
||||
## Отклонённые альтернативы
|
||||
|
||||
|
||||
Reference in new issue
Block a user