From 0b5703a0e366aaba481e72bd495e78c99829db3b Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 19 Apr 2026 01:26:20 +0300 Subject: [PATCH] =?UTF-8?q?docs(adr):=20ADR-005=20=E2=80=94=20Parakeet=20T?= =?UTF-8?q?DT=20=D0=BE=D1=86=D0=B5=D0=BD=D1=91=D0=BD=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=BB=D0=BE=D0=BD=D1=91=D0=BD=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=80=D1=83=D1=81=D1=81=D0=BA=D0=B8=D1=85=20=D0=98=D0=A2-?= =?UTF-8?q?=D0=B2=D1=81=D1=82=D1=80=D0=B5=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - зафиксировать в master результат эксперимента с Parakeet-бэкендом: что проверяли, какие цифры получили, почему оставили Whisper как дефолт. Знания доступны, код — в экспериментальной ветке feature/parakeet-backend. - Что: - docs/adr/005-parakeet-evaluation.md — полный контекст решения: гипотеза, методология, метрики скорости (Parakeet 2.7x быстрее, -35% RAM), качество (Summary utility 2-3/5 vs 4/5 у Whisper), систематические проблемы модели на тихой русской речи, VAD-тюнинг не помог, условия пересмотра решения в будущем (английский / live-captioning / русские specialized-модели через onnx-asr). - docs/gpu.md — короткая заметка под «Потенциальные направления развития» со ссылкой на ADR-005. - Проверка: - cat docs/adr/005-parakeet-evaluation.md. - grep -A5 "Parakeet TDT — проверено" docs/gpu.md. - ветка feature/parakeet-backend сохранена и не удаляется. --- docs/adr/005-parakeet-evaluation.md | 102 ++++++++++++++++++++++++++++ docs/gpu.md | 13 ++++ 2 files changed, 115 insertions(+) create mode 100644 docs/adr/005-parakeet-evaluation.md diff --git a/docs/adr/005-parakeet-evaluation.md b/docs/adr/005-parakeet-evaluation.md new file mode 100644 index 0000000..8a8026a --- /dev/null +++ b/docs/adr/005-parakeet-evaluation.md @@ -0,0 +1,102 @@ +# ADR-005: NVIDIA Parakeet TDT — оценено, отклонено для дефолтного use case + +**Статус**: Отклонено (оставлено в экспериментальной ветке) +**Дата**: 2026-04-19 + +## Контекст + +ADR-003 и ADR-004 зафиксировали стратегию: CTranslate2 на CPU (качество) + +OpenVINO (скорость на x86). Оба бэкенда — Whisper. Возникла гипотеза, что +**NVIDIA Parakeet TDT 0.6B v3** может выйти за пределы этого trade-off: модель +заявлена multilingual (25 языков включая русский), имеет ONNX-порт +[istupakov/parakeet-tdt-0.6b-v3-onnx](https://huggingface.co/istupakov/parakeet-tdt-0.6b-v3-onnx), +работает через `onnx-asr` + Silero VAD. Есть позитивные отзывы (напр. +приложение Handy использует Parakeet для dictation в реальном времени). + +Основное применение проекта — транскрипция русскоязычных ИТ-встреч +(ментор ↔ менти, ~15–60 мин, ноутбучный микрофон). Если Parakeet обойдёт +Whisper medium int8 по скорости при сравнимом качестве, или по качеству при +сравнимой скорости — это основание поменять дефолт. + +## Эксперимент + +Реализован полный бэкенд в ветке `feature/parakeet-backend` (ONNX Runtime CPU EP, +Silero VAD, cache-first model loading). Прогнан автоматический бенчмарк +на двух 15-минутных отрывках реальных установочных встреч +(`scripts/quality_bench.py` в ветке), CPU Intel i7-11800H. + +Качество оценивал агент-судья по шкале 1–5 по критериям completeness / +term accuracy / fluency / summary utility — на пригодность транскрипта +для построения конспекта без возврата к аудио. + +### Скорость и ресурсы + +| Отрывок | Бэкенд | Wall | RTFx | Peak RSS | +|---|---|---|---|---| +| artur-intro (15 мин) | **parakeet-int8** | 129.5s | **6.92x** | 2.21 GB | +| artur-intro (15 мин) | openvino-medium-int8 | 354.2s | 2.54x | 3.50 GB | +| mar15-mid (15 мин) | **parakeet-int8** | 159.6s | **5.64x** | 2.65 GB | +| mar15-mid (15 мин) | openvino-medium-int8 | 428.4s | 2.10x | 3.52 GB | + +**Parakeet в 2.7x быстрее и использует на ~35% меньше RAM.** + +### Качество (Summary utility, 1–5) + +| Отрывок | Parakeet int8 | Whisper medium int8 | +|---|---|---| +| artur-intro | **2** | **4** | +| mar15-mid | **3** | **4** | + +Систематические проблемы Parakeet на русской речи с низкой громкостью: + +1. **Редукция коротких реплик менти до `Mm-hmm`/`Yeah`** — теряется + значительная часть диалога (низкий уровень микрофона менти). +2. **Вставки кусков польского/испанского/немецкого** посреди русской речи + (`Miejsce w sześć zajmie`, `Que salviosa`, `Genial positions`). +3. **Сильное искажение ИТ-терминов и бытовых выражений** — + `Pretty subs` вместо «пройти собес», `Состем основ` вместо «система контроля + версий», `І на глуп Джой` вместо `inner loop join`. + +Whisper medium int8 даёт связный русский текст с нормальной пунктуацией; +искажения присутствуют (`капка` вместо Kafka, одна галлюцинация +«Добро пожаловать в наш канал!» на паузе), но не критичны для конспекта. + +### Попытка тюнинга — Silero VAD threshold + +Гипотеза: дефолтный `threshold=0.5` обрезает тихие реплики менти. Проверено +на 0.5/0.3/0.2 — снижение порога **уменьшает** объём транскрипта +(Parakeet хуже декодирует длинные склеенные сегменты с разреженной речью) +и **не снижает** частоту `Mm-hmm`-редукций. Проблема inherent для модели +на тихом русском диалоге, не артефакт VAD. + +## Решение + +**Parakeet TDT 0.6B v3 не принимается как дефолтный или опциональный бэкенд +для целевого use case.** Whisper medium int8 остаётся предпочтительным — +несмотря на 2.7x проигрыш по скорости, он даёт транскрипт, из которого можно +сделать конспект без возврата к аудио. Для русской речи с варьирующейся +громкостью микрофона Parakeet v3 недостаточно устойчив. + +Код бэкенда **не мержится в master**. Экспериментальная ветка +`feature/parakeet-backend` сохраняется как reference для будущих экспериментов. + +## Последствия + +- Архитектура pluggable backends (ADR-003) подтвердила ценность: интегрировать + и оценить новый бэкенд оказалось недорого. +- Surface area master не растёт: нет `--device parakeet-cpu`, нет зависимости + `onnx-asr`, нет новой ветки в CLI. +- Если в будущем появится интерес — ветка `feature/parakeet-backend` содержит + готовый бэкенд (13 задач, ~19 тестов), скрипты бенчмарка и VAD-тюнинга. + +## Когда стоит пересмотреть решение + +1. **Англоязычный контент** — Parakeet обучался преимущественно на английском, + для native English встреч выигрыш в скорости может окупить качество. +2. **Live-captioning / dictation** (как в Handy) — другой use case, близкий + микрофон + короткие фразы, проблемы редукции неактуальны. +3. **Русские specialized-модели через ту же обвязку** `onnx-asr`: + `gigaam-v3-rnnt` (SberDevices), `nemo-fastconformer-ru-rnnt` (NVIDIA), + `t-one-ctc` (T-Bank). Это отдельная ветка экспериментов, не Parakeet. +4. **Слабые машины с ограниченной RAM** — Parakeet 2.2 GB vs Whisper 3.5 GB + на 15-мин аудио. Если важна RAM-экономия и английский контент. diff --git a/docs/gpu.md b/docs/gpu.md index c9ef601..1dcb67f 100644 --- a/docs/gpu.md +++ b/docs/gpu.md @@ -286,6 +286,19 @@ VAD) доступен только через CTranslate2, т.е. на CPU и NV вариант (включая int8_float32) вызывает галлюцинации — float32 аккумулятор не спасает глубокую модель на GPU. Вывод: **float16 остаётся оптимальным дефолтом для CUDA**. +### NVIDIA Parakeet TDT — проверено, отклонено + +Оценивалась гипотеза: multilingual Parakeet TDT 0.6B v3 через `onnx-asr` может обойти +Whisper medium int8 на x86 CPU. На двух 15-минутных отрывках реальных русских ИТ-встреч +(Intel i7-11800H) Parakeet показал **2.7x преимущество по скорости** и **-35% RAM**, но +**качество ниже** — систематическая редукция тихих реплик менти до `Mm-hmm`, вставки +кусков польского/испанского, сильное искажение ИТ-терминов. Попытка тюнинга Silero VAD +threshold не помогла — проблема inherent для модели на тихой русской речи. + +Код бэкенда не вмержен в master; эксперимент сохранён в ветке +`feature/parakeet-backend`. Подробности и когда стоит пересмотреть — +[ADR-005](adr/005-parakeet-evaluation.md). + ## Troubleshooting ### CUDA не обнаружен