feat(diarization): добавлено разделение транскрипта по говорящим #26

Merged
ddmitry merged 2 commits from codex/24-word-diarization into master 2026-08-14 21:57:45 +03:00
Owner

Closes #24.

Что сделано

  • добавлены пословные таймкоды для FasterWhisper, ONNX-ASR и OpenVINO;
  • реализована офлайн-диаризация через sherpa-onnx с проверяемым кешем Pyannote segmentation 3.0 и WeSpeaker ResNet34 LM;
  • добавлены --diarize и --speakers N, batch-owned lifecycle и деградация без потери готового ASR;
  • реализовано пословное сведение, Speaker N / Speaker ?, малые кластеры и speaker Markdown;
  • обновлены README, ADR, зависимости и отчёты приёмки/производительности.

Поведение

  • без новых флагов формат и путь ASR не меняются;
  • ошибка preflight останавливает запуск до первого ASR;
  • ошибка диаризации отдельного файла сохраняет обычный транскрипт, продолжает batch и возвращает ненулевой статус;
  • неизвестные слова и малые кластеры не скрываются;
  • post-hoc назначение Speaker ? соседнему кластеру отклонено после проверки на трёх транскриптах: совпадение с независимой опорой составило около 52%.

Проверка

  • pytest: 283 passed, 1 skipped;
  • Pyright: 0 errors;
  • Ruff и git diff --check: без ошибок;
  • ручная приёмка на Data Test, T2 BDMA и Yantar;
  • ASR-текст speaker-вывода посимвольно сверён с обычным ASR без потерь и перестановок;
  • на 61:13 контрольного аудио полный последовательный запуск с диаризацией занял 12:50.

Дальше

CPU-стоимость и облегчённые модели вынесены в #25. Параллельный запуск ASR и диаризации остаётся отдельной оптимизацией wall-clock.

Closes #24. ## Что сделано - добавлены пословные таймкоды для FasterWhisper, ONNX-ASR и OpenVINO; - реализована офлайн-диаризация через sherpa-onnx с проверяемым кешем Pyannote segmentation 3.0 и WeSpeaker ResNet34 LM; - добавлены `--diarize` и `--speakers N`, batch-owned lifecycle и деградация без потери готового ASR; - реализовано пословное сведение, `Speaker N` / `Speaker ?`, малые кластеры и speaker Markdown; - обновлены README, ADR, зависимости и отчёты приёмки/производительности. ## Поведение - без новых флагов формат и путь ASR не меняются; - ошибка preflight останавливает запуск до первого ASR; - ошибка диаризации отдельного файла сохраняет обычный транскрипт, продолжает batch и возвращает ненулевой статус; - неизвестные слова и малые кластеры не скрываются; - post-hoc назначение `Speaker ?` соседнему кластеру отклонено после проверки на трёх транскриптах: совпадение с независимой опорой составило около 52%. ## Проверка - `pytest`: 283 passed, 1 skipped; - Pyright: 0 errors; - Ruff и `git diff --check`: без ошибок; - ручная приёмка на Data Test, T2 BDMA и Yantar; - ASR-текст speaker-вывода посимвольно сверён с обычным ASR без потерь и перестановок; - на 61:13 контрольного аудио полный последовательный запуск с диаризацией занял 12:50. ## Дальше CPU-стоимость и облегчённые модели вынесены в #25. Параллельный запуск ASR и диаризации остаётся отдельной оптимизацией wall-clock.
ddmitry added 2 commits 2026-08-14 21:56:53 +03:00
Зачем:
- локальным транскриптам нужна структура реплик для конспектов и протоколов.

Что:
- добавлены пословные таймкоды для всех ASR-бэкендов и сведение с Sherpa-ONNX.
- реализованы CLI-флаги, деградация без потери ASR и speaker Markdown.
- добавлены проверяемый кеш моделей, тесты и документация.

Проверка:
- `pytest` — 283 passed, 1 skipped.
- `pyright` — 0 errors.
- Ruff и `git diff --check` — без ошибок.
- выполнены три контрольных прогона на реальных записях.
- Зачем:
  - решения по неопределённым словам и CPU-стоимости должны быть проверяемыми до публикации реализации.
- Что:
  - задокументировано отклонение post-hoc сглаживания Speaker ? по соседним кластерам.
  - добавлено исследование стоимости каскада и облегчённых embedding-моделей.
- Проверка:
  - `git diff --cached --check` — без ошибок.
ddmitry merged commit f17c24ca60 into master 2026-08-14 21:57:45 +03:00
ddmitry deleted branch codex/24-word-diarization 2026-08-14 21:57:46 +03:00
Sign in to join this conversation.