Benchmark
RTF (ค่าตัวประกอบเรียลไทม์) ต่ำกว่า 1.0 หมายถึงเร็วกว่าเรียลไทม์
Apple Silicon (MLX + CoreML)
Benchmark ทั้งหมดทำบน M2 Max, 64 GB, macOS 14 ด้วยบิลด์ release และ metallib ที่คอมไพล์แล้ว
ASR — อัตราข้อผิดพลาดของคำ
ประเมินบน LibriSpeech test-clean (2620 ประโยค, เสียงอ่านภาษาอังกฤษประมาณ 5.4 ชั่วโมง)
| โมเดล | บิต | ขนาด | 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 |
เปรียบเทียบกับโมเดลที่เผยแพร่
| โมเดล | พารามิเตอร์ | ขนาด | ความแม่นยำ | WER% | แหล่งที่มา |
|---|---|---|---|---|---|
| Qwen3-ASR 1.7B | 1.7B | 2.3 GB | 8-bit | 2.35 | 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 | Benchmark นี้ |
| Whisper Large v3 | 1.5B | 3.1 GB | FP16 | 2.7 | OpenAI (2023) |
| Parakeet TDT 0.6B | 600M | 634 MB | INT8 | 2.74 | Benchmark นี้ |
| Qwen3-ASR 0.6B | 600M | 960 MB | 8-bit | 2.80 | Benchmark นี้ |
| Whisper Medium | 769M | 1.5 GB | FP16 | 3.0 | OpenAI (2022) |
| Qwen3-ASR 0.6B | 600M | 675 MB | 4-bit | 3.34 | Benchmark นี้ |
| Whisper Small | 244M | 483 MB | FP16 | 3.4 | OpenAI (2022) |
ความเสถียรของรูปแบบยาว (โหลด Neural Engine ต่อเนื่อง)
ประมวลผล 200 ประโยค LibriSpeech ตามลำดับ (เสียงประมาณ 30 นาที, M2 Max) ทดสอบว่า WER หรือความหน่วงจะลดลงเมื่อถอดเสียงต่อเนื่องหรือไม่
| ตัวชี้วัด | 25% แรก | 25% สุดท้าย | โดยรวม |
|---|---|---|---|
| WER% | 1.30 | 1.23 | 2.43 |
| RTF | 0.672 | 0.400 | 0.539 |
ไม่พบการเสื่อมประสิทธิภาพ WER เสถียรตลอดเซสชัน RTF กลับดีขึ้นเมื่อ CoreML อุ่นเครื่องแคชแผนการดำเนินงาน ไม่พบการ throttling จากความร้อนหลังการอินเฟอเรนซ์ Neural Engine ต่อเนื่อง 42 นาที Parakeet ประมวลผลแต่ละ chunk อย่างเป็นอิสระ — ไม่มีการสะสมสถานะข้าม chunk
ผลลัพธ์หลายภาษา (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 8-bit ทำได้ WER 2.35% — ดีกว่า Whisper Large v3 Turbo (2.5%) และ Whisper Large v3 (2.7%) พร้อมทำงานที่ความเร็ว 11x เรียลไทม์บน Apple Silicon
TTS — ความเข้าใจได้แบบไป-กลับ
สังเคราะห์ข้อความ จากนั้นถอดเสียงกลับเป็นข้อความด้วย Qwen3-ASR 0.6B และคำนวณ WER เทียบกับข้อความต้นฉบับ ประเมินบน 30 ประโยคสนทนาภาษาอังกฤษในตัว
| Engine | โมเดล | พารามิเตอร์ | ขนาด | 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 แบบ autoregressive |
| Decode | 244-457 ms | ~8% | ตัวถอดรหัส codec ไปเป็นรูปคลื่น |
Engine TTS ทุกตัวทำงานเร็วกว่าเรียลไทม์ (RTF < 1.0) CosyVoice3 นำหน้าในด้านความเข้าใจได้ (WER 3.25%) Kokoro เร็วที่สุด (RTF 0.17) ด้วยขนาดเพียง 170 MB
VAD — ความแม่นยำในการตรวจจับ
การประเมิน FLEURS (10 ภาษา, 250 ไฟล์)
ประเมินเทียบกับ ground truth อ้างอิงของ Python FireRedVAD ที่ threshold เดียวกัน
| Engine | พารามิเตอร์ | 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
| Engine | พารามิเตอร์ | 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 ทำได้ F1 99.12% บน FLEURS ด้วยอัตราการเตือนเท็จต่ำที่สุด (2.52%) และทำงานที่ 135x เรียลไทม์ Silero v5 เป็นตัวเลือกสตรีมมิ่งที่ดีที่สุดที่ 32 ms ต่อ chunk
Wake-Word / การตรวจหาคำสำคัญ
KWS Zipformer (fine-tune gigaspeech)
Streaming Zipformer2 transducer (3.49M พารามิเตอร์, Apache-2.0) ด้วย palettization INT8 บน CoreML ประเมินกับคำสำคัญ 12 คำบน LibriSpeech test-clean (ประโยคบวก 158 ประโยค, ลบ 60 ประโยค) Threshold ที่ปรับแต่งแล้ว: acThreshold = 0.15, contextScore = 0.5, numTrailingBlanks = 1
| ตัวชี้วัด | ค่า | หมายเหตุ |
|---|---|---|
| RTF (CPU + Neural Engine) | 0.04 | 26× เรียลไทม์บนซีรีส์ M |
| Recall (12 คำสำคัญ) | 88% | LibriSpeech test-clean, ประโยคบวก 158 ประโยค |
| การเตือนเท็จ / ประโยค | 0.27 | ประโยคลบ 60 ประโยค |
| CoreML INT8 เทียบกับ PyTorch FP32 | 99% | ความสอดคล้องในการเปล่งเสียง |
| ขนาดโมเดลที่คอมไพล์แล้ว | ~4 MB | encoder 3.3 MB + decoder 525 KB + joiner 160 KB |
| หน่วยความจำ runtime | ~6 MB | น้ำหนัก + แคชสถานะ encoder |
ค่าดีฟอลต์ที่ปรับแต่งแล้วช่วยเพิ่ม recall จาก 62% เป็น 88% (และลด FP/ประโยค จาก 0.43 เป็น 0.27) เทียบกับค่าดีฟอลต์ของ icefall upstream (acThreshold = 0.25, contextScore = 2.0) ดู คู่มือ wake-word สำหรับรูปแบบไฟล์คำสำคัญและการปรับ threshold ต่อวลี
เอ็มเบดดิงผู้พูด
ความหน่วงในการสกัด
คลิปเสียง 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)
ความคล้ายคลึง cosine ระหว่างเอ็มเบดดิงระดับเซกเมนต์จากการบันทึกหลายผู้พูด 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 |
Engine ทั้งสามตัวเทียบเท่ากับการอ้างอิง Python pyannote (การแยก 0.577, ความคล้ายคลึง cosine >0.96) WeSpeaker ทำได้ การแยก 0.584 ทั้งบน MLX และ CoreML CAM++ ทำงาน เร็วขึ้น 5x (12 ms เทียบกับ 65 ms) ด้วยการแยกที่ดี (0.328)
การแยกแหล่งกำเนิดเสียง — SDR
อัตราส่วนสัญญาณต่อความบิดเบือน (SDR) บน MUSDB18-HQ (เพลงทดสอบความยาวเต็ม 50 เพลง, stereo 44.1kHz) ค่าสูงกว่าดีกว่า โมเดลสองขนาด: 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.3x เรียลไทม์ |
| Open-Unmix L | 28.3M | 432 MB | 0.21 | 4.8x เรียลไทม์ |
UMX-HQ เทียบเท่ากับ SDR ที่เผยแพร่บนเสียงร้องและกลองด้วยโมเดลเบาขนาด 8.9M UMX-L ให้การปรับปรุง +2–4 dB ด้วยขนาดโมเดล 3 เท่า ทั้งคู่รวมการกรองหลังด้วย Wiener EM แบบหลายช่อง และทำงานเร็วกว่าเรียลไทม์บน Apple Silicon
การทำซ้ำ
# 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