Benchmarks
Un RTF (facteur temps réel) inférieur à 1,0 signifie plus rapide que le temps réel.
Apple Silicon (MLX + CoreML)
Tous les benchmarks sur M2 Max, 64 Go, macOS 14 avec des builds release et une metallib compilée.
ASR — Taux d'erreur sur les mots
Évalué sur LibriSpeech test-clean (2620 énoncés, ~5,4 heures de parole lue en anglais).
| Modèle | Bits | Taille | WER% | RTF |
|---|---|---|---|---|
| Qwen3-ASR 1.7B | 8 bits | 2,3 Go | 2,35 | 0,090 |
| Qwen3-ASR 1.7B | 4 bits | 1,2 Go | 2,57 | 0,045 |
| Parakeet TDT 0.6B | INT8 | 634 Mo | 2,74 | 0,089 |
| Qwen3-ASR 0.6B | 8 bits | 960 Mo | 2,80 | 0,025 |
| Qwen3-ASR 0.6B | 4 bits | 675 Mo | 3,34 | 0,023 |
Comparaison avec les modèles publiés
| Modèle | Paramètres | Taille | Précision | WER% | Source |
|---|---|---|---|---|---|
| Qwen3-ASR 1.7B | 1,7B | 2,3 Go | 8 bits | 2,35 | Ce benchmark |
| Whisper Large v3 Turbo | 809M | 1,6 Go | FP16 | 2,5 | OpenAI (2024) |
| Qwen3-ASR 1.7B | 1,7B | 1,2 Go | 4 bits | 2,57 | Ce benchmark |
| Whisper Large v3 | 1,5B | 3,1 Go | FP16 | 2,7 | OpenAI (2023) |
| Parakeet TDT 0.6B | 600M | 634 Mo | INT8 | 2,74 | Ce benchmark |
| Qwen3-ASR 0.6B | 600M | 960 Mo | 8 bits | 2,80 | Ce benchmark |
| Whisper Medium | 769M | 1,5 Go | FP16 | 3,0 | OpenAI (2022) |
| Qwen3-ASR 0.6B | 600M | 675 Mo | 4 bits | 3,34 | Ce benchmark |
| Whisper Small | 244M | 483 Mo | FP16 | 3,4 | OpenAI (2022) |
Stabilité en forme longue (charge Neural Engine soutenue)
200 énoncés LibriSpeech traités séquentiellement (~30 min d'audio, M2 Max). Vérifie si le WER ou la latence se dégradent sous transcription soutenue.
| Métrique | Premier 25% | Dernier 25% | Global |
|---|---|---|---|
| WER% | 1,30 | 1,23 | 2,43 |
| RTF | 0,672 | 0,400 | 0,539 |
Aucune dégradation détectée. Le WER reste stable tout au long de la session. Le RTF s'améliore en fait à mesure que CoreML préchauffe son cache de plan d'exécution. Aucune limitation thermique après 42 minutes d'inférence Neural Engine continue. Parakeet traite chaque chunk indépendamment — pas d'accumulation d'état entre chunks.
Résultats multilingues (FLEURS)
CER utilisé pour les langues CJK (pas de séparation de mots). Parakeet prend en charge environ 25 langues européennes (pas de CJK).
| Langue | Métrique | Qwen3 4 bits | Qwen3 8 bits | Parakeet INT8 |
|---|---|---|---|---|
| Espagnol | WER | 6,44 | 5,06 | 5,18 |
| Anglais | WER | 6,57 | 5,64 | 9,30 |
| Chinois | CER | 8,41 | 7,71 | — |
| Allemand | WER | 9,45 | 6,81 | 12,33 |
| Français | WER | 11,42 | 8,50 | 13,02 |
| Japonais | CER | 16,11 | 8,64 | — |
| Russe | WER | 16,35 | 10,52 | 11,49 |
| Coréen | WER | 19,95 | 6,89 | — |
| Hindi | WER | 25,93 | 18,57 | — |
| Arabe | WER | 33,47 | 20,31 | — |
Delta de compression
Perte de précision due à la quantification vers des largeurs en bits inférieures.
| Variante | WER% | Substitutions | Insertions | Suppressions | Erreurs totales | Taille |
|---|---|---|---|---|---|---|
| Qwen3 0.6B 8 bits | 2,80 | 1111 | 92 | 268 | 1471 | 960 Mo |
| Qwen3 0.6B 4 bits | 3,34 | 1323 | 123 | 308 | 1754 | 675 Mo |
| Delta | +0,54 | +212 | +31 | +40 | +283 | -30% |
| Parakeet TDT INT8 | 2,74 | 990 | 125 | 308 | 1423 | 634 Mo |
Qwen3-ASR 1.7B 8 bits atteint 2,35 % de WER — dépassant Whisper Large v3 Turbo (2,5 %) et Whisper Large v3 (2,7 %) tout en s'exécutant à 11× le temps réel sur Apple Silicon.
TTS — Intelligibilité aller-retour
Synthétiser du texte, puis retranscrire l'audio avec Qwen3-ASR 0.6B et calculer le WER par rapport au texte original. Évalué sur 30 phrases conversationnelles anglaises intégrées.
| Moteur | Modèle | Paramètres | Taille | WER% | RTF |
|---|---|---|---|---|---|
| CosyVoice3 | 0.5B 4 bits | 500M | ~1,9 Go | 3,25 | 0,59 |
| Qwen3-TTS | 1.7B 4 bits | 1,7B | ~2,3 Go | 3,47 | 0,79 |
| Qwen3-TTS | 1.7B 8 bits | 1,7B | ~3,5 Go | 3,66 | 0,85 |
| Kokoro-82M | CoreML | 82M | ~170 Mo | 3,90 | 0,17 |
| Qwen3-TTS | 0.6B 8 bits | 600M | ~960 Mo | 9,74 | 0,76 |
| Qwen3-TTS | 0.6B 4 bits | 600M | ~675 Mo | 15,58 | 0,76 |
Décomposition de la latence (Qwen3-TTS)
| Étape | Temps | % du total | Description |
|---|---|---|---|
| Embed | 1-3 ms | <1% | Embedding du texte (TTFT) |
| Generate | 2-6 s | ~92% | Tokens de codec autorégressifs |
| Decode | 244-457 ms | ~8% | Décodeur de codec vers forme d'onde |
Tous les moteurs TTS s'exécutent plus vite que le temps réel (RTF < 1,0). CosyVoice3 est en tête pour l'intelligibilité (3,25 % de WER). Kokoro est le plus rapide (RTF 0,17) à seulement 170 Mo.
VAD — Précision de détection
Évaluation FLEURS (10 langues, 250 fichiers)
Évalué par rapport à la vérité terrain de référence Python FireRedVAD au même seuil.
| Moteur | Paramètres | 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 |
Évaluation VoxConverse (multi-locuteurs)
5 fichiers de conversation multi-locuteurs évalués à une résolution de trame de 10 ms.
| Moteur | Paramètres | 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 |
Comparaison avec les chiffres publiés
| Modèle | F1% | FAR% | MR% | Paramètres | Jeu de données |
|---|---|---|---|---|---|
| Pyannote (nous) | 98,22 | 50,09 | 0,19 | 1,5M | VoxConverse |
| FireRedVAD (article) | 97,57 | 2,69 | 3,62 | 588K | FLEURS-VAD-102 |
| Silero (nous) | 95,98 | 21,02 | 5,88 | 309K | VoxConverse |
| Silero-VAD (article) | 95,95 | 9,41 | 3,95 | 309K | FLEURS-VAD-102 |
| FireRedVAD (nous) | 94,21 | 69,33 | 5,05 | 588K | VoxConverse |
FireRedVAD atteint 99,12 % de F1 sur FLEURS avec le taux de fausses alertes le plus bas (2,52 %) et s'exécute à 135× le temps réel. Silero v5 offre la meilleure option de streaming avec 32 ms par chunk.
Empreintes de locuteur
Latence d'extraction
Clip audio de 20 secondes, 10 itérations après préchauffage.
| Modèle | Dim | Backend | Latence |
|---|---|---|---|
| CAM++ (3D-Speaker) | 192 | CoreML (ANE) | 12 ms |
| WeSpeaker ResNet34-LM | 256 | MLX (GPU) | 64 ms |
| WeSpeaker ResNet34-LM | 256 | CoreML (ANE) | 143 ms |
Qualité des embeddings (VoxConverse)
Similarité cosinus entre embeddings au niveau des segments issus de 5 enregistrements multi-locuteurs. Plus la séparation est élevée, meilleure est la discrimination des locuteurs.
| Modèle | Backend | Intra-locuteur | Inter-locuteur | Séparation |
|---|---|---|---|---|
| WeSpeaker | MLX | 0,726 | 0,142 | 0,584 |
| WeSpeaker | CoreML | 0,726 | 0,143 | 0,582 |
| CAM++ | CoreML | 0,723 | 0,395 | 0,328 |
Les trois moteurs égalent la référence Python pyannote (séparation de 0,577, similarité cosinus > 0,96). WeSpeaker atteint une séparation de 0,584 à la fois sur MLX et CoreML. CAM++ s'exécute 5× plus vite (12 ms contre 65 ms) avec une bonne séparation (0,328).
Séparation de sources — SDR
Rapport signal sur distorsion (SDR) sur MUSDB18-HQ (50 pistes de test complètes, stéréo 44,1 kHz). Plus c'est élevé, mieux c'est. Deux tailles de modèle : HQ (8,9M paramètres/stem) et L (28,3M paramètres/stem).
| Cible | UMX-HQ (MLX) | UMX-L (MLX) | UMX-HQ (publié) |
|---|---|---|---|
| Voix | 6,23 dB | ~10,5 dB | 6,32 dB |
| Batterie | 6,44 dB | ~7,0 dB | 5,73 dB |
| Basse | 4,56 dB | ~5,5 dB | 5,23 dB |
| Autre | 3,41 dB | ~4,5 dB | 4,02 dB |
| Modèle | Paramètres/stem | Taille | RTF | Vitesse |
|---|---|---|---|---|
| Open-Unmix HQ | 8,9M | 136 Mo | 0,23 | 4,3× temps réel |
| Open-Unmix L | 28,3M | 432 Mo | 0,21 | 4,8× temps réel |
UMX-HQ égale le SDR publié sur les voix et la batterie avec un modèle léger de 8,9M. UMX-L apporte une amélioration de +2–4 dB pour 3× la taille du modèle. Les deux incluent un post-filtrage Wiener EM multicanal et s'exécutent plus vite que le temps réel sur Apple Silicon.
Reproduction
# Benchmarks 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 multilingue (FLEURS, téléchargement automatique)
python scripts/benchmark_asr.py --dataset fleurs --language en_us --batch
# Aller-retour TTS
python scripts/benchmark_tts.py --compare
# Comparaison VAD
python scripts/benchmark_vad.py --compare
# Comparaison d'empreintes de locuteur
python scripts/benchmark_speaker.py --compare
# Séparation de sources (MUSDB18-HQ, téléchargeable depuis Zenodo)
python scripts/benchmark_separation.py --data-dir benchmarks/data/musdb18-hq