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:
@@ -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 и вставляет ложные английские фразы в русскую речь;
|
||||||
|
|||||||
@@ -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` остаётся явным профилем.
|
||||||
|
|
||||||
## Воспроизводимость
|
## Воспроизводимость
|
||||||
|
|
||||||
|
|||||||
@@ -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) — раздел «Требования» и таблица
|
||||||
|
|||||||
@@ -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"},
|
||||||
}
|
}
|
||||||
|
|
||||||
# Одно место правды для допустимых ключей конфига
|
# Одно место правды для допустимых ключей конфига
|
||||||
|
|||||||
@@ -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"}
|
||||||
|
|||||||
Reference in New Issue
Block a user