3 Commits
Author SHA1 Message Date
Dmitriy Dementiev 7f58a56913 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`.
2026-08-11 16:47:09 +03:00
Dmitriy Dementiev a06dbe63a3 docs(benchmark): сравнены GigaAM Large и Parakeet
Зачем:
- зафиксировать сравнение моделей на одном и том же массиве записей
- сохранить воспроизводимый набор файлов для будущих прогонов

Что:
- добавлены метрики и качественный вывод по Parakeet v3
- записаны точные имена, размеры и SHA-256 видео и эталонов
- обновлена рекомендация в README

Проверка:
- git diff --check
2026-08-11 16:28:45 +03:00
Dmitriy Dementiev 8f85930616 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.
2026-08-11 16:12:36 +03:00
9 changed files with 157 additions and 45 deletions
+25 -16
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
``` ```
@@ -248,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-нормализация терминов после)
@@ -280,24 +284,29 @@ 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 | ✅ |
| `parakeet-v3` | ~600 MB | 12-20× | 25 языков | ✅ | | `gigaam-v3-e2e-rnnt` | ~300 MB | 11,5×* | ru | ✅ |
| `parakeet-v3` | ~600 MB | 7,6×* | 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).
> **Рекомендация**: для готового читаемого русского текста > **Рекомендация**: ONNX по умолчанию использует `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` в 1,58 раза быстрее Large и ставит пунктуацию, но на тех же
> трёх записях хуже по WER и вставляет ложные английские фразы в русскую речь;
> это подтверждает проблемы из [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 сообщит о подстановке
+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).
+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
## Цель ## Цель
@@ -29,6 +30,21 @@
Сырые записи и внешние транскрипты не коммитятся в репозиторий. Сырые записи и внешние транскрипты не коммитятся в репозиторий.
### Манифест файлов
На тестовом ноутбуке все файлы находятся в `C:\Users\ddmitry\Videos\OBS`.
Размер и SHA-256 позволяют проверить, что в повторном прогоне используется та
же версия записи или ориентира.
| Набор | Роль | Имя файла | Размер, байт | SHA-256 |
|---|---|---|---:|---|
| BDMA | видео | `2026-07-29 T2 BDMA уточнение задачи от Ильи.mp4` | 19 216 865 | `51866D247FE3EDA134CDD884F707B1F1DB8855B492E8BD14D2B56B62476255ED` |
| BDMA | ориентир | `2026-07-29 T2 BDMA уточнение задачи от Ильи.md` | 18 000 | `9098548743A86F868DFCDD906BCDE34ED1CE5A935602CBE399F4BCEDA8685B3C` |
| RSQM | видео | `2026-02-18 RSQM дейлик внутренний.mp4` | 19 694 785 | `E72000BE43A5E04BFB670B0A16D85D8AEA51A02A285ED778FF5726767E97E9B0` |
| RSQM | ориентир | `2026-02-18 RSQM дейлик внутренний_transcript.md` | 16 128 | `260DF5D6964817434092005936127C0DC2C22682B7CB20FF07D14C5D81B8D287` |
| DataCat | видео | `2026-03-23 T2 DataCat - архитектура в контуре заказчика - первое обсуждение с Машей.mp4` | 22 584 108 | `ACFF960A68AAA6A305F7E7053BB0642B5DA265B68865ABD018E7C9A8980AC3F5` |
| DataCat | ориентир | `2026-03-23 T2 DataCat - архитектура в контуре заказчика - первое обсуждение с Машей-transcript-whsper.md` | 24 874 | `7943944A0A046EAA3A1384CAC47D36B381FBEF2FCFDF18089411619F00725456` |
## Запись 1: уточнение задачи BDMA ## Запись 1: уточнение задачи BDMA
Файл `2026-07-29 T2 BDMA уточнение задачи от Ильи.mp4`, длительность 14:51, Файл `2026-07-29 T2 BDMA уточнение задачи от Ильи.mp4`, длительность 14:51,
@@ -40,6 +56,8 @@
| 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 |
| Parakeet v3 | 119,2 с | 7,47× | 28,2% | 338 |
| 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 +73,15 @@ 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 | Parakeet v3 | 103,7 с | 8,14× | 29,1% |
| 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 | Parakeet v3 | 122,7 с | 7,19× | 27,9% |
| 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,8 +99,10 @@ 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 |
| Parakeet v3 | 345,6 с | 7,57× | 28,3% | 301 |
| GigaAM v3 E2E CTC | **219,7 с** | **11,91×** | 29,3% | 305 | | GigaAM v3 E2E CTC | **219,7 с** | **11,91×** | 29,3% | 305 |
\* Для BDMA использована оценка 871 секунд чистого inference: первый запуск \* Для BDMA использована оценка 871 секунд чистого inference: первый запуск
@@ -86,8 +110,30 @@ 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.
### GigaAM Multilingual Large против Parakeet v3
Large точнее Parakeet на каждой записи: 27,5% против 28,2% WER на BDMA,
23,8% против 29,1% на RSQM и 26,7% против 27,9% на DataCat. В сумме Large
получила 26,2% WER против 28,3%. Особенно заметна разница в пропусках:
103 удаления у Large против 264 у Parakeet.
Parakeet обработала набор за 345,6 секунды против 545,0 секунды у Large, то
есть была в 1,58 раза быстрее, и сразу расставила пунктуацию. Однако ручное
чтение выявило частые ложные переключения языка. В русских репликах RSQM
появляются `Yeah`, `No`, `Just die`, `What foo`; в DataCat — `Don't`,
`Skid of all`, `Talk no`, `Boy`. Это не единичная орфографическая ошибка, а
искажение обычной русской речи. Large в тех же местах сохраняет русский смысл,
хотя передаёт английские термины фонетически и не ставит пунктуацию.
На этом массиве Large предпочтительнее по качеству и сохранности содержания.
Parakeet интересна как более быстрый вариант с пунктуацией, но для русских
встреч требует обязательной ручной проверки и не рекомендуется как основной
профиль.
## Качественное чтение ## Качественное чтение
@@ -109,6 +155,13 @@ 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%. При ручном
чтении скрытой деградации не найдено, но пунктуации по-прежнему нет, а термины
передаются преимущественно фонетически (`файнбиай`, `найфай`, `терадата`).
- Parakeet v3 быстрее Large и выдаёт пунктуацию, но хуже по WER на всех трёх
записях, чаще пропускает слова и вставляет ложные английские фразы в русскую
речь. Для этого массива преимущество в читаемости не компенсирует искажения.
Длинных автономных галлюцинаций не найдено. Есть локальные потенциально Длинных автономных галлюцинаций не найдено. Есть локальные потенциально
опасные искажения имён и терминов: `Иришка`, `Lutriness`, «расчёт опасные искажения имён и терминов: `Иришка`, `Lutriness`, «расчёт
@@ -131,17 +184,23 @@ 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 остаётся вариантом с приоритетом скорости.
- `parakeet-v3` в 1,58 раза быстрее Large и содержит пунктуацию, однако хуже
по WER на всех трёх записях и нестабилен на русской речи. Использовать его
стоит только там, где скорость и готовая пунктуация важнее сохранности текста.
- `gigaam-v3-e2e-ctc` преимуществ на этом наборе не показала.
- FasterWhisper medium остаётся выбором для важных записей с плотной - FasterWhisper medium остаётся выбором для важных записей с плотной
терминологией, если допустима обработка около realtime. По трём файлам она в терминологией, если допустима обработка около realtime. По трём файлам она в
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` остаётся явным профилем.
## Воспроизводимость ## Воспроизводимость
@@ -151,6 +210,8 @@ FasterWhisper лучше сохраняет `API`, `ETL`, `Open Platform`; об
uv run transcribe <recording.mp4> --device onnx --model <model> --compute-type int8 uv run transcribe <recording.mp4> --device onnx --model <model> --compute-type int8
``` ```
Для всех прогонов явно передавался язык `--language ru`.
Время измерялось на прогретом кеше модели. WER считался после удаления Время измерялось на прогретом кеше модели. WER считался после удаления
метаданных и таймкодов, приведения к нижнему регистру, замены `ё` на `е` и метаданных и таймкодов, приведения к нижнему регистру, замены `ё` на `е` и
удаления пунктуации. удаления пунктуации.
+23 -11
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` — пунктуация и нормализация текста.
Каталог моделей в бэкенде хранит, помимо имени, опубликованные для модели Каталог моделей в бэкенде хранит, помимо имени, опубликованные для модели
@@ -81,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 — то, с чем сравниваются новые модели; менять его движок
одновременно значит потерять точку отсчёта. Верхние границы версий им при одновременно значит потерять точку отсчёта. Верхние границы версий им при
@@ -142,9 +151,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 +163,10 @@ Python и зависимости при неизменных моделях —
## Документация ## Документация
README: три модели в таблицу ONNX-моделей. Рекомендация остаётся прежней — README: поддерживаемые модели добавляются в таблицу ONNX-моделей. Для готового
`gigaam-v3` для русского — пока нет данных, чтобы её менять; у новых моделей читаемого русского текста и как модель по умолчанию используется E2E RNN-T,
стоит оговорка, что скорость на слабых CPU не измерялась. Требование Python для русского без пунктуации и LLM-пайплайнов остаётся явный `gigaam-v3`, для
смешанной речи с приоритетом качества — 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 -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"}
+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",
], ],