Benchmarks
Un RTF (factor en tiempo real) inferior a 1.0 significa más rápido que el tiempo real.
Apple Silicon (MLX + CoreML)
Todos los benchmarks se han ejecutado en M2 Max, 64 GB, macOS 14 con compilaciones de release y metallib compilada.
ASR — Tasa de error de palabra
Evaluado en LibriSpeech test-clean (2620 enunciados, ~5.4 horas de voz leída en inglés).
| Modelo | Bits | Tamaño | WER% | RTF |
|---|---|---|---|---|
| Qwen3-ASR 1.7B | 8-bit | 2.3 GB | 2.35 | 0.090 |
| Qwen3-ASR 1.7B | 4-bit | 1.2 GB | 2.57 | 0.045 |
| Parakeet TDT 0.6B | INT8 | 634 MB | 2.74 | 0.089 |
| Qwen3-ASR 0.6B | 8-bit | 960 MB | 2.80 | 0.025 |
| Qwen3-ASR 0.6B | 4-bit | 675 MB | 3.34 | 0.023 |
Comparación con modelos publicados
| Modelo | Parámetros | Tamaño | Precisión | WER% | Fuente |
|---|---|---|---|---|---|
| Qwen3-ASR 1.7B | 1.7B | 2.3 GB | 8-bit | 2.35 | Este benchmark |
| Whisper Large v3 Turbo | 809M | 1.6 GB | FP16 | 2.5 | OpenAI (2024) |
| Qwen3-ASR 1.7B | 1.7B | 1.2 GB | 4-bit | 2.57 | Este benchmark |
| Whisper Large v3 | 1.5B | 3.1 GB | FP16 | 2.7 | OpenAI (2023) |
| Parakeet TDT 0.6B | 600M | 634 MB | INT8 | 2.74 | Este benchmark |
| Qwen3-ASR 0.6B | 600M | 960 MB | 8-bit | 2.80 | Este benchmark |
| Whisper Medium | 769M | 1.5 GB | FP16 | 3.0 | OpenAI (2022) |
| Qwen3-ASR 0.6B | 600M | 675 MB | 4-bit | 3.34 | Este benchmark |
| Whisper Small | 244M | 483 MB | FP16 | 3.4 | OpenAI (2022) |
Estabilidad en formato largo (carga sostenida del Neural Engine)
200 enunciados de LibriSpeech procesados secuencialmente (~30 min de audio, M2 Max). Comprueba si el WER o la latencia se degradan bajo transcripción sostenida.
| Métrica | Primer 25% | Último 25% | Total |
|---|---|---|---|
| WER% | 1.30 | 1.23 | 2.43 |
| RTF | 0.672 | 0.400 | 0.539 |
No se detecta degradación. El WER es estable a lo largo de la sesión. El RTF incluso mejora a medida que CoreML calienta su caché de plan de ejecución. Sin throttling térmico tras 42 minutos de inferencia continua en el Neural Engine. Parakeet procesa cada fragmento de forma independiente, sin acumular estado entre fragmentos.
Resultados multilingües (FLEURS)
Se usa CER para idiomas CJK (sin fronteras de palabra). Parakeet soporta ~25 idiomas europeos (sin CJK).
| Idioma | Métrica | Qwen3 4-bit | Qwen3 8-bit | Parakeet INT8 |
|---|---|---|---|---|
| Español | WER | 6.44 | 5.06 | 5.18 |
| Inglés | WER | 6.57 | 5.64 | 9.30 |
| Chino | CER | 8.41 | 7.71 | — |
| Alemán | WER | 9.45 | 6.81 | 12.33 |
| Francés | WER | 11.42 | 8.50 | 13.02 |
| Japonés | CER | 16.11 | 8.64 | — |
| Ruso | WER | 16.35 | 10.52 | 11.49 |
| Coreano | WER | 19.95 | 6.89 | — |
| Hindi | WER | 25.93 | 18.57 | — |
| Árabe | WER | 33.47 | 20.31 | — |
Delta de compresión
Pérdida de precisión al cuantizar a anchos de bits menores.
| Variante | WER% | Sustituciones | Inserciones | Eliminaciones | Errores totales | Tamaño |
|---|---|---|---|---|---|---|
| Qwen3 0.6B 8-bit | 2.80 | 1111 | 92 | 268 | 1471 | 960 MB |
| Qwen3 0.6B 4-bit | 3.34 | 1323 | 123 | 308 | 1754 | 675 MB |
| Delta | +0.54 | +212 | +31 | +40 | +283 | -30% |
| Parakeet TDT INT8 | 2.74 | 990 | 125 | 308 | 1423 | 634 MB |
Qwen3-ASR 1.7B 8-bit alcanza un 2.35% WER — superando a Whisper Large v3 Turbo (2.5%) y a Whisper Large v3 (2.7%) mientras se ejecuta a 11× el tiempo real en Apple Silicon.
TTS — Inteligibilidad ida y vuelta
Sintetiza texto, luego transcribe el audio resultante con Qwen3-ASR 0.6B y calcula el WER respecto al texto original. Evaluado sobre 30 frases conversacionales en inglés integradas.
| Motor | Modelo | Parámetros | Tamaño | WER% | RTF |
|---|---|---|---|---|---|
| CosyVoice3 | 0.5B 4-bit | 500M | ~1.9 GB | 3.25 | 0.59 |
| Qwen3-TTS | 1.7B 4-bit | 1.7B | ~2.3 GB | 3.47 | 0.79 |
| Qwen3-TTS | 1.7B 8-bit | 1.7B | ~3.5 GB | 3.66 | 0.85 |
| Kokoro-82M | CoreML | 82M | ~170 MB | 3.90 | 0.17 |
| Qwen3-TTS | 0.6B 8-bit | 600M | ~960 MB | 9.74 | 0.76 |
| Qwen3-TTS | 0.6B 4-bit | 600M | ~675 MB | 15.58 | 0.76 |
Desglose de latencia (Qwen3-TTS)
| Etapa | Tiempo | % del total | Descripción |
|---|---|---|---|
| Embed | 1-3 ms | <1% | Embedding del texto (TTFT) |
| Generate | 2-6 s | ~92% | Tokens de códec autoregresivos |
| Decode | 244-457 ms | ~8% | Decodificador de códec a forma de onda |
Todos los motores TTS se ejecutan más rápido que el tiempo real (RTF < 1.0). CosyVoice3 lidera en inteligibilidad (3.25% WER). Kokoro es el más rápido (RTF 0.17) con tan solo 170 MB.
VAD — Precisión de detección
Evaluación en FLEURS (10 idiomas, 250 archivos)
Evaluado contra la referencia de Python FireRedVAD con el mismo umbral.
| Motor | Parámetros | Backend | 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 |
Evaluación en VoxConverse (multi-hablante)
5 archivos de conversación multi-hablante evaluados con resolución de 10 ms por frame.
| Motor | Parámetros | Backend | 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 |
Comparación con cifras publicadas
| Modelo | F1% | FAR% | MR% | Parámetros | Dataset |
|---|---|---|---|---|---|
| Pyannote (nuestro) | 98.22 | 50.09 | 0.19 | 1.5M | VoxConverse |
| FireRedVAD (paper) | 97.57 | 2.69 | 3.62 | 588K | FLEURS-VAD-102 |
| Silero (nuestro) | 95.98 | 21.02 | 5.88 | 309K | VoxConverse |
| Silero-VAD (paper) | 95.95 | 9.41 | 3.95 | 309K | FLEURS-VAD-102 |
| FireRedVAD (nuestro) | 94.21 | 69.33 | 5.05 | 588K | VoxConverse |
FireRedVAD alcanza un 99.12% F1 en FLEURS con la menor tasa de falsas alarmas (2.52%) y se ejecuta a 135× el tiempo real. Silero v5 ofrece la mejor opción de streaming con 32 ms por fragmento.
Embeddings de hablante
Latencia de extracción
Clip de audio de 20 segundos, 10 iteraciones tras el calentamiento.
| Modelo | Dim | Backend | Latencia |
|---|---|---|---|
| CAM++ (3D-Speaker) | 192 | CoreML (ANE) | 12 ms |
| WeSpeaker ResNet34-LM | 256 | MLX (GPU) | 64 ms |
| WeSpeaker ResNet34-LM | 256 | CoreML (ANE) | 143 ms |
Calidad de los embeddings (VoxConverse)
Similitud del coseno entre embeddings a nivel de segmento de 5 grabaciones multi-hablante. Mayor separación = mejor discriminación de hablantes.
| Modelo | Backend | Intra-hablante | Inter-hablante | Separación |
|---|---|---|---|---|
| WeSpeaker | MLX | 0.726 | 0.142 | 0.584 |
| WeSpeaker | CoreML | 0.726 | 0.143 | 0.582 |
| CAM++ | CoreML | 0.723 | 0.395 | 0.328 |
Los tres motores igualan la referencia Python pyannote (0.577 de separación, similitud del coseno >0.96). WeSpeaker alcanza una separación de 0.584 tanto en MLX como en CoreML. CAM++ se ejecuta 5× más rápido (12 ms frente a 65 ms) con una buena separación (0.328).
Separación de fuentes — SDR
Relación señal-distorsión (SDR) en MUSDB18-HQ (50 pistas de test de duración completa, estéreo a 44.1 kHz). Más alto es mejor. Dos tamaños de modelo: HQ (8.9M parámetros por stem) y L (28.3M parámetros por stem).
| Objetivo | UMX-HQ (MLX) | UMX-L (MLX) | UMX-HQ (publicado) |
|---|---|---|---|
| Voces | 6.23 dB | ~10.5 dB | 6.32 dB |
| Batería | 6.44 dB | ~7.0 dB | 5.73 dB |
| Bajo | 4.56 dB | ~5.5 dB | 5.23 dB |
| Otros | 3.41 dB | ~4.5 dB | 4.02 dB |
| Modelo | Parám/stem | Tamaño | RTF | Velocidad |
|---|---|---|---|---|
| Open-Unmix HQ | 8.9M | 136 MB | 0.23 | 4.3× tiempo real |
| Open-Unmix L | 28.3M | 432 MB | 0.21 | 4.8× tiempo real |
UMX-HQ iguala al SDR publicado en voces y batería con un modelo ligero de 8.9M. UMX-L aporta entre +2 y +4 dB de mejora al triple del tamaño de modelo. Ambos incluyen post-filtrado EM Wiener multicanal y se ejecutan más rápido que el tiempo real en Apple Silicon.
Reproducción
# ASR benchmarks (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 multilingual (FLEURS, auto-download)
python scripts/benchmark_asr.py --dataset fleurs --language en_us --batch
# TTS round-trip
python scripts/benchmark_tts.py --compare
# VAD comparison
python scripts/benchmark_vad.py --compare
# Speaker embeddings comparison
python scripts/benchmark_speaker.py --compare
# Source separation (MUSDB18-HQ, download from Zenodo)
python scripts/benchmark_separation.py --data-dir benchmarks/data/musdb18-hq