docs(asr): зафиксировано исследование обновлений и CPU-дефолта

- Зачем:
  - нужен проверяемый путь от обновления ASR-стека к выбору безопасного CPU-дефолта.
- Что:
  - добавлено исследование актуальных движков и моделей с корректным именем файла.
  - зафиксированы дефект OpenVINO, кандидаты GigaAM и матрица бенчмарка на Intel Core i5.
- Проверка:
  - выполнена проверка git diff --cached --check.
This commit is contained in:
Dmitriy Dementiev
2026-08-10 19:07:59 +03:00
parent 5a7fc0d613
commit f8c6a4fc7e
2 changed files with 134 additions and 10 deletions
+81 -10
View File
@@ -8,9 +8,65 @@
## ASR-бэкенды и модели
### GigaAM v3 RNN-T — потенциальная замена CTC-дефолта для `--device onnx`
### Переоценка CPU-дефолта после обновления `onnx-asr` 0.12
**Что:** Прогнать `gigaam-v3-rnnt` (или `v3_e2e_rnnt` если доступен через onnx-asr) по той же методологии, что и в [ADR-006](adr/006-onnx-asr-backend.md): 3 файла × agent-judge × 4 критерия.
**Проблема:** текущий CPU-путь через OpenVINO Whisper medium нестабилен на
длинных записях с тихими участками: модель генерирует правдоподобные повторы и
несуществующий текст. На файле `2026-07-29 13-58-39.mp4` разговор заканчивается
примерно на 02:28, после чего OpenVINO создаёт десятки повторяющихся блоков до
конца 59-минутной записи. Изолированный тест окна 02:00–03:30 дал одинаковую
серию из 14 повторов на `openvino-genai` 2026.0 и 2026.3; обновление движка само
по себе проблему не устраняет. Подробнее — в пункте
[«Whisper medium галлюцинации»](#whisper-medium-галлюцинации-на-длинных-файлах-с-тихими-фрагментами).
**Порядок работы:**
1. Сначала обновить совместимый стек по
[исследованию обновлений](research/2026-08-10-engine-model-updates.md): снять
ограничение `onnx-asr<0.12.0`, проверить VAD и квантованные модели; OpenVINO и
OpenVINO GenAI обновлять согласованно. Не фиксировать ONNX Runtime 1.28 для
Python 3.10.
2. После интеграционных тестов провести сравнительный бенчмарк моделей. Не
менять CPU-дефолт только по model card или результату на одном файле.
3. Решение зафиксировать в ADR-007, обновить рекомендации README и только затем
менять auto-detect/defaults.
**Кандидаты:**
- `gigaam-v3-ctc` — текущий baseline для русского CPU.
- `gigaam-v3-rnnt` — контекстный декодер без пунктуации.
- `gigaam-v3-e2e-ctc` и `gigaam-v3-e2e-rnnt` — варианты с пунктуацией и
нормализацией текста.
- `gigaam-multilingual-ctc` и `gigaam-multilingual-large-ctc`, добавленные в
`onnx-asr` 0.12 — кандидаты для смешанной речи, но не априори для русского
дефолта.
- OpenVINO medium + VAD — альтернатива смене модели, сохраняющая Whisper и
пунктуацию.
- Parakeet v3 — контрольный multilingual-вариант, но не кандидат на русский
дефолт без новых данных, опровергающих ADR-005/006.
**Матрица качества:**
- те же три полные записи и четыре критерия agent-judge из
[ADR-006](adr/006-onnx-asr-backend.md): completeness, term accuracy, fluency,
summary utility;
- новый негативный пример `2026-07-29 13-58-39.mp4` с длинной тишиной;
- небольшой вручную проверенный набор сложных фрагментов для WER/CER и разбора
критичных смысловых ошибок: тихие реплики, имена компаний, латиница и
IT-термины, числа, русско-английское переключение;
- автоматические проверки потери хвоста, повторов, пустых/нулевых VAD-сегментов
и выдуманного текста на тишине.
**Матрица производительности:**
- обязательный прогон на реальном Intel Core i5 11-го поколения; точный SKU,
число ядер, объём RAM, power mode и число потоков записать вместе с результатом;
- Ryzen 7 8845H разработчика и ограничение числа потоков использовать только для
предварительного smoke-теста, не как приёмку производительности i5;
- измерять отдельно cold start/загрузку модели и warm transcription, медиану
трёх прогонов, RTFx, peak RSS и размер скачиваемой модели;
- короткий 15-минутный фрагмент нужен для итераций, полные записи 22–81 мин —
для итогового решения и проверки устойчивости.
**Почему интересно:**
@@ -27,12 +83,14 @@
**Если подтвердится бенчмарком:**
- Дефолт в `--device onnx` меняется с `gigaam-v3-ctc` на `gigaam-v3-rnnt`.
- `openvino-cpu medium` уходит из рекомендаций для русского.
- Формулировка «GPU faster-whisper large-v3 — эталон» в README может стать неточной.
- Пишется ADR-007 с переоценкой дефолта.
**Уточнить перед запуском:** какой именно вариант RNN-T доступен в onnx-asr (`gigaam-v3-rnnt` без пунктуации vs `v3_e2e_rnnt` с пунктуацией). Проверить через `huggingface_hub` listing для `istupakov/gigaam-v3-onnx`.
- Если E2E RNN-T сохраняет качество и приемлемую скорость на i5 — сделать его
русским CPU-дефолтом, OpenVINO оставить явной опцией.
- Если лучший вариант зависит от языка — выбрать language-aware default:
GigaAM v3 для русского, multilingual-модель для смешанной речи.
- Если модели GigaAM проигрывают по пунктуации/смыслу — сохранить текущий
model default и лечить OpenVINO через VAD/качественный pipeline.
- Если ни один вариант не проходит порог качества и скорости — не менять
дефолт, оставить предупреждения и явный выбор backend.
---
@@ -50,15 +108,28 @@
### Whisper medium галлюцинации на длинных файлах с тихими фрагментами
**Что:** Воспроизвести и зафиксировать класс ошибок: `12-02-37` теряет 17 минут хвоста, `Vasya` имеет 5-минутные блоки повторов, появляются несуществующие имена (`Валерий Сюткин`). Источник: agent-judge в [ADR-006](adr/006-onnx-asr-backend.md#класс-ошибок-whisper-medium--галлюцинации-на-длинных-файлах-с-тихими-фрагментами).
**Статус:** воспроизведено 2026-08-10. Помимо примеров из
[ADR-006](adr/006-onnx-asr-backend.md#класс-ошибок-whisper-medium--галлюцинации-на-длинных-файлах-с-тихими-фрагментами),
на записи `2026-07-29 13-58-39.mp4` минимальный тест 02:00–03:30 стабильно
получает 14 одинаковых сегментов после окончания речи. На 30-секундном окне
только с речью повторов нет. `openvino-genai` 2026.3 и
`no_repeat_ngram_size=3` результат не меняют. Корень проблемы — длинные
безречевые участки, которые текущий OpenVINO backend целиком передаёт в
`WhisperPipeline` без VAD.
**Возможные направления:**
- Добавить VAD перед OpenVINO WhisperPipeline и сохранить исходные таймкоды —
наиболее прямое лечение подтверждённой причины.
- Ограничить длину чанка для openvino-medium (chunk_length параметр в WhisperPipeline).
- Внедрить `compression_ratio_threshold` / `log_prob_threshold` фильтры через переписывание pipeline (как у CTranslate2). Уже частично описано в [docs/gpu.md «Качественный pipeline для OpenVINO»](gpu.md#качественный-pipeline-для-openvino).
- Переключить русский CPU-дефолт на победителя сравнительного GigaAM-бенчмарка.
- Предупреждать пользователя при `--device openvino-cpu` для файлов >30 мин.
**Приоритет:** средний — пока есть `gigaam-v3` как альтернатива для русского. Критично, если openvino остаётся единственным вариантом для пунктуации (отпадает после теста RNN-T).
**Приоритет:** высокий — проблема затрагивает текущий OpenVINO CPU-путь, а
целевая аудитория включает ноутбуки с Intel Core i5 11-го поколения. GigaAM v3
остаётся рабочей явной альтернативой для русского, но выбор безопасного
auto/default требует сравнительного бенчмарка.
---