docs(backlog): направления по структуре транскрипта из внешнего ревью
- Зачем: - внешнее сравнение с облачным Hypescribe показало: главный разрыв локальной транскрипции — не качество распознавания, а структура (спикеры 2/10 против 8/10); без диаризации MoM не собрать. - Что: - новый раздел «Структура транскрипта»: диаризация как опциональный пост-процессинг (sherpa-onnx vs pyannote, нужен ADR), ручка нарезки абзацев в formatter, словарь замен терминов как запасной план после бенчмарка RNN-T. - зафиксировано вне ядра CLI: LLM-чистка и сопоставление имён спикеров. - Проверка: - docs-only, тесты не затронуты. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
b1dfd9dcca
commit
5a7fc0d613
@@ -82,6 +82,77 @@
|
||||
|
||||
---
|
||||
|
||||
## Структура транскрипта (конспекты и MoM)
|
||||
|
||||
Источник раздела: внешнее сравнение локального транскрипта (medium,
|
||||
openvino-cpu, запись 25:59) с облачным сервисом Hypescribe, критерий —
|
||||
пригодность как сырья для конспекта и протокола встречи (GPT-ревью,
|
||||
2026-07-10). Итог: по смыслу локальная модель почти равна облаку
|
||||
(6.5/10 против 7/10), главный разрыв — **не качество распознавания,
|
||||
а структура**: разделение говорящих (2/10 против 8/10) и нарезка на
|
||||
реплики. Приоритеты ревьюера: 1) смысл, 2) спикеры, 3) техтермины,
|
||||
4) разбивка на фразы, 5) таймкоды. Вывод: локальная диаризация +
|
||||
словарь терминов закрывают потребность в облачном сервисе для
|
||||
внутренних встреч.
|
||||
|
||||
Сознательно вне ядра CLI (максимум — рецепт в README): второй проход
|
||||
LLM для чистки текста, сопоставление Speaker N с именами — это работа
|
||||
поверх готового транскрипта.
|
||||
|
||||
### Диаризация — разделение говорящих
|
||||
|
||||
**Что:** Опциональный пост-процессинг (не четвёртый бэкенд): сегменты
|
||||
уже несут таймкоды; диаризация даёт интервалы «кто когда говорил»;
|
||||
merge по перекрытию интервалов; formatter ломает абзац на смене спикера
|
||||
и подписывает `Speaker 1:`. Ставится как extra:
|
||||
`uv sync --extra diarization`.
|
||||
|
||||
**Почему:** Без спикеров MoM не собрать — это ключевой разрыв с облаком
|
||||
по внешнему ревью, и никакое качество распознавания его не компенсирует.
|
||||
Заодно естественно решает «разбивку на реплики» (приоритет №4).
|
||||
|
||||
**Варианты реализации (ключевое решение, нужен ADR):**
|
||||
|
||||
- **sherpa-onnx** — диаризация целиком на onnxruntime (сегментация
|
||||
pyannote в ONNX + спикер-эмбеддинги), без torch, в духе нашего
|
||||
onnx-стека и «no cloud, no API keys».
|
||||
- **pyannote.audio** — стандарт качества, но тянет torch и требует
|
||||
HF-токен с принятием лицензии моделей — трение с духом проекта.
|
||||
|
||||
**Уточнить перед запуском:** качество обоих вариантов на русской речи
|
||||
и перекрывающихся репликах; скорость на CPU (диаризация — второй проход
|
||||
по всему аудио); лицензии моделей сегментации/эмбеддингов.
|
||||
|
||||
---
|
||||
|
||||
### Ручка нарезки абзацев в formatter
|
||||
|
||||
**Что:** «Минутные простыни» в транскрипте — не свойство модели, а наши
|
||||
константы группировки `_PAUSE_THRESHOLD_S = 2.0` / `_MAX_PARAGRAPH_S =
|
||||
60.0` в `formatter.py` (сырых сегментов много: 23-минутная запись — 360
|
||||
сегментов, ~4 с на реплику). Вынести в опцию/конфиг или уменьшить
|
||||
дефолт.
|
||||
|
||||
**Почему откладывается:** при диаризации абзацы будут ломаться по смене
|
||||
спикера естественно — сначала решить с диаризацией, чтобы не делать
|
||||
ручку, которая устареет.
|
||||
|
||||
---
|
||||
|
||||
### Словарь замен технических терминов — запасной план
|
||||
|
||||
**Что:** Пост-обработка текста сегментов словарём замен по границам слов
|
||||
(`CSW → CSV`, `софтп → SFTP`, `ямлик → YAML`, `Spark и Scale → Spark
|
||||
SQL`), словарь пользовательский в `.transcriber.toml`.
|
||||
|
||||
**Почему запасной:** это тот же класс ошибок, что «кириллизация латиницы
|
||||
и искажение имён» из [ADR-006](adr/006-onnx-asr-backend.md), и первым
|
||||
его должен попробовать закрыть контекстный декодер GigaAM v3 RNN-T
|
||||
(первый пункт бэклога). Заводить словарь — только если бенчмарк RNN-T
|
||||
термины не вытянет.
|
||||
|
||||
---
|
||||
|
||||
## Авто-детект и UX
|
||||
|
||||
### Включение `onnx` в `--device auto`
|
||||
|
||||
Reference in New Issue
Block a user