Бенчмарки
RTF (real-time factor) ниже 1.0 означает быстрее реального времени.
Apple Silicon (MLX + CoreML)
Все бенчмарки на Apple M5 Pro, 48 ГБ, macOS 25.5, сборка release и скомпилированный metallib.
ASR — Word Error Rate
Оценено на LibriSpeech test-clean (2620 высказываний, ~5.4 часа английской чтецкой речи).
| Engine | Quant | WER% | RTF | xRT | Peak RSS |
|---|---|---|---|---|---|
| Qwen3-ASR 1.7B MLX | 5-bit | 1.32 | 0.027 | 36.4× | 1.92 GB |
| Qwen3-ASR 1.7B MLX | 8-bit | 1.52 | 0.033 | 30.5× | 2.7 GB |
| Qwen3-ASR 0.6B MLX | 8-bit | 1.82 | 0.015 | 66.0× | 1.3 GB |
| Qwen3-ASR 0.6B MLX | 5-bit | 1.74 | 0.014 | 70.5× | 1.03 GB |
| WhisperKit Large-v3 Turbo | FP16 | 1.71 | 0.084 | 11.9× | 0.4 GB |
| WhisperASR native CoreML | FP16 | 1.40 | 0.089 | 14.0× | 384 MB |
| Qwen3-ASR 0.6B MLX | 4-bit | 2.20 | 0.012 | 85.6× | 1.0 GB |
| Parakeet TDT v3 | INT8 | 2.37 | 0.009 | 117.4× | 0.9 GB |
| Qwen3-ASR 0.6B CoreML | INT8 | 3.02 | 0.098 | 10.2× | 1.4 GB |
| Omnilingual CTC 300M MLX | 4-bit | 4.26 | 0.005 | 222.1× | 0.4 GB |
| Omnilingual CTC 300M CoreML | INT8 | 5.67 | 0.128 | 7.8× | 0.5 GB |
| Nemotron Streaming | INT8 | 2.82 | 0.058 | 17.1× | 961 MB |
Главные выводы: Qwen3-ASR MLX 1.7B 5-bit стал новым лидером точности с 1.32% WER: лучше WhisperKit Large-v3 Turbo (1.71%) и нашего 1.7B 8-bit (1.52%), при этом использует примерно на 600 MB меньше peak RSS и работает на 23% быстрее. Parakeet TDT v3 самый быстрый для английского (117× realtime, 25 европейских языков). Omnilingual CTC 300M MLX 4-bit лидирует по мультиязычной пропускной способности: 222× realtime, 384 MB peak, 1 672 языка.
Строка Qwen3-ASR 0.6B CoreML отражает пересобранный chunked block-attention encoder (aufklarer/Qwen3-ASR-CoreML). Предыдущий экспорт запускал unmasked global self-attention по zero-padded mel и выдавал <|im_end|> сразу после первой точки в конце предложения (24.88% WER на том же fixture до rebuild).
Устойчивость на длинных записях (непрерывная нагрузка на Neural Engine)
200 высказываний LibriSpeech обработаны последовательно (~30 мин аудио, M5 Pro). Проверка, деградирует ли WER или задержка при непрерывной транскрипции.
| Метрика | Первые 25% | Последние 25% | Всего |
|---|---|---|---|
| WER% | 1.30 | 1.23 | 2.43 |
| RTF | 0.672 | 0.400 | 0.539 |
Деградация не обнаружена. WER стабилен на протяжении сессии. RTF даже улучшается по мере прогрева кеша плана выполнения CoreML. Без теплового троттлинга после 42 минут непрерывного инференса на Neural Engine. Parakeet обрабатывает каждый чанк независимо — без накопления состояния между чанками.
Многоязычные результаты (FLEURS)
CER используется для языков CJK (без границ слов). Parakeet поддерживает ~25 европейских языков (без CJK).
| Язык | Метрика | Qwen3 4-bit | Qwen3 8-bit | Parakeet INT8 |
|---|---|---|---|---|
| Испанский | WER | 6.44 | 5.06 | 5.18 |
| Английский | WER | 6.57 | 5.64 | 9.30 |
| Китайский | CER | 8.41 | 7.71 | — |
| Немецкий | WER | 9.45 | 6.81 | 12.33 |
| Французский | WER | 11.42 | 8.50 | 13.02 |
| Японский | CER | 16.11 | 8.64 | — |
| Русский | WER | 16.35 | 10.52 | 11.49 |
| Корейский | WER | 19.95 | 6.89 | — |
| Хинди | WER | 25.93 | 18.57 | — |
| Арабский | WER | 33.47 | 20.31 | — |
Дельта от сжатия
Потеря точности от квантизации до меньшей разрядности.
| Вариант | WER% | Замены | Вставки | Удаления | Всего ошибок | Размер |
|---|---|---|---|---|---|---|
| Qwen3 0.6B 8-bit | 2.80 | 1111 | 92 | 268 | 1471 | 960 МБ |
| Qwen3 0.6B 4-bit | 3.34 | 1323 | 123 | 308 | 1754 | 675 МБ |
| Дельта | +0.54 | +212 | +31 | +40 | +283 | -30% |
| Parakeet TDT INT8 | 2.74 | 990 | 125 | 308 | 1423 | 634 МБ |
Qwen3-ASR 1.7B MLX достигает 1.32% WER в 5-bit (1.52% в 8-bit), обходит WhisperKit Large-v3 Turbo (1.71%) и работает на Apple Silicon со скоростью 30-36× realtime.
TTS — разборчивость круговой проверки
Синтезировать текст, затем транскрибировать аудио обратно через Qwen3-ASR 0.6B и вычислить WER относительно исходного текста. Оценено на 30 встроенных английских диалоговых фразах.
| Движок | Модель | Параметры | Размер | WER% | RTF |
|---|---|---|---|---|---|
| CosyVoice3 | 0.5B 4-bit | 500M | ~1.9 ГБ | 3.25 | 0.59 |
| Qwen3-TTS | 1.7B 4-bit | 1.7B | ~2.3 ГБ | 3.47 | 0.79 |
| Qwen3-TTS | 1.7B 8-bit | 1.7B | ~3.5 ГБ | 3.66 | 0.85 |
| Kokoro-82M | CoreML | 82M | ~170 МБ | 3.90 | 0.17 |
| Qwen3-TTS | 0.6B 8-bit | 600M | ~960 МБ | 9.74 | 0.76 |
| Qwen3-TTS | 0.6B 4-bit | 600M | ~675 МБ | 15.58 | 0.76 |
Разбивка задержки (Qwen3-TTS)
| Этап | Время | % от общего | Описание |
|---|---|---|---|
| Embed | 1-3 мс | <1% | Эмбеддинг текста (TTFT) |
| Generate | 2-6 с | ~92% | Авторегрессивные codec-токены |
| Decode | 244-457 мс | ~8% | Codec-декодер в waveform |
Все TTS-движки работают быстрее реального времени (RTF < 1.0). CosyVoice3 лидирует по разборчивости (3.25% WER). Kokoro — самый быстрый (RTF 0.17) при размере всего 170 МБ.
VAD — точность детекции
Оценка на FLEURS (10 языков, 250 файлов)
Оценено относительно референса Python FireRedVAD при одном и том же пороге.
| Движок | Параметры | Бэкенд | F1% | FAR% | MR% | RTF |
|---|---|---|---|---|---|---|
| FireRedVAD | 588K | CoreML (ANE) | 99.12 | 2.52 | 0.47 | 0.007 |
| Silero v5 | 309K | CoreML (ANE) | 95.13 | 15.76 | 1.89 | 0.022 |
| Silero v5 | 309K | MLX (GPU) | 95.11 | 15.85 | 1.89 | 0.027 |
| Pyannote | 1.5M | MLX (GPU) | 94.86 | 14.71 | 2.92 | 0.358 |
Оценка на VoxConverse (многоспикерный)
5 многоспикерных разговорных файлов, оценка с разрешением кадра 10 мс.
| Движок | Параметры | Бэкенд | F1% | FAR% | MR% | RTF |
|---|---|---|---|---|---|---|
| Pyannote | 1.5M | MLX (GPU) | 98.22 | 50.09 | 0.19 | 0.358 |
| Silero v5 | 309K | CoreML (ANE) | 97.52 | 33.29 | 2.69 | 0.022 |
| Silero v5 | 309K | MLX (GPU) | 95.98 | 21.02 | 5.88 | 0.027 |
| FireRedVAD | 588K | CoreML (ANE) | 94.21 | 40.12 | 5.05 | 0.007 |
Сравнение с опубликованными значениями
| Модель | F1% | FAR% | MR% | Параметры | Датасет |
|---|---|---|---|---|---|
| Pyannote (наш) | 98.22 | 50.09 | 0.19 | 1.5M | VoxConverse |
| FireRedVAD (статья) | 97.57 | 2.69 | 3.62 | 588K | FLEURS-VAD-102 |
| Silero (наш) | 95.98 | 21.02 | 5.88 | 309K | VoxConverse |
| Silero-VAD (статья) | 95.95 | 9.41 | 3.95 | 309K | FLEURS-VAD-102 |
| FireRedVAD (наш) | 94.21 | 69.33 | 5.05 | 588K | VoxConverse |
FireRedVAD достигает 99.12% F1 на FLEURS с наименьшей частотой ложных срабатываний (2.52%) и работает в 135 раз быстрее реального времени. Silero v5 — лучший вариант для потокового режима при 32 мс на чанк.
Эмбеддинги спикеров
Задержка извлечения
Аудиоклип 20 секунд, 10 итераций после прогрева.
| Модель | Dim | Бэкенд | Задержка |
|---|---|---|---|
| CAM++ (3D-Speaker) | 192 | CoreML (ANE) | 12 мс |
| WeSpeaker ResNet34-LM | 256 | MLX (GPU) | 64 мс |
| WeSpeaker ResNet34-LM | 256 | CoreML (ANE) | 143 мс |
Качество эмбеддингов (VoxConverse)
Косинусное сходство между сегментными эмбеддингами из 5 многоспикерных записей. Большая разделимость = лучшее различение спикеров.
| Модель | Бэкенд | Внутри спикера | Между спикерами | Разделимость |
|---|---|---|---|---|
| WeSpeaker | MLX | 0.726 | 0.142 | 0.584 |
| WeSpeaker | CoreML | 0.726 | 0.143 | 0.582 |
| CAM++ | CoreML | 0.723 | 0.395 | 0.328 |
Все три движка совпадают с Python-референсом pyannote (разделимость 0.577, косинусное сходство >0.96). WeSpeaker достигает 0.584 разделимости как на MLX, так и на CoreML. CAM++ работает в 5 раз быстрее (12 мс против 65 мс) с хорошей разделимостью (0.328).
Разделение источников — SDR
Signal-to-Distortion Ratio (SDR) на MUSDB18-HQ (50 полнометражных тестовых треков, стерео 44.1 кГц). Больше — лучше. Два размера модели: HQ (8.9M параметров/стем) и L (28.3M параметров/стем).
| Цель | UMX-HQ (MLX) | UMX-L (MLX) | UMX-HQ (опубликованный) |
|---|---|---|---|
| Вокал | 6.23 дБ | ~10.5 дБ | 6.32 дБ |
| Ударные | 6.44 дБ | ~7.0 дБ | 5.73 дБ |
| Бас | 4.56 дБ | ~5.5 дБ | 5.23 дБ |
| Прочее | 3.41 дБ | ~4.5 дБ | 4.02 дБ |
| Модель | Параметры/стем | Размер | RTF | Скорость |
|---|---|---|---|---|
| Open-Unmix HQ | 8.9M | 136 МБ | 0.23 | 4.3x быстрее реального времени |
| Open-Unmix L | 28.3M | 432 МБ | 0.21 | 4.8x быстрее реального времени |
UMX-HQ совпадает с опубликованным SDR по вокалу и ударным при лёгкой модели 8.9M. UMX-L даёт улучшение +2–4 дБ при размере в 3 раза большем. Обе включают многоканальную пост-фильтрацию Wiener EM и работают быстрее реального времени на Apple Silicon.
Android — на устройстве (Galaxy S23)
Измерено на Samsung Galaxy S23 (SM-S918B), arm64, только CPU, INT8 где указано. RTF — это время ÷ аудио (ниже = быстрее реального времени; <1.0 = реальное время); Peak RSS — резидентная память работающей модели. STT использует 20-секундный клип; TTS показывает RTF или время до первого звука (TTFA).
| Model | Task | Runtime | Speed | Peak RSS |
|---|---|---|---|---|
| Parakeet-EOU 120M | Streaming STT + EOU | ONNX INT8 | 0.21 RTF | 232 MB |
| Omnilingual CTC 300M | Multilingual STT | LiteRT | 0.15 RTF | 831 MB |
| Nemotron Streaming 0.6B | Streaming STT | LiteRT | 0.67 RTF | 1.30 GB |
| Parakeet-TDT 0.6B | STT (batch) | ONNX INT8 | 0.082 RTF | 1.15 GB |
| Supertonic-3 99M | TTS (preset voice) | LiteRT | 0.34 RTF · ~1.1 s TTFA | 832 MB |
| Kokoro-82M | TTS (preset voice) | ONNX FP32 | 0.53 RTF | 640 MB |
Итог: Parakeet-EOU-120M — самый лёгкий STT здесь, ~232 МБ: многоязычный (25 европейских языков), потоковый, со встроенным детектированием конца реплики, примерно в 5–6× меньше, чем Parakeet 0.6B. Отключение CPU-арены памяти ONNX (теперь по умолчанию) снизило Parakeet-TDT с ~1.34 ГБ до ~1.15 ГБ.
Воспроизведение
# ASR-бенчмарки (LibriSpeech test-clean)
make build
python scripts/benchmark_asr.py --batch --engine qwen3 --model 0.6B
python scripts/benchmark_asr.py --batch --engine qwen3 --model 0.6B-8bit
python scripts/benchmark_asr.py --batch --engine parakeet
python scripts/benchmark_asr.py --batch --engine parakeet --model int8
# Многоязычный ASR (FLEURS, авто-загрузка)
python scripts/benchmark_asr.py --dataset fleurs --language en_us --batch
# Круговая проверка TTS
python scripts/benchmark_tts.py --compare
# Сравнение VAD
python scripts/benchmark_vad.py --compare
# Сравнение эмбеддингов спикеров
python scripts/benchmark_speaker.py --compare
# Разделение источников (MUSDB18-HQ, скачайте с Zenodo)
python scripts/benchmark_separation.py --data-dir benchmarks/data/musdb18-hq