feat(onnx): изменена модель по умолчанию на GigaAM RNN-T

- Зачем:
  - пользователям нужен читаемый транскрипт без обязательной LLM-обработки.
- Что:
  - моделью ONNX по умолчанию выбрана `gigaam-v3-e2e-rnnt`.
  - сохранён явный профиль `gigaam-v3` для более точного сырого текста.
  - обновлены тест, README, спецификация, ADR и benchmark.
- Проверка:
  - `uv run pytest -q` — 226 passed, 1 skipped.
  - `git diff --check`.
This commit is contained in:
Dmitriy Dementiev
2026-08-11 16:47:09 +03:00
parent a06dbe63a3
commit 7f58a56913
6 changed files with 53 additions and 24 deletions
+7 -6
View File
@@ -251,14 +251,15 @@ language = "en"
| Параметр | CUDA | OpenVINO (GPU) | OpenVINO (CPU) | ONNX | CPU | | Параметр | CUDA | OpenVINO (GPU) | OpenVINO (CPU) | ONNX | CPU |
|----------|------|----------------|----------------|------|-----| |----------|------|----------------|----------------|------|-----|
| model | medium | medium | medium | gigaam-v3 | medium | | model | medium | medium | medium | gigaam-v3-e2e-rnnt | medium |
| compute_type | float16 | int8 | int8 | int8 | float32 | | compute_type | float16 | int8 | int8 | int8 | float32 |
| language | ru | ru | ru | ru | ru | | language | ru | ru | ru | ru | ru |
## Модели и GPU ## Модели и GPU
Рекомендации: Рекомендации:
- **По умолчанию:** `medium` — хороший баланс скорости и качества - **По умолчанию для ONNX:** `gigaam-v3-e2e-rnnt` — читаемый русский текст с
пунктуацией почти без потери скорости относительно сырого `gigaam-v3`
- **Макс. качество (NVIDIA):** `large-v3` + `--compute-type float16` - **Макс. качество (NVIDIA):** `large-v3` + `--compute-type float16`
- **Макс. качество (Intel GPU):** `large-v3` + `--device openvino-gpu` - **Макс. качество (Intel GPU):** `large-v3` + `--device openvino-gpu`
- **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации; рекомендуется LLM-нормализация терминов после) - **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации; рекомендуется LLM-нормализация терминов после)
@@ -294,10 +295,10 @@ language = "en"
Методика и качественное сравнение: Методика и качественное сравнение:
[benchmark GigaAM и Whisper](docs/benchmarks/2026-08-11-gigaam-model-comparison.md). [benchmark GigaAM и Whisper](docs/benchmarks/2026-08-11-gigaam-model-comparison.md).
> **Рекомендация**: для готового читаемого русского текста > **Рекомендация**: ONNX по умолчанию использует `gigaam-v3-e2e-rnnt` для
> используйте `gigaam-v3-e2e-rnnt`, для последующей машинной обработки — более > готового читаемого русского текста. Для последующей машинной обработки можно
> точный по словам `gigaam-v3` без пунктуации. Для смешанной речи с приоритетом > явно выбрать более точный по словам `gigaam-v3` без пунктуации. Для смешанной
> качества используйте `gigaam-multilingual-large-ctc`: она примерно вдвое > речи с приоритетом качества используйте `gigaam-multilingual-large-ctc`: она примерно вдвое
> медленнее small-варианта, но приблизилась к monolingual GigaAM по WER. > медленнее small-варианта, но приблизилась к monolingual GigaAM по WER.
> `parakeet-v3` в 1,58 раза быстрее Large и ставит пунктуацию, но на тех же > `parakeet-v3` в 1,58 раза быстрее Large и ставит пунктуацию, но на тех же
> трёх записях хуже по WER и вставляет ложные английские фразы в русскую речь; > трёх записях хуже по WER и вставляет ложные английские фразы в русскую речь;
+13 -8
View File
@@ -1,7 +1,8 @@
# ADR-006: onnx-asr бэкенд — GigaAM v3 как CPU-default для русских встреч # ADR-006: GigaAM RNN-T как модель по умолчанию для ONNX-пути
**Статус**: Принято **Статус**: Принято
**Дата**: 2026-04-25 **Дата**: 2026-04-25
**Обновлено**: 2026-08-11
## Контекст ## Контекст
@@ -100,19 +101,27 @@ Mm-hmm-редукция и иностранные вставки **не обна
## Решение ## Решение
**Принять onnx-asr как экспериментальный бэкенд с явным `--device onnx`. GigaAM v3 — рекомендуемая модель для русских встреч на CPU.** **Принять onnx-asr как экспериментальный бэкенд с явным `--device onnx`.
GigaAM v3 E2E RNN-T — модель по умолчанию для русских встреч на CPU.**
Бэкенд **не в auto-detect** — только при явном указании пользователем (политика experimental backend, как для openvino). Бэкенд **не в auto-detect** — только при явном указании пользователем (политика experimental backend, как для openvino).
Модели: Модели:
- **`gigaam-v3`** — рекомендуемая для русских встреч на CPU. 17-29× RTF, summary utility 4/5 на всех протестированных файлах. Без пунктуации, без латиницы; ошибки локальны, чинятся LLM-нормализацией. - **`gigaam-v3-e2e-rnnt`** — модель по умолчанию: практически равна обычному
GigaAM по скорости, немного уступает по WER, но выдаёт готовую пунктуацию для
пользователей, которые читают транскрипт напрямую.
- **`gigaam-v3`** — явный профиль для последующей машинной обработки. 17-29×
RTF, summary utility 4/5 на всех протестированных файлах. Без пунктуации и
латиницы; ошибки локальны, чинятся LLM-нормализацией.
- **`parakeet-v3`** — multilingual (25 языков), формально доступен. **Не рекомендуется для русских встреч**: Mm-hmm-редукция и иноязычные вставки воспроизводятся систематически (см. выше). Уместен только для англоязычного контента. - **`parakeet-v3`** — multilingual (25 языков), формально доступен. **Не рекомендуется для русских встреч**: Mm-hmm-редукция и иноязычные вставки воспроизводятся систематически (см. выше). Уместен только для англоязычного контента.
Обе модели в int8-квантизации (~300 MB). Все перечисленные модели доступны в int8-квантизации.
## Последствия ## Последствия
- Пользователи CPU-only с русскоязычным контентом получают 3-5× ускорение по сравнению с OpenVINO medium **при превосходящем качестве** (4/5 vs 1-2/5 summary utility на длинных файлах). - Пользователи CPU-only с русскоязычным контентом получают 3-5× ускорение по сравнению с OpenVINO medium **при превосходящем качестве** (4/5 vs 1-2/5 summary utility на длинных файлах).
- Пользователи ONNX без явного `--model` получают пунктуацию и нормализацию
RNN-T; более точный сырой CTC остаётся доступен как `--model gigaam-v3`.
- Whisper medium (`--device openvino-cpu`) **остаётся допустимым** для коротких (≤30 мин) встреч с равномерной громкостью; на длинных файлах с тихими участками он галлюцинирует целыми блоками — этот риск зафиксирован, но решение не выводит OpenVINO из списка дефолтов (часть пользователей всё ещё нуждается в пунктуации, и для коротких файлов галлюцинации не воспроизводятся). - Whisper medium (`--device openvino-cpu`) **остаётся допустимым** для коротких (≤30 мин) встреч с равномерной громкостью; на длинных файлах с тихими участками он галлюцинирует целыми блоками — этот риск зафиксирован, но решение не выводит OpenVINO из списка дефолтов (часть пользователей всё ещё нуждается в пунктуации, и для коротких файлов галлюцинации не воспроизводятся).
- Parakeet-v3 формально доступен, но в README рекомендуется только для англоязычного контента — для русского явно не годится. - Parakeet-v3 формально доступен, но в README рекомендуется только для англоязычного контента — для русского явно не годится.
- GPU faster-whisper large-v3 остаётся эталоном по качеству (для пользователей с NVIDIA GPU). - GPU faster-whisper large-v3 остаётся эталоном по качеству (для пользователей с NVIDIA GPU).
@@ -121,10 +130,6 @@ Mm-hmm-редукция и иностранные вставки **не обна
## Открытые вопросы / следующие шаги ## Открытые вопросы / следующие шаги
- **Galлюцинации Whisper medium на длинных файлах** — отдельный продуктовый риск, требующий собственного исследования. Возможно, имеет смысл ограничить максимальную длину чанка для openvino-medium, или дать предупреждение пользователю. - **Galлюцинации Whisper medium на длинных файлах** — отдельный продуктовый риск, требующий собственного исследования. Возможно, имеет смысл ограничить максимальную длину чанка для openvino-medium, или дать предупреждение пользователю.
- **GigaAM v3 E2E RNN-T** протестирована позднее на трёх 14–15-минутных
записях: она практически равна обычному GigaAM по скорости и даёт готовую
пунктуацию, но немного уступает по совокупному WER. Результаты и обновлённая
рекомендация: [benchmark 2026-08-11](../benchmarks/2026-08-11-gigaam-model-comparison.md).
- **Canary** (`nemo-canary-1b-v2`) — тяжелее, но multilingual + пунктуация. Кандидат на «лучшее качество за разумную скорость» для тех, кому важна пунктуация. - **Canary** (`nemo-canary-1b-v2`) — тяжелее, но multilingual + пунктуация. Кандидат на «лучшее качество за разумную скорость» для тех, кому важна пунктуация.
- **Auto-detect onnx**: после стабилизации в production-использовании (несколько недель) — рассмотреть включение в auto-detect как первый CPU-бэкенд (ниже CUDA, выше OpenVINO). - **Auto-detect onnx**: после стабилизации в production-использовании (несколько недель) — рассмотреть включение в auto-detect как первый CPU-бэкенд (ниже CUDA, выше OpenVINO).
@@ -197,10 +197,10 @@ FasterWhisper лучше сохраняет `API`, `ETL`, `Open Platform`; об
11 раз медленнее GigaAM ради снижения WER примерно на 5–6 процентных пунктов. 11 раз медленнее GigaAM ради снижения WER примерно на 5–6 процентных пунктов.
На CUDA соотношение необходимо измерять отдельно. На CUDA соотношение необходимо измерять отдельно.
Три записи подтверждают RNN-T как практический профиль для готового текста, но По итогам сравнения и обсуждения двух основных сценариев RNN-T выбрана моделью
не дают оснований молча менять общий default: существующие пользователи могут по умолчанию для явного `--device onnx`: небольшая потеря дословной точности
предпочитать более точный сырой `gigaam-v3`, а пунктуация RNN-T заметно дробит принята ради читаемого результата с пунктуацией. Для LLM-пайплайнов и поиска,
живую речь. Лучше выразить выбор явными профилями CLI или конфигурации. где важнее сырой текст, `gigaam-v3` остаётся явным профилем.
## Воспроизводимость ## Воспроизводимость
+13 -5
View File
@@ -83,11 +83,18 @@ CTranslate2, а onnx-путь ставится в CPU-варианте.
Конкретные номера берутся из `uv.lock` при реализации. Конкретные номера берутся из `uv.lock` при реализации.
## Последующее решение о модели по умолчанию
После сравнительного прогона на трёх реальных записях и обсуждения двух
основных потребителей транскрипта модель `gigaam-v3-e2e-rnnt` выбрана моделью
по умолчанию для явного `--device onnx`. Она всего на 2% медленнее сырого
`gigaam-v3`, но выдаёт пунктуацию для чтения человеком; `gigaam-v3` остаётся
явным профилем с приоритетом дословной точности и последующей обработки LLM.
Это решение не включает ONNX в auto-detect.
## Чего не делаем ## Чего не делаем
- Не меняем модель по умолчанию и auto-detect: `gigaam-v3` остаётся дефолтом - Не меняем auto-detect: ONNX остаётся только явным выбором пользователя.
`--device onnx`. Решение о CPU-дефолте требует замеров на целевом Intel Core
i5, которого сейчас нет в доступе.
- Не обновляем OpenVINO, OpenVINO GenAI и CTranslate2. Whisper medium на - Не обновляем OpenVINO, OpenVINO GenAI и CTranslate2. Whisper medium на
OpenVINO — то, с чем сравниваются новые модели; менять его движок OpenVINO — то, с чем сравниваются новые модели; менять его движок
одновременно значит потерять точку отсчёта. Верхние границы версий им при одновременно значит потерять точку отсчёта. Верхние границы версий им при
@@ -156,8 +163,9 @@ Python и зависимости при неизменных моделях —
## Документация ## Документация
README: четыре модели в таблицу ONNX-моделей. Для русского без пунктуации README: поддерживаемые модели добавляются в таблицу ONNX-моделей. Для готового
рекомендуется `gigaam-v3`, для готового читаемого текста — E2E RNN-T, для читаемого русского текста и как модель по умолчанию используется E2E RNN-T,
для русского без пунктуации и LLM-пайплайнов остаётся явный `gigaam-v3`, для
смешанной речи с приоритетом качества — multilingual large. Скорость на слабых смешанной речи с приоритетом качества — multilingual large. Скорость на слабых
CPU не измерялась. Требование Python CPU не измерялась. Требование Python
правится в [`docs/PRD.md`](../PRD.md) — раздел «Требования» и таблица правится в [`docs/PRD.md`](../PRD.md) — раздел «Требования» и таблица
+1 -1
View File
@@ -17,7 +17,7 @@ DEVICE_DEFAULTS: dict[str, dict[str, str]] = {
"openvino": {"model": "medium", "compute_type": "int8"}, "openvino": {"model": "medium", "compute_type": "int8"},
"openvino-gpu": {"model": "medium", "compute_type": "int8"}, "openvino-gpu": {"model": "medium", "compute_type": "int8"},
"openvino-cpu": {"model": "medium", "compute_type": "int8"}, "openvino-cpu": {"model": "medium", "compute_type": "int8"},
"onnx": {"model": "gigaam-v3", "compute_type": "int8"}, "onnx": {"model": "gigaam-v3-e2e-rnnt", "compute_type": "int8"},
} }
# Одно место правды для допустимых ключей конфига # Одно место правды для допустимых ключей конфига
+15
View File
@@ -113,6 +113,21 @@ def test_apply_device_defaults_cpu():
assert result["compute_type"] == "float32" assert result["compute_type"] == "float32"
def test_apply_device_defaults_onnx_uses_readable_model():
defaults = {
"model": "medium",
"language": "ru",
"device": "auto",
"compute_type": "float32",
}
cli = {"model": None, "language": None, "device": None, "compute_type": None}
result = apply_device_defaults(defaults, "onnx", cli, {})
assert result["model"] == "gigaam-v3-e2e-rnnt"
assert result["compute_type"] == "int8"
def test_apply_device_defaults_cli_overrides(): def test_apply_device_defaults_cli_overrides():
defaults = {"model": "large-v3", "language": "ru", "device": "auto", "compute_type": "int8"} defaults = {"model": "large-v3", "language": "ru", "device": "auto", "compute_type": "int8"}
cli = {"model": "large-v3", "language": None, "device": None, "compute_type": "int8"} cli = {"model": "large-v3", "language": None, "device": None, "compute_type": "int8"}