diff --git a/docs/benchmark-2026-03-23.md b/docs/benchmark-2026-03-23.md new file mode 100644 index 0000000..3d815e9 --- /dev/null +++ b/docs/benchmark-2026-03-23.md @@ -0,0 +1,123 @@ +# Бенчмарк: качество и скорость транскрипции + +**Дата**: 2026-03-23 + +## Цель + +Сравнить качество распознавания нашего приложения (local-transcriber) с облачным +сервисом Whisper.ai, подобрать оптимальную конфигурацию бэкенд/модель/compute_type. + +## Тестовый стенд + +- **CPU**: AMD Ryzen 7 8845H w/ Radeon 780M (3.80 GHz), 8 ядер +- **GPU**: нет NVIDIA (нет CUDA), есть встроенный Radeon 780M iGPU + Ryzen AI NPU (XDNA) +- **ОС**: Windows 11 Enterprise +- **Запись**: совещание 3 участников, 14:41, русский язык, микрофон ноутбука + +## Конфигурации + +| # | Модель | Бэкенд | compute_type | Устройство | +|---|--------|--------|--------------|------------| +| 1 | medium | OpenVINO | fp16 | CPU | +| 2 | large-v3 | OpenVINO | fp16 | CPU | +| 3 | medium | CTranslate2 (faster-whisper) | float32 | CPU | +| 4 | medium | CTranslate2 (faster-whisper) | int8_float32 | CPU | +| 5 | — | Whisper.ai (облако) | — | — | + +## Результаты: скорость + +| # | Конфигурация | Время, с | Коэфф. к реалтайму (14:41 = 881с) | +|---|---|---|---| +| 1 | medium, OpenVINO fp16 | **~240** | 0.27x | +| 2 | large-v3, OpenVINO fp16 | ~503 | 0.57x | +| 4 | medium, CT2 int8_float32 | ~599 | 0.68x | +| 3 | medium, CT2 float32 | ~881 | 1.0x | + +## Результаты: качество + +Для оценки выбраны маркерные фразы — технические термины, сложная разговорная речь, +имена собственные. Каждый маркер проверен вручную по контексту записи. + +### Техтермины (английские в русской речи) + +| Термин | #1 OV fp16 | #2 large OV | #3 CT2 f32 | #4 CT2 int8f32 | #5 Whisper.ai | +|--------|-----------|-------------|------------|----------------|---------------| +| DWH | ✅ DWH | ❌ ДВХ | ⚠️ ДВХ | ✅ DWH | ⚠️ dvh | +| Teradata | ✅ TeraData | ⚠️ тирадат | ⚠️ Тирадату | ✅ Teradata | ⚠️ тирадата | +| NiFi | ✅ NiFi | ❌ "на файл" | ⚠️ Найфай | ✅ NiFi | ⚠️ фай | +| FineBI | ✅ fineBI | ❌ "фанбой" | ✅ FNBI | ✅ finebi/FNBI | ⚠️ FineBI/NBI | +| Alation | ❌ "лэйшене" | ❌ "валаши" | ✅ Allation | ✅ Allation | ✅ Allation | +| ETL | ❌ ETA | ❌ "и ты или" | ✅ ETL | ✅ ETL | ✅ ETL | +| DBC Tables V | ✅ | ❌ "деби си" | ✅ | ✅ | ✅ | +| OpenLineage | ⚠️ OpenLinage | ⚠️ "open lineage и о" | ✅ OpenLinage.io | ✅ OpenLinage.io | ✅ Open Lineage.io | + +### Русская разговорная речь + +| Фраза (правильно) | #1 OV fp16 | #2 large OV | #3 CT2 f32 | #4 CT2 int8f32 | #5 Whisper.ai | +|--------------------|-----------|-------------|------------|----------------|---------------| +| "на другую мониторочку" | ❌ "другом не торчка" | ❌ "другому и" | ✅ "мониторчику" | ⚠️ "мою точку" | ✅ "мониторочку" | +| "верхнеуровневое" | ⚠️ "верхверх верхне..." | ✅ | ✅ | ✅ | ✅ | +| "датарентген" | ❌ "госпиталин ген" | ❌ "господа тренды" | ✅ "даторентген" | ✅ "даторентген" | ✅ "датарентген" | +| "девовские схемы" | ✅ | ❌ "девушки схемы" | ✅ | ✅ | ✅ | +| "с накиданными правами" | ✅ | ❌ "накиданных бровами" | ✅ | ✅ | ✅ | +| "Вьюхи" | ❌ "в юхе" | — | ✅ "Вьюхи" | ⚠️ "Yuhi" | ❌ "в юхе" | + +### Структура и пунктуация + +| Аспект | #1 OV fp16 | #2 large OV | #3 CT2 f32 | #4 CT2 int8f32 | #5 Whisper.ai | +|--------|-----------|-------------|------------|----------------|---------------| +| Пунктуация | слабая | слабая | хорошая | хорошая | средняя | +| Длина сегментов | ~1 мин | ~1 мин | ~1 мин | ~1 мин | 2–30 сек | +| Диаризация | нет | нет | нет | нет | есть (условная) | + +## Ключевые выводы + +### 1. OpenVINO fp16 ухудшает качество medium + +OpenVINO даёт **3.7x ускорение**, но fp16-квантизация на CPU вносит заметные ошибки +в распознавание нечёткой русской речи ("госпиталин ген", "ETA"). При этом английские +техтермины (DWH, NiFi, FineBI) распознаются хорошо — видимо, они более «чёткие» +акустически. + +### 2. large-v3 через OpenVINO — хуже medium + +Удивительный результат: large-v3 с OpenVINO fp16 деградировал по всем параметрам. +FineBI → "фанбой", NiFi → "на файл", девовские → "девушки". Гипотеза: fp16 на CPU +бьёт сильнее по большим моделям из-за накопления ошибок округления. + +### 3. CTranslate2 float32 — лучшее качество + +Сравнимо с облачным Whisper.ai, а на некоторых маркерах лучше (Вьюхи, DWH). +Но **3.7x медленнее** OpenVINO — неприемлемо для длинных записей. + +### 4. int8_float32 — оптимальный баланс + +Mixed precision (int8 матрицы, float32 аккумулятор) даёт: +- **1.5x ускорение** vs float32 (599с vs 881с) +- Качество практически идентичное float32 +- Техтермины DWH/Teradata/NiFi даже лучше, чем у float32 + +### 5. Whisper.ai — диаризация как преимущество + +Единственное значимое преимущество облачного сервиса — диаризация спикеров. +По качеству распознавания наше приложение с CT2 int8_float32 на уровне или лучше. + +## Рекомендации + +### Краткосрочно + +- **Дефолт для CPU без CUDA**: рассмотреть `int8_float32` вместо `float32` — 1.5x быстрее + при сопоставимом качестве. +- **OpenVINO fp16 оставить** как быстрый вариант — для случаев, когда скорость важнее + точности (превью, черновые транскрипты). + +### Среднесрочно + +- **DirectML бэкенд** для AMD Radeon iGPU — через onnxruntime-directml можно задействовать + Radeon 780M. Float16 на GPU (в отличие от CPU-квантизации) не должен терять качество. + Потенциально 3–5x ускорение при сохранении качества float32. + +### Долгосрочно + +- **Ryzen AI NPU (XDNA)** — AMD развивает поддержку, но tooling пока сырой. +- **Диаризация** — добавить идентификацию спикеров (pyannote-audio или аналоги).