feat(onnx): добавлена модель GigaAM Multilingual Large

- Зачем:
  - расширенный benchmark показал устойчивое улучшение multilingual large на трёх реальных записях.
- Что:
  - добавлен alias gigaam-multilingual-large-ctc с квантизациями int8 и float32.
  - обновлены README, спецификация, backlog и сравнительный benchmark.
- Проверка:
  - uv run pytest -q: 225 passed, 1 skipped.
  - uvx ruff check src/local_transcriber/backends/onnx_asr.py tests/test_onnx_asr.py.
This commit is contained in:
Dmitriy Dementiev
2026-08-11 16:12:36 +03:00
parent f0d7d06f93
commit 8f85930616
6 changed files with 59 additions and 24 deletions
+18 -11
View File
@@ -124,6 +124,9 @@ transcribe podcast.wav --device onnx --model gigaam-v3-e2e-ctc
# Смешанная русско-английская речь # Смешанная русско-английская речь
transcribe meeting.wav --device onnx --model gigaam-multilingual-ctc transcribe meeting.wav --device onnx --model gigaam-multilingual-ctc
# Повышенная точность смешанной речи (медленнее, ~590 MB)
transcribe meeting.wav --device onnx --model gigaam-multilingual-large-ctc
# Сохранить в конкретный файл # Сохранить в конкретный файл
transcribe interview.m4a --output result.md transcribe interview.m4a --output result.md
``` ```
@@ -280,24 +283,28 @@ language = "en"
| Модель | Размер (int8) | RTFx CPU | Языки | Пунктуация | | Модель | Размер (int8) | RTFx CPU | Языки | Пунктуация |
|--------|--------------|----------|-------|-----------| |--------|--------------|----------|-------|-----------|
| `gigaam-v3` | ~300 MB | 17-29× | ru | ❌ | | `gigaam-v3` | ~300 MB | 17-29× | ru | ❌ |
| `gigaam-multilingual-ctc` | ~300 MB | 10,5×* | ru, en, kk, ky, uz | ❌ | | `gigaam-multilingual-ctc` | ~300 MB | 10,0×* | ru, en, kk, ky, uz | ❌ |
| `gigaam-v3-e2e-ctc` | ~300 MB | 12,3×* | ru | | | `gigaam-multilingual-large-ctc` | ~590 MB | 4,8×* | ru, en, kk, ky, uz | |
| `gigaam-v3-e2e-rnnt` | ~300 MB | 11,7×* | ru | ✅ | | `gigaam-v3-e2e-ctc` | ~300 MB | 11,9×* | ru | ✅ |
| `gigaam-v3-e2e-rnnt` | ~300 MB | 11,5×* | ru | ✅ |
| `parakeet-v3` | ~600 MB | 12-20× | 25 языков | ✅ | | `parakeet-v3` | ~600 MB | 12-20× | 25 языков | ✅ |
\* Наблюдение на AMD Ryzen 7 8845H, Windows, `int8`, запись 14:51. Это не \* Наблюдение на AMD Ryzen 7 8845H, Windows, `int8`, три записи общей
приёмочный замер для целевого Intel Core i5. Методика и качественное сравнение: длительностью 43:37. Это не приёмочный замер для целевого Intel Core i5.
Методика и качественное сравнение:
[benchmark GigaAM и Whisper](docs/benchmarks/2026-08-11-gigaam-model-comparison.md). [benchmark GigaAM и Whisper](docs/benchmarks/2026-08-11-gigaam-model-comparison.md).
> **Рекомендация**: для готового читаемого русского текста > **Рекомендация**: для готового читаемого русского текста
> используйте `gigaam-v3-e2e-rnnt`, для последующей машинной обработки — более > используйте `gigaam-v3-e2e-rnnt`, для последующей машинной обработки — более
> точный по словам `gigaam-v3` без пунктуации. Вывод проверен на трёх реальных > точный по словам `gigaam-v3` без пунктуации. Для смешанной речи с приоритетом
> записях общей длительностью 43:37. `parakeet-v3` на русском воспроизводит > качества используйте `gigaam-multilingual-large-ctc`: она примерно вдвое
> проблемы из [ADR-005](docs/adr/005-parakeet-evaluation.md). > медленнее small-варианта, но приблизилась к monolingual GigaAM по WER.
> `parakeet-v3` на русском воспроизводит проблемы из
> [ADR-005](docs/adr/005-parakeet-evaluation.md).
GigaAM Multilingual сама распознаёт русский, английский, казахский, кыргызский и Обе GigaAM Multilingual сами распознают русский, английский, казахский,
узбекский внутри одной записи. `onnx-asr` не передаёт этой модели подсказку кыргызский и узбекский внутри одной записи. `onnx-asr` не передаёт этим моделям
языка, поэтому `--language` не управляет её выбором языка. подсказку языка, поэтому `--language` не управляет выбором языка.
Для моделей из таблицы опубликованы `int8` и `float32`. Если неявный Для моделей из таблицы опубликованы `int8` и `float32`. Если неявный
device-aware дефолт недоступен для выбранной модели, CLI сообщит о подстановке device-aware дефолт недоступен для выбранной модели, CLI сообщит о подстановке
+6 -1
View File
@@ -10,6 +10,11 @@
### Переоценка CPU-дефолта после обновления `onnx-asr` 0.12 ### Переоценка CPU-дефолта после обновления `onnx-asr` 0.12
**Промежуточный статус 2026-08-11:** короткая матрица на трёх записях завершена
и описана в [benchmark GigaAM и Whisper](benchmarks/2026-08-11-gigaam-model-comparison.md).
Multilingual Large добавлена как явный качественный профиль; решение о default
по-прежнему ждёт целевого Intel Core i5 и длинных негативных примеров.
**Проблема:** текущий CPU-путь через OpenVINO Whisper medium нестабилен на **Проблема:** текущий CPU-путь через OpenVINO Whisper medium нестабилен на
длинных записях с тихими участками: модель генерирует правдоподобные повторы и длинных записях с тихими участками: модель генерирует правдоподобные повторы и
несуществующий текст. На файле `2026-07-29 13-58-39.mp4` разговор заканчивается несуществующий текст. На файле `2026-07-29 13-58-39.mp4` разговор заканчивается
@@ -28,7 +33,7 @@
Python 3.10. Python 3.10.
Шаг 1 в части onnx-пути вынесен в отдельную работу — Шаг 1 в части onnx-пути вынесен в отдельную работу —
[спека «Onnx-каталог, Python 3.13 и границы версий»](specs/2026-08-11-onnx-model-catalog.md): движок [спека «Onnx-каталог, Python 3.13 и границы версий»](specs/2026-08-11-onnx-model-catalog.md): движок
обновляется, три модели становятся поддерживаемыми, дефолт и OpenVINO не обновляется, четыре модели становятся поддерживаемыми, дефолт и OpenVINO не
трогаются намеренно, чтобы сохранить точку отсчёта для будущего сравнения. трогаются намеренно, чтобы сохранить точку отсчёта для будущего сравнения.
2. После интеграционных тестов провести сравнительный бенчмарк моделей. Не 2. После интеграционных тестов провести сравнительный бенчмарк моделей. Не
менять CPU-дефолт только по model card или результату на одном файле. менять CPU-дефолт только по model card или результату на одном файле.
@@ -5,6 +5,7 @@
**Статус:** завершённый benchmark на трёх записях **Статус:** завершённый benchmark на трёх записях
**Машина:** AMD Ryzen 7 8845H, Windows, CPU **Машина:** AMD Ryzen 7 8845H, Windows, CPU
**Квантизация ONNX:** int8 **Квантизация ONNX:** int8
## Цель ## Цель
@@ -40,6 +41,7 @@
| OpenVINO medium | 190,6 с | 4,67× | **23,9%** | 187 | | OpenVINO medium | 190,6 с | 4,67× | **23,9%** | 187 |
| GigaAM v3 | **72,6 с** | **12,27×** | 26,5% | 0 | | GigaAM v3 | **72,6 с** | **12,27×** | 26,5% | 0 |
| GigaAM Multilingual CTC | 84,8 с | 10,51× | 27,9% | 0 | | GigaAM Multilingual CTC | 84,8 с | 10,51× | 27,9% | 0 |
| GigaAM Multilingual Large CTC | 192,0 с | 4,64× | 27,5% | 0 |
| GigaAM v3 E2E RNN-T | 76,1 с | 11,71× | 29,0% | 326 | | GigaAM v3 E2E RNN-T | 76,1 с | 11,71× | 29,0% | 326 |
| GigaAM v3 E2E CTC | **72,6 с** | **12,27×** | 31,8% | 338 | | GigaAM v3 E2E CTC | **72,6 с** | **12,27×** | 31,8% | 338 |
@@ -55,11 +57,13 @@ cached-прогон для точного замера.
|---|---|---:|---:|---:| |---|---|---:|---:|---:|
| RSQM | GigaAM v3 | 75,1 с | 11,25× | **23,1%** | | RSQM | GigaAM v3 | 75,1 с | 11,25× | **23,1%** |
| RSQM | Multilingual CTC | 82,7 с | 10,21× | 24,4% | | RSQM | Multilingual CTC | 82,7 с | 10,21× | 24,4% |
| RSQM | Multilingual Large CTC | 163,4 с | 5,17× | 23,8% |
| RSQM | E2E RNN-T | 72,8 с | 11,60× | 25,4% | | RSQM | E2E RNN-T | 72,8 с | 11,60× | 25,4% |
| RSQM | E2E CTC | **71,1 с** | **11,88×** | 28,0% | | RSQM | E2E CTC | **71,1 с** | **11,88×** | 28,0% |
| RSQM | FasterWhisper medium | 686,1 с | 1,23× | **19,7%** | | RSQM | FasterWhisper medium | 686,1 с | 1,23× | **19,7%** |
| DataCat | GigaAM v3 | **74,8 с** | **11,79×** | 27,5% | | DataCat | GigaAM v3 | **74,8 с** | **11,79×** | 27,5% |
| DataCat | Multilingual CTC | 94,2 с | 9,36× | 27,9% | | DataCat | Multilingual CTC | 94,2 с | 9,36× | 27,9% |
| DataCat | Multilingual Large CTC | 189,6 с | 4,65× | 26,7% |
| DataCat | E2E RNN-T | 78,0 с | 11,31× | **26,4%** | | DataCat | E2E RNN-T | 78,0 с | 11,31× | **26,4%** |
| DataCat | E2E CTC | 76,0 с | 11,60× | 28,3% | | DataCat | E2E CTC | 76,0 с | 11,60× | 28,3% |
| DataCat | FasterWhisper medium | 954,5 с | 0,92× | **21,9%** | | DataCat | FasterWhisper medium | 954,5 с | 0,92× | **21,9%** |
@@ -77,6 +81,7 @@ WER ниже посчитан как micro-average: сумма ошибок по
|---|---:|---:|---:|---:| |---|---:|---:|---:|---:|
| FasterWhisper medium CPU | 2511,6 с* | 1,04× | **20,9%** | 269 | | FasterWhisper medium CPU | 2511,6 с* | 1,04× | **20,9%** | 269 |
| GigaAM v3 | 222,5 с | 11,76× | **26,0%** | 0 | | GigaAM v3 | 222,5 с | 11,76× | **26,0%** | 0 |
| GigaAM Multilingual Large CTC | 545,0 с | 4,80× | **26,2%** | 0 |
| GigaAM v3 E2E RNN-T | 226,9 с | 11,54× | 26,9% | 290 | | GigaAM v3 E2E RNN-T | 226,9 с | 11,54× | 26,9% | 290 |
| GigaAM Multilingual CTC | 261,7 с | 10,00× | 26,9% | 0 | | GigaAM Multilingual CTC | 261,7 с | 10,00× | 26,9% | 0 |
| GigaAM v3 E2E CTC | **219,7 с** | **11,91×** | 29,3% | 305 | | GigaAM v3 E2E CTC | **219,7 с** | **11,91×** | 29,3% | 305 |
@@ -86,8 +91,10 @@ FasterWhisper включал ещё около 263 секунд загрузки
прогретом кеше — 686,1 и 954,5 секунды соответственно. прогретом кеше — 686,1 и 954,5 секунды соответственно.
RNN-T оказалась лишь на 2% медленнее обычного GigaAM по суммарному времени. RNN-T оказалась лишь на 2% медленнее обычного GigaAM по суммарному времени.
Multilingual медленнее обычного GigaAM на 18%, а выигрыш E2E CTC относительно Multilingual Small медленнее обычного GigaAM на 18%, а выигрыш E2E CTC
RNN-T составляет только 3% и не компенсирует ухудшение текста. относительно RNN-T составляет только 3% и не компенсирует ухудшение текста.
Multilingual Large в 2,08 раза медленнее Small и в 2,45 раза медленнее обычного
GigaAM, но всё ещё в 4,6 раза быстрее FasterWhisper.
## Качественное чтение ## Качественное чтение
@@ -109,6 +116,10 @@ RNN-T составляет только 3% и не компенсирует ух
`иnженter`, `мetднные`, `оrкl`, `линейдgами`. `иnженter`, `мetднные`, `оrкl`, `линейдgами`.
- Multilingual CTC не улучшила даже терминологически насыщенный DataCat и - Multilingual CTC не улучшила даже терминологически насыщенный DataCat и
оказалась на 15–26% медленнее обычного GigaAM на новых записях. оказалась на 15–26% медленнее обычного GigaAM на новых записях.
- Multilingual Large CTC улучшила Small на всех трёх записях и почти сравнялась
с monolingual GigaAM по совокупному WER: 26,2% против 26,0%. При ручном
чтении скрытой деградации не найдено, но пунктуации по-прежнему нет, а термины
передаются преимущественно фонетически (`файнбиай`, `найфай`, `терадата`).
Длинных автономных галлюцинаций не найдено. Есть локальные потенциально Длинных автономных галлюцинаций не найдено. Есть локальные потенциально
опасные искажения имён и терминов: `Иришка`, `Lutriness`, «расчёт опасные искажения имён и терминов: `Иришка`, `Lutriness`, «расчёт
@@ -131,8 +142,11 @@ FasterWhisper лучше сохраняет `API`, `ETL`, `Open Platform`; об
- Для последующей машинной обработки, поиска или собственной расстановки - Для последующей машинной обработки, поиска или собственной расстановки
пунктуации — `gigaam-v3`: лучший совокупный WER среди быстрых ONNX-вариантов пунктуации — `gigaam-v3`: лучший совокупный WER среди быстрых ONNX-вариантов
и более стабильный сырой текст. и более стабильный сырой текст.
- `gigaam-v3-e2e-ctc` и `gigaam-multilingual-ctc` на этой записи преимуществ - Для смешанной речи с приоритетом качества сырого текста —
не показали. `gigaam-multilingual-large-ctc`. Она устойчиво лучше Small и почти равна
monolingual GigaAM по WER, но требует 545 секунд против 262 секунд на том же
наборе. Small остаётся вариантом с приоритетом скорости.
- `gigaam-v3-e2e-ctc` преимуществ на этом наборе не показала.
- FasterWhisper medium остаётся выбором для важных записей с плотной - FasterWhisper medium остаётся выбором для важных записей с плотной
терминологией, если допустима обработка около realtime. По трём файлам она в терминологией, если допустима обработка около realtime. По трём файлам она в
11 раз медленнее GigaAM ради снижения WER примерно на 5–6 процентных пунктов. 11 раз медленнее GigaAM ради снижения WER примерно на 5–6 процентных пунктов.
+12 -8
View File
@@ -14,9 +14,11 @@
## Что делаем ## Что делаем
Снимаем ограничение версии, поднимаем `onnx-asr` до 0.12 и делаем Снимаем ограничение версии, поднимаем `onnx-asr` до 0.12 и делаем
поддерживаемыми три модели: поддерживаемыми четыре модели:
- `gigaam-multilingual-ctc` — смешанная речь с англоязычными терминами; - `gigaam-multilingual-ctc` и `gigaam-multilingual-large-ctc` — смешанная речь
с англоязычными терминами; large добавлена после сравнительного benchmark по
явному решению пользователя;
- `gigaam-v3-e2e-ctc` и `gigaam-v3-e2e-rnnt` — пунктуация и нормализация текста. - `gigaam-v3-e2e-ctc` и `gigaam-v3-e2e-rnnt` — пунктуация и нормализация текста.
Каталог моделей в бэкенде хранит, помимо имени, опубликованные для модели Каталог моделей в бэкенде хранит, помимо имени, опубликованные для модели
@@ -142,9 +144,10 @@ Python и зависимости при неизменных моделях —
- **скорость на Intel Core i5 не измерялась.** Замеры делаются на Ryzen 7 - **скорость на Intel Core i5 не измерялась.** Замеры делаются на Ryzen 7
8845H и записываются как наблюдение с указанием CPU — для решения о 8845H и записываются как наблюдение с указанием CPU — для решения о
CPU-дефолте этого недостаточно; CPU-дефолте этого недостаточно;
- **качество моделей друг относительно друга не измерялось.** Ручная проверка - **качество моделей измерено предварительно на трёх 14–15-минутных записях.**
отвечает на вопрос «работает ли», а не «лучше ли»; сравнение — отдельная Результат фиксирует WER, скорость и ручное чтение, но не заменяет приёмку на
работа, см. [backlog](../backlog.md). целевом Intel Core i5 и длинных записях; см.
[benchmark](../benchmarks/2026-08-11-gigaam-model-comparison.md).
Пошаговый чеклист и практика прогона нужны только на время работ и живут в Пошаговый чеклист и практика прогона нужны только на время работ и живут в
задаче трекера задаче трекера
@@ -153,8 +156,9 @@ Python и зависимости при неизменных моделях —
## Документация ## Документация
README: три модели в таблицу ONNX-моделей. Рекомендация остаётся прежней — README: четыре модели в таблицу ONNX-моделей. Для русского без пунктуации
`gigaam-v3` для русского — пока нет данных, чтобы её менять; у новых моделей рекомендуется `gigaam-v3`, для готового читаемого текста — E2E RNN-T, для
стоит оговорка, что скорость на слабых CPU не измерялась. Требование Python смешанной речи с приоритетом качества — multilingual large. Скорость на слабых
CPU не измерялась. Требование Python
правится в [`docs/PRD.md`](../PRD.md) — раздел «Требования» и таблица правится в [`docs/PRD.md`](../PRD.md) — раздел «Требования» и таблица
технологий; в README версии Python не упоминаются. технологий; в README версии Python не упоминаются.
@@ -30,6 +30,10 @@ MODEL_CATALOG: dict[str, OnnxModelSpec] = {
"gigaam-multilingual-ctc", "gigaam-multilingual-ctc",
_INT8_AND_FLOAT32, _INT8_AND_FLOAT32,
), ),
"gigaam-multilingual-large-ctc": OnnxModelSpec(
"gigaam-multilingual-large-ctc",
_INT8_AND_FLOAT32,
),
"gigaam-v3-e2e-ctc": OnnxModelSpec( "gigaam-v3-e2e-ctc": OnnxModelSpec(
"gigaam-v3-e2e-ctc", "gigaam-v3-e2e-ctc",
_INT8_AND_FLOAT32, _INT8_AND_FLOAT32,
+1
View File
@@ -36,6 +36,7 @@ class TestEnsureModelAvailable:
"model_name", "model_name",
[ [
"gigaam-multilingual-ctc", "gigaam-multilingual-ctc",
"gigaam-multilingual-large-ctc",
"gigaam-v3-e2e-ctc", "gigaam-v3-e2e-ctc",
"gigaam-v3-e2e-rnnt", "gigaam-v3-e2e-rnnt",
], ],