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 Apple M5 Pro, 48 Go, macOS 25.5 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).

EngineQuantWER%RTFxRTPeak RSS
Qwen3-ASR 1.7B MLX8-bit1.520.03330.5×2.7 GB
WhisperKit Large-v3 TurboFP161.710.08411.9×0.4 GB
Qwen3-ASR 0.6B MLX8-bit1.820.01566.0×1.3 GB
Qwen3-ASR 0.6B MLX4-bit2.200.01285.6×1.0 GB
Parakeet TDT v3INT82.370.009117.4×0.9 GB
Qwen3-ASR 0.6B CoreMLINT83.020.09810.2×1.4 GB
Omnilingual CTC 300M MLX4-bit4.260.005222.1×0.4 GB
Omnilingual CTC 300M CoreMLINT85.670.1287.8×0.5 GB
Nemotron StreamingINT82.820.05817.1×961 MB

Headline picks: Qwen3-ASR MLX 1.7B 8-bit beats WhisperKit Large-v3 Turbo on WER (1.52% vs 1.71%) and runs 2.6× faster at 6× the memory. Parakeet TDT v3 is the fastest for English-only (117× real-time, 25 European languages). Omnilingual CTC 300M MLX 4-bit is the multilingual throughput leader: 222× real-time, 384 MB peak, 1 672 languages.

The Qwen3-ASR 0.6B CoreML row reflects the rebuilt chunked block-attention encoder (aufklarer/Qwen3-ASR-CoreML) — the previous export ran unmasked global self-attention over zero-padded mel and emitted <|im_end|> right after the first sentence-final period (24.88% WER on the same fixture before the rebuild).

Stabilité en forme longue (charge Neural Engine soutenue)

200 énoncés LibriSpeech traités séquentiellement (~30 min d'audio, M5 Pro). Vérifie si le WER ou la latence se dégradent sous transcription soutenue.

MétriquePremier 25%Dernier 25%Global
WER%1,301,232,43
RTF0,6720,4000,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).

LangueMétriqueQwen3 4 bitsQwen3 8 bitsParakeet INT8
EspagnolWER6,445,065,18
AnglaisWER6,575,649,30
ChinoisCER8,417,71
AllemandWER9,456,8112,33
FrançaisWER11,428,5013,02
JaponaisCER16,118,64
RusseWER16,3510,5211,49
CoréenWER19,956,89
HindiWER25,9318,57
ArabeWER33,4720,31

Delta de compression

Perte de précision due à la quantification vers des largeurs en bits inférieures.

VarianteWER%SubstitutionsInsertionsSuppressionsErreurs totalesTaille
Qwen3 0.6B 8 bits2,801111922681471960 Mo
Qwen3 0.6B 4 bits3,3413231233081754675 Mo
Delta+0,54+212+31+40+283-30%
Parakeet TDT INT82,749901253081423634 Mo
À retenir

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.

MoteurModèleParamètresTailleWER%RTF
CosyVoice30.5B 4 bits500M~1,9 Go3,250,59
Qwen3-TTS1.7B 4 bits1,7B~2,3 Go3,470,79
Qwen3-TTS1.7B 8 bits1,7B~3,5 Go3,660,85
Kokoro-82MCoreML82M~170 Mo3,900,17
Qwen3-TTS0.6B 8 bits600M~960 Mo9,740,76
Qwen3-TTS0.6B 4 bits600M~675 Mo15,580,76

Décomposition de la latence (Qwen3-TTS)

ÉtapeTemps% du totalDescription
Embed1-3 ms<1%Embedding du texte (TTFT)
Generate2-6 s~92%Tokens de codec autorégressifs
Decode244-457 ms~8%Décodeur de codec vers forme d'onde
À retenir

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.

MoteurParamètresBackendF1%FAR%MR%RTF
FireRedVAD588KCoreML (ANE)99,122,520,470,007
Silero v5309KCoreML (ANE)95,1315,761,890,022
Silero v5309KMLX (GPU)95,1115,851,890,027
Pyannote1,5MMLX (GPU)94,8614,712,920,358

Évaluation VoxConverse (multi-locuteurs)

5 fichiers de conversation multi-locuteurs évalués à une résolution de trame de 10 ms.

MoteurParamètresBackendF1%FAR%MR%RTF
Pyannote1,5MMLX (GPU)98,2250,090,190,358
Silero v5309KCoreML (ANE)97,5233,292,690,022
Silero v5309KMLX (GPU)95,9821,025,880,027
FireRedVAD588KCoreML (ANE)94,2140,125,050,007

Comparaison avec les chiffres publiés

ModèleF1%FAR%MR%ParamètresJeu de données
Pyannote (nous)98,2250,090,191,5MVoxConverse
FireRedVAD (article)97,572,693,62588KFLEURS-VAD-102
Silero (nous)95,9821,025,88309KVoxConverse
Silero-VAD (article)95,959,413,95309KFLEURS-VAD-102
FireRedVAD (nous)94,2169,335,05588KVoxConverse
À retenir

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èleDimBackendLatence
CAM++ (3D-Speaker)192CoreML (ANE)12 ms
WeSpeaker ResNet34-LM256MLX (GPU)64 ms
WeSpeaker ResNet34-LM256CoreML (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èleBackendIntra-locuteurInter-locuteurSéparation
WeSpeakerMLX0,7260,1420,584
WeSpeakerCoreML0,7260,1430,582
CAM++CoreML0,7230,3950,328
À retenir

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).

CibleUMX-HQ (MLX)UMX-L (MLX)UMX-HQ (publié)
Voix6,23 dB~10,5 dB6,32 dB
Batterie6,44 dB~7,0 dB5,73 dB
Basse4,56 dB~5,5 dB5,23 dB
Autre3,41 dB~4,5 dB4,02 dB
ModèleParamètres/stemTailleRTFVitesse
Open-Unmix HQ8,9M136 Mo0,234,3× temps réel
Open-Unmix L28,3M432 Mo0,214,8× temps réel
À retenir

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