Files
local-transcriber/docs/adr/006-onnx-asr-backend.md
T
Dmitriy Dementiev 136e93765c feat(auto): выбран ONNX по умолчанию без CUDA
- Зачем:
  - пользователям без NVIDIA нужен самый быстрый и читаемый CPU-профиль без дополнительных параметров.
- Что:
  - auto-политика изменена на CUDA при наличии nvidia-smi, иначе ONNX GigaAM RNN-T int8.
  - сохранён приоритет явных значений CLI и конфигурации для OpenVINO и FasterWhisper CPU.
  - обновлены тесты, README, PRD, ADR, GPU-документация и вывод benchmark.
- Проверка:
  - uv run pytest -q: 232 passed, 1 skipped.
  - uv lock --check и git diff --cached --check.
2026-08-12 10:45:05 +03:00

14 KiB
Raw Blame History

ADR-006: GigaAM RNN-T как модель по умолчанию для ONNX-пути

Статус: Принято Дата: 2026-04-25 Обновлено: 2026-08-12

Контекст

Целевая аудитория local-transcriber — пользователи с Intel iGPU / CPU, без дискретного NVIDIA GPU. Существующие CPU-бэкенды (faster-whisper, OpenVINO) дают 0.5-6x RTF для средних моделей — транскрипция часовой записи занимает 10-120 минут.

onnx-asr — легковесная обёртка (onnxruntime + numpy) над ONNX-моделями Parakeet, GigaAM, FastConformer и Canary. Заявляет 30-90x RTF на CPU при сравнимом с Whisper качестве для русского языка.

ADR-005 ранее отклонил Parakeet TDT 0.6B v3 для целевого use case на двух 15-минутных файлах с тихим микрофоном менти и плотной IT-терминологией. ADR-006 повторяет эксперимент на новом наборе файлов (22-81 мин, разной громкости), добавляет GigaAM v3 как кандидата для русской речи и проверяет три класса проблем Parakeet из ADR-005 на актуальном материале.

Эксперимент

Три реальных русскоязычных записи установочных встреч (формат ментор↔менти, mp4, 22-81 мин), ноутбук с Intel i7-11800H (CPU-only). Сравнивались три CPU-бэкенда:

  • gigaam-v3 (onnx-asr GigaAM v3 CTC, int8, monolingual ru, без пунктуации)
  • parakeet-v3 (onnx-asr Parakeet TDT 0.6B v3, int8, multilingual)
  • ov-medium (OpenVINO Whisper medium int8) — baseline

Качественная оценка проведена независимым agent-judge'ем по методологии ADR-005 (4 критерия: completeness / term accuracy / fluency / summary utility, шкала 1-5). Транскрипты сохранены в /mnt/c/ddmitry/Videos/OBS/<basename>.{onnx-gigaam,parakeet-v3,ov-medium}.md и доступны для верификации.

Скорость

Файл Длит. gigaam-v3 parakeet-v3 --ru OpenVINO medium
10-59-59 22:26 81с (16.6×) 116с (11.6×) 265с (5.1×)
Vasya 45:51 95с (29×) 138с (20×) 455с (6×)
12-02-37 1:20:44 170с (28.5×) 251с (19.3×) 779с (6.2×)

GigaAM в 3-5× быстрее OpenVINO medium, Parakeet в 2.5-3.5× быстрее.

Качество (agent-judge, 1-5)

Файл Backend Completeness Term accuracy Fluency Summary utility
10-59-59 gigaam 5 4 4 4
10-59-59 parakeet 4 2 2 2
10-59-59 ov-medium 3 4 4 2
Vasya gigaam 3 4 4 4
Vasya parakeet 2 2 2 2
Vasya ov-medium 2 3 2 2
12-02-37 gigaam 4 3 3 4
12-02-37 parakeet 3 2 1 1
12-02-37 ov-medium 2 3 2 1

GigaAM — единственный backend, дающий summary utility 4/5 на всех трёх файлах. Parakeet и ov-medium систематически уступают по разным причинам (см. ниже).

Класс ошибок: Parakeet — три проблемы из ADR-005 воспроизведены

Все три класса систематических ошибок Parakeet, описанные в ADR-005, воспроизводятся на новом наборе файлов:

1. Mm-hmm/Yeah-редукция тихих реплик менти. Массово на всех трёх файлах:

  • Vasya [04:56-09:33] блок из ~10 реплик: Mm-hmm. Mm-hmm. Mm. That's nice. Mm-hmm. Mm-hmm. — полностью утеряны ответы менти на вопросы ментора.
  • 10-59-59 [19:03] Yeah. Иногда лучше дышали в облаке.
  • 12-02-37 [00:00:01] I mean. вместо «не пони…».

2. Вставки иностранных языков посреди русского. На этом наборе ещё агрессивнее, чем в ADR-005 (там был только польский):

  • 10-59-59 [00:08] Secondo, Alice. The mutual microphone. — итальянский+английский для «секунду, Алиса, замьючен микрофон».
  • 10-59-59 [22:02] Ah si va sur. Well. — испано-французская смесь в финальном прощании.
  • Vasya [27:31] Mas o żegnienie. — польский в полностью русской встрече.
  • 12-02-37 [10:38] Запроси к Każdemu Actually, таблица классная — русско-польско-английский в одной фразе.
  • 12-02-37 [01:03:23] No już je wsie. — польский («ну уже всё»).

3. Искажение IT-терминов и имён компаний:

  • 10-59-59 [02:21] не Аринадата и не Терринте игра вместо «Аренадата и Тере-Интегра» (имена работодателей).
  • 10-59-59 [01:23] Запромбанке (с unk-токенами) вместо «Газпромбанк».
  • 12-02-37 [02:35] Basic space clear cause вместо «база данных кликхаус».
  • 12-02-37 [06:12] Поскре это не колочный, чтобы это греплан. Ловочная. — Postgres/Greenplum/«колоночная» искажены до неразборчивости.
  • 12-02-37 [16:53] своеобресть вместо «Wildberries» — целевой работодатель в задаче, имя потеряно.

Класс ошибок: Whisper medium — галлюцинации на длинных файлах с тихими фрагментами

Не описано в ADR-005 (там были 15-минутные отрывки) — обнаружено только на длинных файлах:

  • 12-02-37 [01:03:43-01:20:14]17 минут хвоста встречи забиты галлюцинированными повторами: «Вместе с вами мы решим, как мы будем работать с вами», «Это не то, чтобы не было», «Выбор? Нет. Выбор? Нет.». Бытовая часть встречи целиком потеряна.
  • 12-02-37 [19:54-20:49] — 11 повторов «И вот, как я вам рассказываю, это очень интересно» вместо реального решения SQL-задачи.
  • Vasya [10:08-11:59] — ~6 повторов «Но если вы хотите, чтобы мы не разговаривали, то вы можете.» (~2 минуты галлюцинации).
  • Vasya [36:00-36:30] — 14 повторов «Ага. Ага.» (loop).
  • Vasya [45:51]«Субтитры сделаны с помощью СМС, аппарата — Лариса.» — классический Whisper-артефакт «титров».
  • 10-59-59 [10:56-11:40] — строка из ~1000 символов «ааааа…» — галлюцинация на тихом фрагменте, проглатывает 30 секунд аудио.
  • 12-02-37 [01:18:47] — приписан несуществующий человек «Валерий Сюткин».

Это критичный класс ошибок: текст выглядит правдоподобно, и читатель конспекта не отличит галлюцинацию от реального содержания без возврата к аудио. Хуже потери — потому что вводит в заблуждение.

Класс ошибок: GigaAM — локальные искажения латиницы и имён

GigaAM monolingual ru, латиницу не выдаёт. На транскрипте:

  • «эскель»/«эсквель» вместо SQL (везде кириллицей).
  • «гитам ардауна» вместо git и markdown (Vasya [14:14]).
  • «арендата»/«арендат»/«арендода» для «Аренадата» (10-59-59 [02:21]) — три разных варианта одного имени.
  • «дв один» вместо DEV1 (12-02-37 [00:50:56]).
  • «яндекс тим под яндекс тим» для «Яндекс ТимКод» (12-02-37 [00:14:15]).

Mm-hmm-редукция и иностранные вставки не обнаружены: monolingual архитектура исключает language-confusion, тихие реплики менти остаются как русские «угу/да/ну».

Эти ошибки локальны, предсказуемы и легко чинятся LLM-этапом нормализации без знания исходного аудио (восстановить SQL, Greenplum, ClickHouse, имена компаний из контекста).

Решение

Принять onnx-asr как CPU-бэкенд автоматического профиля. GigaAM v3 E2E RNN-T — модель по умолчанию на машинах без CUDA.

Порядок --device auto: CUDA при наличии nvidia-smi, иначе ONNX. OpenVINO и FasterWhisper CPU остаются доступными через явный CLI-аргумент или конфиг.

Модели:

  • gigaam-v3-e2e-rnnt — модель по умолчанию: практически равна обычному GigaAM по скорости, немного уступает по WER, но выдаёт готовую пунктуацию для пользователей, которые читают транскрипт напрямую.
  • gigaam-v3 — явный профиль для последующей машинной обработки. 17-29× RTF, summary utility 4/5 на всех протестированных файлах. Без пунктуации и латиницы; ошибки локальны, чинятся LLM-нормализацией.
  • parakeet-v3 — multilingual (25 языков), формально доступен. Не рекомендуется для русских встреч: Mm-hmm-редукция и иноязычные вставки воспроизводятся систематически (см. выше). Уместен только для англоязычного контента.

Все перечисленные модели доступны в int8-квантизации.

Последствия

  • Пользователи 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 мин) встреч с равномерной громкостью; на длинных файлах с тихими участками он может галлюцинировать целыми блоками.
  • Parakeet-v3 формально доступен, но в README рекомендуется только для англоязычного контента — для русского явно не годится.
  • GPU faster-whisper large-v3 остаётся эталоном по качеству (для пользователей с NVIDIA GPU).
  • Пост-процессинг GigaAM-транскрипта LLM-этапом нормализации (восстановление латинских терминов и имён компаний) — рекомендуемая практика для финального конспекта.

Открытые вопросы / следующие шаги

  • Galлюцинации Whisper medium на длинных файлах — отдельный продуктовый риск, требующий собственного исследования. Возможно, имеет смысл ограничить максимальную длину чанка для openvino-medium, или дать предупреждение пользователю.
  • Canary (nemo-canary-1b-v2) — тяжелее, но multilingual + пунктуация. Кандидат на «лучшее качество за разумную скорость» для тех, кому важна пунктуация.
  • Проверить профиль на других языках и при необходимости добавить явные многоязычные рекомендации; автоматическая политика намеренно не зависит от языка.

Отклонённые альтернативы

Альтернатива Почему отклонена
NeMo Parakeet напрямую (без onnx-asr) Требует PyTorch + CUDA, Python ≥ 3.12, ~2 GB зависимостей — слишком тяжело для CLI
Замена faster-whisper на onnx-asr faster-whisper поддерживает 99+ языков и пунктуацию, остаётся лучшим GPU-бэкендом
Parakeet-v3 как multilingual default Воспроизведённые проблемы из ADR-005 (Mm-hmm-редукция, иноязычные вставки) делают его непригодным для русского; для других языков не валидировано в этом эксперименте