اختبارات الأداء
قيمة RTF (عامل الزمن الحقيقي) أقل من 1.0 تعني أسرع من الزمن الحقيقي.
Apple Silicon (MLX + CoreML)
كل الاختبارات تمت على Apple M5 Pro، 48 GB، macOS 25.5 بإصدارات release وملف metallib مُجمَّع.
ASR — معدل خطأ الكلمات
تم التقييم على 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× الزمن الحقيقي، 25 لغة أوروبية). Omnilingual CTC 300M MLX 4-bit يتصدر الإنتاجية متعددة اللغات: 222× الزمن الحقيقي، 384 MB peak، و1 672 لغة.
يعكس صف Qwen3-ASR 0.6B CoreML مشفر chunked block-attention المعاد بناؤه (aufklarer/Qwen3-ASR-CoreML). كان التصدير السابق يشغل self-attention عاماً بلا قناع فوق mel محشو بالأصفار ويصدر <|im_end|> مباشرة بعد أول نقطة نهاية جملة (24.88% WER على fixture نفسه قبل إعادة البناء).
الاستقرار في الصيغة الطويلة (حِمل مستمر على 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 MB |
| Qwen3 0.6B 4-bit | 3.34 | 1323 | 123 | 308 | 1754 | 675 MB |
| الفرق | +0.54 | +212 | +31 | +40 | +283 | -30% |
| Parakeet TDT INT8 | 2.74 | 990 | 125 | 308 | 1423 | 634 MB |
يصل Qwen3-ASR 1.7B MLX إلى 1.32% WER عند 5-bit (1.52% عند 8-bit)، متفوقاً على WhisperKit Large-v3 Turbo (1.71%) مع تشغيل بسرعة 30-36× الزمن الحقيقي على Apple Silicon.
TTS — وضوح ذهابًا وإيابًا
تركيب النص، ثم إعادة تفريغ الصوت باستخدام Qwen3-ASR 0.6B وحساب WER مقارنة بالنص الأصلي. تم التقييم على 30 جملة محادثة مدمجة باللغة الإنجليزية.
| المحرّك | النموذج | المعاملات | الحجم | 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 |
تفصيل التأخير (Qwen3-TTS)
| المرحلة | الوقت | % من الإجمالي | الوصف |
|---|---|---|---|
| Embed | 1-3 ms | <1% | تضمين النص (TTFT) |
| Generate | 2-6 s | ~92% | رموز codec ذاتية الانحدار |
| Decode | 244-457 ms | ~8% | فك ترميز codec إلى موجة صوتية |
كل محركات TTS تعمل أسرع من الزمن الحقيقي (RTF < 1.0). يتصدّر CosyVoice3 من حيث الوضوح (3.25% WER). أما Kokoro فهو الأسرع (RTF 0.17) بحجم 170 MB فقط.
VAD — دقة الكشف
التقييم على FLEURS (10 لغات، 250 ملفًا)
التقييم بالمقارنة مع المرجع البايثوني FireRedVAD عند نفس العتبة.
| المحرّك | المعاملات | 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 |
التقييم على VoxConverse (متعدد المتحدثين)
5 ملفات محادثة متعددة المتحدثين، تم تقييمها بدقة إطار 10 ms.
| المحرّك | المعاملات | 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 |
مقارنة مع الأرقام المنشورة
| النموذج | F1% | FAR% | MR% | المعاملات | Dataset |
|---|---|---|---|---|---|
| Pyannote (لدينا) | 98.22 | 50.09 | 0.19 | 1.5M | VoxConverse |
| FireRedVAD (paper) | 97.57 | 2.69 | 3.62 | 588K | FLEURS-VAD-102 |
| Silero (لدينا) | 95.98 | 21.02 | 5.88 | 309K | VoxConverse |
| Silero-VAD (paper) | 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 ms لكل جزء.
تضمينات المتحدث
تأخير الاستخراج
مقطع صوتي مدته 20 ثانية، 10 تكرارات بعد التسخين.
| النموذج | Dim | Backend | التأخير |
|---|---|---|---|
| CAM++ (3D-Speaker) | 192 | CoreML (ANE) | 12 ms |
| WeSpeaker ResNet34-LM | 256 | MLX (GPU) | 64 ms |
| WeSpeaker ResNet34-LM | 256 | CoreML (ANE) | 143 ms |
جودة التضمينات (VoxConverse)
تشابه جيب التمام بين التضمينات على مستوى المقاطع من 5 تسجيلات متعددة المتحدثين. كلما زاد الفصل، تحسّن التمييز بين المتحدثين.
| النموذج | Backend | داخل المتحدث | بين المتحدثين | الفصل |
|---|---|---|---|---|
| WeSpeaker | MLX | 0.726 | 0.142 | 0.584 |
| WeSpeaker | CoreML | 0.726 | 0.143 | 0.582 |
| CAM++ | CoreML | 0.723 | 0.395 | 0.328 |
المحركات الثلاثة جميعها تطابق مرجع pyannote البايثوني (فصل 0.577، تشابه جيب التمام >0.96). يحقق WeSpeaker فصلًا قدره 0.584 على كلٍّ من MLX وCoreML. أما CAM++ فيعمل أسرع 5× (12 ms مقابل 65 ms) مع فصل جيد (0.328).
فصل المصادر — SDR
نسبة الإشارة إلى التشويه (SDR) على MUSDB18-HQ (50 مسارًا اختباريًا بطول كامل، استريو 44.1 kHz). الأعلى أفضل. حجمان للنموذج: HQ (8.9M معاملات لكل stem) وL (28.3M معاملات لكل stem).
| الهدف | UMX-HQ (MLX) | UMX-L (MLX) | UMX-HQ (المنشور) |
|---|---|---|---|
| الأصوات | 6.23 dB | ~10.5 dB | 6.32 dB |
| الطبول | 6.44 dB | ~7.0 dB | 5.73 dB |
| الجيتار البيس | 4.56 dB | ~5.5 dB | 5.23 dB |
| أخرى | 3.41 dB | ~4.5 dB | 4.02 dB |
| النموذج | معاملات/stem | الحجم | RTF | السرعة |
|---|---|---|---|---|
| Open-Unmix HQ | 8.9M | 136 MB | 0.23 | 4.3× الزمن الحقيقي |
| Open-Unmix L | 28.3M | 432 MB | 0.21 | 4.8× الزمن الحقيقي |
يطابق UMX-HQ قيم SDR المنشورة في الأصوات والطبول بنموذج خفيف حجمه 8.9M. ويوفّر UMX-L تحسينًا قدره +2 إلى +4 dB بحجم نموذج يساوي 3 أضعاف. كلاهما يتضمّن ما بعد تصفية EM Wiener متعدد القنوات ويعمل أسرع من الزمن الحقيقي على Apple Silicon.
Android — على الجهاز (Galaxy S23)
تم القياس على Samsung Galaxy S23 (SM-S918B)، arm64، وحدة المعالجة المركزية فقط، و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. إن تعطيل ساحة ذاكرة وحدة المعالجة المركزية في ONNX (الافتراضي الآن) خفّض Parakeet-TDT من نحو 1.34 غيغابايت إلى نحو 1.15 غيغابايت.
إعادة الإنتاج
# 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