Files
local-transcriber/.scratch/diarization/README.md
T
Dmitry Dementiev 99ddf77af3 perf(diarization): добавлен замер на старом Intel
- Зачем:
  - требовалось оценить стоимость опциональной диаризации на доступном слабом Intel baseline.
- Что:
  - зафиксированы ASR, RTFx и peak RSS на трёх контрольных записях.
  - замер peak RSS адаптирован для Linux и macOS.
  - недоступный Core i5 явно заменён Core i7-6820HQ с сохранением ограничения применимости.
- Проверка:
  - uv run ruff check .scratch/diarization/common.py.
  - uv run pytest -q: 243 passed, 1 skipped.
2026-08-14 13:37:07 +03:00

66 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Обвязка замеров диаризации
Исследовательские скрипты для карты
[Карта: диаризация спикеров в транскрипте](https://git.dementev.space/ddmitry/local-transcriber/issues/8) (#8).
Не часть пакета: они опираются на `sherpa-onnx`, которого нет в зависимостях
проекта, и живут в `.scratch/`, а не в `src/`.
Результаты первого прогона описаны в
[разведочном замере](../../docs/benchmarks/2026-08-12-diarization-feasibility.md).
## Модели
Скачиваются один раз в `models/`, в git не попадают (см. `.gitignore` рядом).
```bash
mkdir -p models && cd models
curl -sSL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-segmentation-models/sherpa-onnx-pyannote-segmentation-3-0.tar.bz2
tar xjf sherpa-onnx-pyannote-segmentation-3-0.tar.bz2
curl -sSL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/wespeaker_en_voxceleb_resnet34_LM.onnx
```
Сегментация — 6,9 МБ, эмбеддинги — 26,5 МБ. Опечатка `recongition` в URL
относится к самому релизу sherpa-onnx, это не ошибка набора.
## Скрипты
| Скрипт | Что делает | Тикеты |
|---|---|---|
| `bench_asr.py` | ASR тем же путём, что CLI: время, RTF, память | #13 |
| `bench_diar.py` | один прогон диаризации, сохраняет разметку в `segments-<порог>.tsv` | #12, #13 |
| `bench_sweep.py` | свип порога кластеризации и явного числа говорящих | #10 |
| `bench_conflict.py` | доля ASR-сегментов, внутри которых меняется говорящий | #11 |
| `common.py` | пути, конфигурация диаризатора, замер памяти | — |
## Запуск
Из корня репозитория. `PYTHONIOENCODING=utf-8` нужен, иначе вывод падает на
консоли cp1251.
```bash
export PYTHONIOENCODING=utf-8
uv run python .scratch/diarization/bench_asr.py "<путь к записи>"
uv run --with sherpa-onnx python .scratch/diarization/bench_diar.py "<путь>" 8 0.89
uv run --with sherpa-onnx python .scratch/diarization/bench_sweep.py "<путь>"
uv run --with sherpa-onnx python .scratch/diarization/bench_conflict.py "<путь>"
```
## Что стоит знать до запуска
- **Порог кластеризации откалиброван.** По умолчанию стоит 0,89 — единственное
проверенное значение, которое без знания числа участников дало правильные
3 / 2 / 2 кластера на трёх калибровочных фрагментах. Решение и ограничения
описаны в
[отчёте о калибровке](../../docs/benchmarks/2026-08-14-diarization-calibration.md).
- **Свип дорогой.** Каждая конфигурация — полный прогон сегментации и
эмбеддингов, около 2,5 минут на 26-минутную запись, и время от настроек
кластеризации практически не зависит. Свип вести на коротком фрагменте.
- **Чистота сегментов меряется относительно диаризации.** Если её границы
систематически смещены, метрика измеряет не то, что кажется. Проверка границ
на слух — тикет #12, и он намеренно идёт до калибровки.
- **Замер памяти чинился.** В разведке `psapi.GetProcessMemoryInfo` молча
возвращал ноль; `common.peak_rss_mb()` теперь зовёт `K32GetProcessMemoryInfo`
из kernel32 и проверяет код возврата. На Linux и macOS используется
`resource.getrusage()` с поправкой на разные единицы измерения.