Files
local-transcriber/docs/adr/005-onnx-asr-backend.md
T
ddadmin 854bf55145 docs: задокументировать onnx-бэкенд в README, CLI-help и ADR-005
- Зачем:
  - пользователь должен знать о --device onnx и поддерживаемых моделях.
- Что:
  - CLI help: добавлен onnx в список устройств.
  - README: секция примеров, таблица платформ, device-aware дефолты.
  - ADR-005: результаты parakeet-v3 --language ru, уточнённые рекомендации.
- Проверка:
  - uv run pytest -q (172 passed).
  - uv run transcribe --help показывает onnx.
2026-04-25 23:13:41 +03:00

64 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR-005: onnx-asr бэкенд (Parakeet / GigaAM) — эксперимент и решение
**Статус**: Принято
**Дата**: 2026-04-25
## Контекст
Целевая аудитория `local-transcriber` — пользователи с Intel iGPU / CPU, без дискретного NVIDIA GPU.
Существующие CPU-бэкенды (faster-whisper, OpenVINO) дают 0.5-6x RTF для средних моделей — транскрипция часовой записи занимает 10-120 минут.
[onnx-asr](https://github.com/istupakov/onnx-asr) — легковесная обёртка (onnxruntime + numpy) над ONNX-моделями Parakeet, GigaAM, FastConformer и Canary. Заявляет 30-90x RTF на CPU при сравнимом с Whisper качестве для русского языка.
## Эксперимент
Проведено сравнение на трёх реальных русскоязычных записях встреч (22-81 мин, mp4), ноутбук с Intel i7-11800H (CPU-only).
Сравнивались: **onnx-asr GigaAM v3 CTC** (int8, CPU) против **OpenVINO Whisper medium** (int8, CPU). Эталон — faster-whisper large-v3 на RTX 3060 (GPU).
### Результаты
| Файл | Длит. | gigaam-v3 (CPU) | parakeet-v3 --ru (CPU) | OpenVINO medium (CPU) |
|------|-------|-----------------|----------------------|----------------------|
| 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×) |
### Качество (русская речь, файл 12-02-37)
| Модель | Пунктуация | Читаемость | Контекст | Особенности |
|--------|-----------|-----------|----------|-------------|
| GPU f-whisper large-v3 | ✅ | Отлично | ✅ | — |
| **GigaAM v3 CTC (CPU)** | ❌ | Хорошо | ✅ | Самый быстрый, без пунктуации |
| **Parakeet v3 --ru (CPU)** | ✅ | Хорошо | ✅ | Пунктуация, `<unk>` токены, ловит англ. вкрапления |
| OpenVINO medium (CPU) | ✅ | Хорошо | ✅ | Самый медленный |
GigaAM v3 не расставляет знаки препинания, но контекст разговора полностью сохраняется — пригоден для конспектирования и дальнейшей LLM-обработки. VAD даёт более дробные сегменты (удобнее для навигации). Английскую речь не понимает (модель обучена только на русском).
## Решение
**Оставить onnx-asr как экспериментальный бэкенд.** Доступен через `--device onnx`, не в цепочке авто-детекта.
Модели:
- `gigaam-v3` — по умолчанию для `--device onnx`. Русский, 4.7% WER, 17-29x RTF на CPU. Без пунктуации.
- `parakeet-v3` — мультиязычный (25 языков). 11% WER, 12-20x RTF. Для русского рекомендуется `--language ru`. С пунктуацией, но возможны `<unk>` токены.
Обе модели в int8-квантизации (~300 MB, минимальная потеря качества).
## Последствия
- Пользователи CPU получают 3-5x ускорение для русской речи по сравнению с OpenVINO
- gigaam-v3: максимальная скорость, без пунктуации — пригоден для конспектирования
- parakeet-v3: с пунктуацией, медленнее gigaam на 40%, для русского нужен явный `--language ru`
- Мультиязычные записи требуют `--model parakeet-v3`
- Бэкенд не в авто-детекте — пользователь должен явно указать `--device onnx`
- В будущем: добавить onnx в авто-детект, рассмотреть Canary для лучшего качества
## Отклонённые альтернативы
| Альтернатива | Почему отклонена |
|---|---|
| NeMo Parakeet напрямую | Требует PyTorch + CUDA, Python ≥ 3.12, ~2 GB зависимостей — слишком тяжело для CLI |
| Замена faster-whisper на onnx-asr | faster-whisper поддерживает 99+ языков и пунктуацию, остаётся лучшим GPU-бэкендом |
| Интеграция в авто-детект | Экспериментальный бэкенд, не хотим сюрпризов у пользователей |