docs(diarization): собраны исследования и калибровка для карты #18

Merged
ddmitry merged 15 commits from feature/8-diarization-map into master 2026-08-14 17:19:15 +03:00
Owner

Что сделано

  • добавлены разведочный и калибровочный отчёты по диаризации;
  • исследован жизненный цикл ONNX Runtime и OpenVINO;
  • выбран автоматический дефолт: WeSpeaker ResNet34 LM с порогом 0,89;
  • добавлены воспроизводимые скрипты benchmark-прогонов;
  • уточнены бэклог, терминология и операции карты Wayfinder.

Проверка

  • uvx --cache-dir .uv-cache ruff check scripts/benchmarks/diarization_calibration.py
  • uvx --cache-dir .uv-cache ruff format --check scripts/benchmarks/diarization_calibration.py
  • uv run --cache-dir .uv-cache pytest: 243 passed, 1 skipped

Связанные задачи

PR оставлен черновиком, пока открыта карта #8.

## Что сделано - добавлены разведочный и калибровочный отчёты по диаризации; - исследован жизненный цикл ONNX Runtime и OpenVINO; - выбран автоматический дефолт: WeSpeaker ResNet34 LM с порогом 0,89; - добавлены воспроизводимые скрипты benchmark-прогонов; - уточнены бэклог, терминология и операции карты Wayfinder. ## Проверка - `uvx --cache-dir .uv-cache ruff check scripts/benchmarks/diarization_calibration.py` - `uvx --cache-dir .uv-cache ruff format --check scripts/benchmarks/diarization_calibration.py` - `uv run --cache-dir .uv-cache pytest`: 243 passed, 1 skipped ## Связанные задачи - Карта: #8 - Закрытые исследования и калибровка: #9, #10, #12 PR оставлен черновиком, пока открыта карта #8.
ddmitry added 8 commits 2026-08-14 11:19:29 +03:00
- Зачем:
  - схема из бэклога приписывала спикера целому ASR-сегменту, и до замера
    было неизвестно, насколько сильно это огрубляет результат.
- Что:
  - добавлен разведочный замер sherpa-onnx на одной записи: 11,1x RTFx против
    16,4x у ASR, свип порога кластеризации и доля загрязнённых сегментов.
  - пункт бэклога переписан: движок описан как практически закрытый вопрос,
    главной развилкой названа единица привязки спикера к тексту.
  - зафиксировано, что 27% сегментов содержат не менее секунды чужой речи и на
    них приходится больше половины времени транскрипта.
- Проверка:
  - методика и условия замера воспроизводятся по разделам «Оборудование и
    условия» и «Контрольная запись» в docs/benchmarks/2026-08-12-diarization-feasibility.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
  - навык wayfinder ожидает раздел про операции карты в документе трекера, а
    в Gitea 1.27 нет подзадач, поэтому конвенции надо было зафиксировать явно.
- Что:
  - описана принадлежность тикета карте через метку и ссылку в теле, поскольку
    родительских связей в API нет.
  - блокировки заведены на нативные зависимости Gitea, добавлены запросы фронтира.
  - зафиксированы три особенности tea api: путь без ведущего слэша, обязательные
    owner и repo в теле зависимости, нулевой код возврата при HTTP 404.
- Проверка:
  - tea issues list --remote origin --labels wayfinder:map
  - tea api --remote origin repos/ddmitry/local-transcriber/issues/14/dependencies

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
  - рабочие материалы заходов (замеры, черновики, обвязка) должны попадать в
    историю вместе с веткой, а не жить только на машине разработчика.
- Что:
  - строка .scratch/ удалена из .gitignore.
- Проверка:
  - git check-ignore -v .scratch/ не должен ничего возвращать.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
  - тикеты карты #10-#13 опираются на измерительную обвязку, которая до сих пор
    жила во временном каталоге сессии и исчезла бы вместе с ним.
- Что:
  - перенесены четыре скрипта разведки: ASR, один прогон диаризации, свип порога
    кластеризации и подсчёт чистоты ASR-сегментов.
  - общая часть вынесена в common.py: пути от корня репозитория вместо
    захардкоженных, конфигурация диаризатора, проверка наличия моделей.
  - починен замер пиковой памяти: нужен экспорт K32GetProcessMemoryInfo из
    kernel32 и явные argtypes, иначе дескриптор процесса уезжает 32-битным.
  - модели и выход замеров исключены из истории локальным .gitignore.
- Проверка:
  - export PYTHONIOENCODING=utf-8
  - uv run --with sherpa-onnx python .scratch/diarization/bench_diar.py "<запись>" 8 0.9

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
  - нужна фактическая опора для решений карты о диаризации на Intel-пути.
- Что:
  - исследованы жизненные циклы ORT, OpenVINO, DirectML и Windows ML.
  - сравнены пути AMD, Apple Silicon и браузерные EP для текущих моделей.
  - зафиксированы wheel-матрицы, fallback и необходимые model-specific тесты.
- Проверка:
  - git diff --cached --check.
- Зачем:
  - выводы о жизненном цикле и возможностях моделей должны читаться как единое исследование.
- Что:
  - материал перестроен вокруг слоёв, платформ и уровней доказательства.
  - объединены выводы по Intel, AMD, Apple и браузерным путям.
  - подтверждённые возможности отделены от выводов и необходимых экспериментов.
- Проверка:
  - относительные ссылки и структура Markdown проверены.
  - git diff --cached --check выполнен успешно.
- Зачем:
  - слуховая проверка (#12) показала, что разметку диаризации читают как
    истину, хотя она содержит ложный кластер, пропуски и неполные перекрытия.
- Что:
  - в глоссарий добавлен термин «Опорная разметка» с запретом на
    «эталонную», «истинную» и ground truth.
  - определение описывает роль разметки в измерении, а не результат
    конкретного прогона: выводы о пороге 0,9 остались в тикетах карты.
- Проверка:
  - git show --stat HEAD и чтение CONTEXT.md.
- Зачем:
  - необходим устойчивый дефолт модели эмбеддингов и порога на русской речи.
- Что:
  - задокументирован выбор WeSpeaker ResNet34 LM с порогом 0,89.
  - добавлен возобновляемый скрипт свипа моделей и параметров диаризации.
- Проверка:
  - uvx --cache-dir .uv-cache ruff check scripts/benchmarks/diarization_calibration.py.
  - uv run --cache-dir .uv-cache pytest: 243 passed, 1 skipped.
ddmitry added 1 commit 2026-08-14 11:44:28 +03:00
- Зачем:
  - требовалось проверить долю смешанных ASR-сегментов на трёх записях, включая разговоры на двоих.
- Что:
  - добавлен отчёт с долями сегментов и времени для трёх рабочих созвонов.
  - обвязка замеров переведена на откалиброванный порог 0,89.
  - исследовательский скрипт приведён к формату ruff.
- Проверка:
  - выполнены три полных прогона bench_conflict.py с WeSpeaker и порогом 0,89.
  - uv run ruff check и ruff format --check прошли успешно.
ddmitry added 1 commit 2026-08-14 13:37:20 +03:00
- Зачем:
  - требовалось оценить стоимость опциональной диаризации на доступном слабом 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.
ddmitry added 1 commit 2026-08-14 13:59:38 +03:00
- Зачем:
  - результат benchmark нужно интерпретировать с учётом ограничения питания ноутбука.
- Что:
  - зафиксировано урезанное питание во время прогонов.
  - визуальная оценка потери производительности около 30% явно отделена от измеренных результатов.
- Проверка:
  - git diff --check.
ddmitry added 1 commit 2026-08-14 14:16:18 +03:00
- Зачем:
  - решение о пословной привязке должно использовать единый язык во всех документах карты.
- Что:
  - определены сегмент распознавания и слово с временной привязкой.
  - реплика говорящего отделена от единицы запуска модели распознавания.
- Проверка:
  - git diff --check.
ddmitry added 2 commits 2026-08-14 15:56:03 +03:00
- Зачем:
  - потребовалось отделить временный результат диаризации от итоговых реплик транскрипта.
- Что:
  - добавлено определение разметки говорящих и перечислены нежелательные синонимы.
  - уточнено, что разметка не содержит текст, имена участников и голосовые эмбеддинги.
- Проверка:
  - выполнена команда git diff --cached --check.
- Зачем:
  - решения карты должны стать устойчивой основой для реализации диаризации.
- Что:
  - добавлены ADR-007 и спецификация пословной диаризации.
  - дополнен доменный словарь и удалены закрытые направления из backlog.
- Проверка:
  - git diff --cached --check.
ddmitry added 1 commit 2026-08-14 17:09:50 +03:00
- Зачем:
  - спецификация не должна оставлять неоднозначности перед реализацией диаризации.
- Что:
  - уточнены сведение слов, таймкоды и предупреждение о малом кластере.
  - очищены терминология и граница между ADR и спецификацией.
  - сохранён результат сравнения WeSpeaker и CAMPPlus.
- Проверка:
  - git diff --cached --check и проверка относительных ссылок.
ddmitry marked the pull request as ready for review 2026-08-14 17:18:57 +03:00
ddmitry merged commit 63ba41d906 into master 2026-08-14 17:19:15 +03:00
ddmitry deleted branch feature/8-diarization-map 2026-08-14 17:19:15 +03:00
Sign in to join this conversation.