diff --git a/README.md b/README.md index 4a7d608..a2db285 100644 --- a/README.md +++ b/README.md @@ -229,8 +229,8 @@ language = "en" - **По умолчанию:** `medium` — хороший баланс скорости и качества - **Макс. качество (NVIDIA):** `large-v3` + `--compute-type float16` - **Макс. качество (Intel GPU):** `large-v3` + `--device openvino-gpu` -- **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации) -- **CPU с пунктуацией (русский):** `--device onnx --model parakeet-v3 --language ru` (12-20× RTF, возможны ``) +- **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации; рекомендуется LLM-нормализация терминов после) +- **CPU с пунктуацией (русский):** `--device openvino-cpu --model medium` (5-6× RTF; для встреч ≤30 мин с равномерной громкостью — на длинных файлах с тихими фрагментами возможны галлюцинации) - **Быстрый тест:** `tiny` — для проверки пайплайна
@@ -253,7 +253,7 @@ language = "en" | `gigaam-v3` | ~300 MB | 17-29× | ru | ❌ | | `parakeet-v3` | ~600 MB | 12-20× | 25 языков | ✅ | -> **Рекомендация**: для русского — `gigaam-v3` (быстрее, чище). Для мультиязыка или пунктуации — `parakeet-v3 --language ru`. Подробнее в [ADR-005](docs/adr/005-onnx-asr-backend.md). +> **Рекомендация**: для русского — `gigaam-v3` (единственный из onnx-моделей, дающий пригодный для конспекта транскрипт на русских встречах; см. [ADR-006](docs/adr/006-onnx-asr-backend.md)). `parakeet-v3` уместен только для англоязычного / multilingual контента — на русском воспроизводит проблемы из [ADR-005](docs/adr/005-parakeet-evaluation.md) (Mm-hmm-редукция тихих реплик, иноязычные вставки).
diff --git a/docs/adr/005-onnx-asr-backend.md b/docs/adr/005-onnx-asr-backend.md deleted file mode 100644 index cb68bcb..0000000 --- a/docs/adr/005-onnx-asr-backend.md +++ /dev/null @@ -1,63 +0,0 @@ -# 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)** | ✅ | Хорошо | ✅ | Пунктуация, `` токены, ловит англ. вкрапления | -| 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`. С пунктуацией, но возможны `` токены. - -Обе модели в 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-бэкендом | -| Интеграция в авто-детект | Экспериментальный бэкенд, не хотим сюрпризов у пользователей | diff --git a/docs/adr/006-onnx-asr-backend.md b/docs/adr/006-onnx-asr-backend.md new file mode 100644 index 0000000..c9b3ddb --- /dev/null +++ b/docs/adr/006-onnx-asr-backend.md @@ -0,0 +1,135 @@ +# ADR-006: onnx-asr бэкенд — GigaAM v3 как CPU-default для русских встреч + +**Статус**: Принято +**Дата**: 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 качестве для русского языка. + +[ADR-005](005-parakeet-evaluation.md) ранее отклонил 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/.{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](005-parakeet-evaluation.md), воспроизводятся на новом наборе файлов: + +**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 как экспериментальный бэкенд с явным `--device onnx`. GigaAM v3 — рекомендуемая модель для русских встреч на CPU.** + +Бэкенд **не в auto-detect** — только при явном указании пользователем (политика experimental backend, как для openvino). + +Модели: +- **`gigaam-v3`** — рекомендуемая для русских встреч на CPU. 17-29× RTF, summary utility 4/5 на всех протестированных файлах. Без пунктуации, без латиницы; ошибки локальны, чинятся LLM-нормализацией. +- **`parakeet-v3`** — multilingual (25 языков), формально доступен. **Не рекомендуется для русских встреч**: Mm-hmm-редукция и иноязычные вставки воспроизводятся систематически (см. выше). Уместен только для англоязычного контента. + +Обе модели в int8-квантизации (~300 MB). + +## Последствия + +- Пользователи CPU-only с русскоязычным контентом получают 3-5× ускорение по сравнению с OpenVINO medium **при превосходящем качестве** (4/5 vs 1-2/5 summary utility на длинных файлах). +- Whisper medium (`--device openvino-cpu`) **остаётся допустимым** для коротких (≤30 мин) встреч с равномерной громкостью; на длинных файлах с тихими участками он галлюцинирует целыми блоками — этот риск зафиксирован, но решение не выводит OpenVINO из списка дефолтов (часть пользователей всё ещё нуждается в пунктуации, и для коротких файлов галлюцинации не воспроизводятся). +- Parakeet-v3 формально доступен, но в README рекомендуется только для англоязычного контента — для русского явно не годится. +- GPU faster-whisper large-v3 остаётся эталоном по качеству (для пользователей с NVIDIA GPU). +- Пост-процессинг GigaAM-транскрипта LLM-этапом нормализации (восстановление латинских терминов и имён компаний) — рекомендуемая практика для финального конспекта. + +## Открытые вопросы / следующие шаги + +- **Galлюцинации Whisper medium на длинных файлах** — отдельный продуктовый риск, требующий собственного исследования. Возможно, имеет смысл ограничить максимальную длину чанка для openvino-medium, или дать предупреждение пользователю. +- **GigaAM v3 RNN-T** (вариант `gigaam-v3-rnnt` вместо `gigaam-v3-ctc`) — заявлен как немного качественнее CTC, не тестировался. Может закрыть часть GigaAM-ошибок на латинице. +- **Canary** (`nemo-canary-1b-v2`) — тяжелее, но multilingual + пунктуация. Кандидат на «лучшее качество за разумную скорость» для тех, кому важна пунктуация. +- **Auto-detect onnx**: после стабилизации в production-использовании (несколько недель) — рассмотреть включение в auto-detect как первый CPU-бэкенд (ниже CUDA, выше OpenVINO). + +## Отклонённые альтернативы + +| Альтернатива | Почему отклонена | +|---|---| +| NeMo Parakeet напрямую (без onnx-asr) | Требует PyTorch + CUDA, Python ≥ 3.12, ~2 GB зависимостей — слишком тяжело для CLI | +| Замена faster-whisper на onnx-asr | faster-whisper поддерживает 99+ языков и пунктуацию, остаётся лучшим GPU-бэкендом | +| GigaAM как auto-detect default | Экспериментальный бэкенд, политика — не сюрпризить существующих пользователей; включение в auto-detect — после периода стабилизации | +| Parakeet-v3 как multilingual default | Воспроизведённые проблемы из ADR-005 (Mm-hmm-редукция, иноязычные вставки) делают его непригодным для русского; для других языков не валидировано в этом эксперименте |