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
# Повышенная точность смешанной речи (медленнее, ~590 MB)
transcribe meeting.wav --device onnx --model gigaam-multilingual-large-ctc
# Сохранить в конкретный файл
transcribe interview.m4a --output result.md
```
@@ -280,24 +283,28 @@ language = "en"
| Модель | Размер (int8) | RTFx CPU | Языки | Пунктуация |
|--------|--------------|----------|-------|-----------|
| `gigaam-v3` | ~300 MB | 17-29× | ru | ❌ |
| `gigaam-multilingual-ctc` | ~300 MB | 10,5×* | ru, en, kk, ky, uz | ❌ |
| `gigaam-v3-e2e-ctc` | ~300 MB | 12,3×* | ru | |
| `gigaam-v3-e2e-rnnt` | ~300 MB | 11,7×* | ru | ✅ |
| `gigaam-multilingual-ctc` | ~300 MB | 10,0×* | ru, en, kk, ky, uz | ❌ |
| `gigaam-multilingual-large-ctc` | ~590 MB | 4,8×* | ru, en, kk, ky, uz | |
| `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 языков | ✅ |
\* Наблюдение на AMD Ryzen 7 8845H, Windows, `int8`, запись 14:51. Это не
приёмочный замер для целевого Intel Core i5. Методика и качественное сравнение:
\* Наблюдение на AMD Ryzen 7 8845H, Windows, `int8`, три записи общей
длительностью 43:37. Это не приёмочный замер для целевого Intel Core i5.
Методика и качественное сравнение:
[benchmark GigaAM и Whisper](docs/benchmarks/2026-08-11-gigaam-model-comparison.md).
> **Рекомендация**: для готового читаемого русского текста
> используйте `gigaam-v3-e2e-rnnt`, для последующей машинной обработки — более
> точный по словам `gigaam-v3` без пунктуации. Вывод проверен на трёх реальных
> записях общей длительностью 43:37. `parakeet-v3` на русском воспроизводит
> проблемы из [ADR-005](docs/adr/005-parakeet-evaluation.md).
> точный по словам `gigaam-v3` без пунктуации. Для смешанной речи с приоритетом
> качества используйте `gigaam-multilingual-large-ctc`: она примерно вдвое
> медленнее small-варианта, но приблизилась к monolingual GigaAM по WER.
> `parakeet-v3` на русском воспроизводит проблемы из
> [ADR-005](docs/adr/005-parakeet-evaluation.md).
GigaAM Multilingual сама распознаёт русский, английский, казахский, кыргызский и
узбекский внутри одной записи. `onnx-asr` не передаёт этой модели подсказку
языка, поэтому `--language` не управляет её выбором языка.
Обе GigaAM Multilingual сами распознают русский, английский, казахский,
кыргызский и узбекский внутри одной записи. `onnx-asr` не передаёт этим моделям
подсказку языка, поэтому `--language` не управляет выбором языка.
Для моделей из таблицы опубликованы `int8` и `float32`. Если неявный
device-aware дефолт недоступен для выбранной модели, CLI сообщит о подстановке
+6 -1
View File
@@ -10,6 +10,11 @@
### Переоценка 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 нестабилен на
длинных записях с тихими участками: модель генерирует правдоподобные повторы и
несуществующий текст. На файле `2026-07-29 13-58-39.mp4` разговор заканчивается
@@ -28,7 +33,7 @@
Python 3.10.
Шаг 1 в части onnx-пути вынесен в отдельную работу —
[спека «Onnx-каталог, Python 3.13 и границы версий»](specs/2026-08-11-onnx-model-catalog.md): движок
обновляется, три модели становятся поддерживаемыми, дефолт и OpenVINO не
обновляется, четыре модели становятся поддерживаемыми, дефолт и OpenVINO не
трогаются намеренно, чтобы сохранить точку отсчёта для будущего сравнения.
2. После интеграционных тестов провести сравнительный бенчмарк моделей. Не
менять CPU-дефолт только по model card или результату на одном файле.
@@ -5,6 +5,7 @@
**Статус:** завершённый benchmark на трёх записях
**Машина:** AMD Ryzen 7 8845H, Windows, CPU
**Квантизация ONNX:** int8
## Цель
@@ -40,6 +41,7 @@
| OpenVINO medium | 190,6 с | 4,67× | **23,9%** | 187 |
| GigaAM v3 | **72,6 с** | **12,27×** | 26,5% | 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 CTC | **72,6 с** | **12,27×** | 31,8% | 338 |
@@ -55,11 +57,13 @@ cached-прогон для точного замера.
|---|---|---:|---:|---:|
| RSQM | GigaAM v3 | 75,1 с | 11,25× | **23,1%** |
| 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 CTC | **71,1 с** | **11,88×** | 28,0% |
| RSQM | FasterWhisper medium | 686,1 с | 1,23× | **19,7%** |
| DataCat | GigaAM v3 | **74,8 с** | **11,79×** | 27,5% |
| 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 CTC | 76,0 с | 11,60× | 28,3% |
| 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 |
| 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 Multilingual CTC | 261,7 с | 10,00× | 26,9% | 0 |
| GigaAM v3 E2E CTC | **219,7 с** | **11,91×** | 29,3% | 305 |
@@ -86,8 +91,10 @@ FasterWhisper включал ещё около 263 секунд загрузки
прогретом кеше — 686,1 и 954,5 секунды соответственно.
RNN-T оказалась лишь на 2% медленнее обычного GigaAM по суммарному времени.
Multilingual медленнее обычного GigaAM на 18%, а выигрыш E2E CTC относительно
RNN-T составляет только 3% и не компенсирует ухудшение текста.
Multilingual Small медленнее обычного GigaAM на 18%, а выигрыш E2E CTC
относительно 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ами`.
- Multilingual CTC не улучшила даже терминологически насыщенный DataCat и
оказалась на 15–26% медленнее обычного GigaAM на новых записях.
- Multilingual Large CTC улучшила Small на всех трёх записях и почти сравнялась
с monolingual GigaAM по совокупному WER: 26,2% против 26,0%. При ручном
чтении скрытой деградации не найдено, но пунктуации по-прежнему нет, а термины
передаются преимущественно фонетически (`файнбиай`, `найфай`, `терадата`).
Длинных автономных галлюцинаций не найдено. Есть локальные потенциально
опасные искажения имён и терминов: `Иришка`, `Lutriness`, «расчёт
@@ -131,8 +142,11 @@ FasterWhisper лучше сохраняет `API`, `ETL`, `Open Platform`; об
- Для последующей машинной обработки, поиска или собственной расстановки
пунктуации — `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 остаётся выбором для важных записей с плотной
терминологией, если допустима обработка около realtime. По трём файлам она в
11 раз медленнее GigaAM ради снижения WER примерно на 5–6 процентных пунктов.
+12 -8
View File
@@ -14,9 +14,11 @@
## Что делаем
Снимаем ограничение версии, поднимаем `onnx-asr` до 0.12 и делаем
поддерживаемыми три модели:
поддерживаемыми четыре модели:
- `gigaam-multilingual-ctc` — смешанная речь с англоязычными терминами;
- `gigaam-multilingual-ctc` и `gigaam-multilingual-large-ctc` — смешанная речь
с англоязычными терминами; large добавлена после сравнительного benchmark по
явному решению пользователя;
- `gigaam-v3-e2e-ctc` и `gigaam-v3-e2e-rnnt` — пунктуация и нормализация текста.
Каталог моделей в бэкенде хранит, помимо имени, опубликованные для модели
@@ -142,9 +144,10 @@ Python и зависимости при неизменных моделях —
- **скорость на Intel Core i5 не измерялась.** Замеры делаются на Ryzen 7
8845H и записываются как наблюдение с указанием CPU — для решения о
CPU-дефолте этого недостаточно;
- **качество моделей друг относительно друга не измерялось.** Ручная проверка
отвечает на вопрос «работает ли», а не «лучше ли»; сравнение — отдельная
работа, см. [backlog](../backlog.md).
- **качество моделей измерено предварительно на трёх 14–15-минутных записях.**
Результат фиксирует WER, скорость и ручное чтение, но не заменяет приёмку на
целевом Intel Core i5 и длинных записях; см.
[benchmark](../benchmarks/2026-08-11-gigaam-model-comparison.md).
Пошаговый чеклист и практика прогона нужны только на время работ и живут в
задаче трекера
@@ -153,8 +156,9 @@ Python и зависимости при неизменных моделях —
## Документация
README: три модели в таблицу ONNX-моделей. Рекомендация остаётся прежней —
`gigaam-v3` для русского — пока нет данных, чтобы её менять; у новых моделей
стоит оговорка, что скорость на слабых CPU не измерялась. Требование Python
README: четыре модели в таблицу ONNX-моделей. Для русского без пунктуации
рекомендуется `gigaam-v3`, для готового читаемого текста — E2E RNN-T, для
смешанной речи с приоритетом качества — multilingual large. Скорость на слабых
CPU не измерялась. Требование Python
правится в [`docs/PRD.md`](../PRD.md) — раздел «Требования» и таблица
технологий; в README версии Python не упоминаются.
@@ -30,6 +30,10 @@ MODEL_CATALOG: dict[str, OnnxModelSpec] = {
"gigaam-multilingual-ctc",
_INT8_AND_FLOAT32,
),
"gigaam-multilingual-large-ctc": OnnxModelSpec(
"gigaam-multilingual-large-ctc",
_INT8_AND_FLOAT32,
),
"gigaam-v3-e2e-ctc": OnnxModelSpec(
"gigaam-v3-e2e-ctc",
_INT8_AND_FLOAT32,
+1
View File
@@ -36,6 +36,7 @@ class TestEnsureModelAvailable:
"model_name",
[
"gigaam-multilingual-ctc",
"gigaam-multilingual-large-ctc",
"gigaam-v3-e2e-ctc",
"gigaam-v3-e2e-rnnt",
],