Benchmark
RTF (hệ số thời gian thực) dưới 1.0 nghĩa là nhanh hơn thời gian thực.
Apple Silicon (MLX + CoreML)
Tất cả benchmark chạy trên M2 Max, 64 GB, macOS 14 với bản dựng release và metallib đã biên dịch.
ASR — Tỷ lệ lỗi từ
Đánh giá trên LibriSpeech test-clean (2620 câu thoại, ~5.4 giờ giọng đọc tiếng Anh).
| Mô hình | Bit | Dung lượng | 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 |
So sánh với các mô hình đã công bố
| Mô hình | Tham số | Dung lượng | Độ chính xác | WER% | Nguồn |
|---|---|---|---|---|---|
| Qwen3-ASR 1.7B | 1.7B | 2.3 GB | 8-bit | 2.35 | Benchmark này |
| 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 này |
| Whisper Large v3 | 1.5B | 3.1 GB | FP16 | 2.7 | OpenAI (2023) |
| Parakeet TDT 0.6B | 600M | 634 MB | INT8 | 2.74 | Benchmark này |
| Qwen3-ASR 0.6B | 600M | 960 MB | 8-bit | 2.80 | Benchmark này |
| Whisper Medium | 769M | 1.5 GB | FP16 | 3.0 | OpenAI (2022) |
| Qwen3-ASR 0.6B | 600M | 675 MB | 4-bit | 3.34 | Benchmark này |
| Whisper Small | 244M | 483 MB | FP16 | 3.4 | OpenAI (2022) |
Độ ổn định dạng dài (tải Neural Engine liên tục)
200 câu thoại LibriSpeech được xử lý tuần tự (~30 phút âm thanh, M2 Max). Kiểm tra xem WER hoặc độ trễ có suy giảm khi chuyển lời nói liên tục hay không.
| Chỉ số | 25% đầu | 25% cuối | Tổng thể |
|---|---|---|---|
| WER% | 1.30 | 1.23 | 2.43 |
| RTF | 0.672 | 0.400 | 0.539 |
Không phát hiện suy giảm. WER ổn định xuyên suốt phiên làm việc. RTF thậm chí còn cải thiện khi CoreML làm nóng cache kế hoạch thực thi. Không bị throttling nhiệt sau 42 phút suy luận Neural Engine liên tục. Parakeet xử lý từng đoạn độc lập — không tích lũy trạng thái giữa các đoạn.
Kết quả đa ngôn ngữ (FLEURS)
Dùng CER cho các ngôn ngữ CJK (không có ranh giới từ). Parakeet hỗ trợ ~25 ngôn ngữ châu Âu (không có CJK).
| Ngôn ngữ | Chỉ số | Qwen3 4-bit | Qwen3 8-bit | Parakeet INT8 |
|---|---|---|---|---|
| Tiếng Tây Ban Nha | WER | 6.44 | 5.06 | 5.18 |
| Tiếng Anh | WER | 6.57 | 5.64 | 9.30 |
| Tiếng Trung | CER | 8.41 | 7.71 | — |
| Tiếng Đức | WER | 9.45 | 6.81 | 12.33 |
| Tiếng Pháp | WER | 11.42 | 8.50 | 13.02 |
| Tiếng Nhật | CER | 16.11 | 8.64 | — |
| Tiếng Nga | WER | 16.35 | 10.52 | 11.49 |
| Tiếng Hàn | WER | 19.95 | 6.89 | — |
| Tiếng Hindi | WER | 25.93 | 18.57 | — |
| Tiếng Ả Rập | WER | 33.47 | 20.31 | — |
Mức chênh lệch nén
Mất mát độ chính xác khi lượng tử hoá xuống số bit thấp hơn.
| Biến thể | WER% | Thay thế | Chèn thêm | Xoá bỏ | Tổng số lỗi | Dung lượng |
|---|---|---|---|---|---|---|
| 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 |
| Chênh lệch | +0.54 | +212 | +31 | +40 | +283 | -30% |
| Parakeet TDT INT8 | 2.74 | 990 | 125 | 308 | 1423 | 634 MB |
Qwen3-ASR 1.7B 8-bit đạt WER 2.35% — vượt Whisper Large v3 Turbo (2.5%) và Whisper Large v3 (2.7%) đồng thời chạy ở tốc độ 11x thời gian thực trên Apple Silicon.
TTS — Khả năng dễ hiểu khứ hồi
Tổng hợp văn bản, sau đó chuyển âm thanh thu được trở lại văn bản bằng Qwen3-ASR 0.6B và tính WER so với văn bản gốc. Đánh giá trên 30 câu hội thoại tiếng Anh tích hợp sẵn.
| Engine | Mô hình | Tham số | Dung lượng | 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 |
Phân rã độ trễ (Qwen3-TTS)
| Giai đoạn | Thời gian | % tổng | Mô tả |
|---|---|---|---|
| Embed | 1-3 ms | <1% | Embedding văn bản (TTFT) |
| Generate | 2-6 s | ~92% | Token codec tự hồi quy |
| Decode | 244-457 ms | ~8% | Bộ giải mã codec ra dạng sóng |
Tất cả engine TTS chạy nhanh hơn thời gian thực (RTF < 1.0). CosyVoice3 dẫn đầu về khả năng dễ hiểu (WER 3.25%). Kokoro là nhanh nhất (RTF 0.17) với dung lượng chỉ 170 MB.
VAD — Độ chính xác phát hiện
Đánh giá FLEURS (10 ngôn ngữ, 250 tệp)
Đánh giá dựa trên ground truth tham chiếu Python FireRedVAD với cùng ngưỡng.
| Engine | Tham số | 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 |
Đánh giá VoxConverse (nhiều người nói)
5 tệp hội thoại nhiều người nói được đánh giá với độ phân giải frame 10 ms.
| Engine | Tham số | 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 |
So sánh với số liệu đã công bố
| Mô hình | F1% | FAR% | MR% | Tham số | Dataset |
|---|---|---|---|---|---|
| Pyannote (của chúng tôi) | 98.22 | 50.09 | 0.19 | 1.5M | VoxConverse |
| FireRedVAD (paper) | 97.57 | 2.69 | 3.62 | 588K | FLEURS-VAD-102 |
| Silero (của chúng tôi) | 95.98 | 21.02 | 5.88 | 309K | VoxConverse |
| Silero-VAD (paper) | 95.95 | 9.41 | 3.95 | 309K | FLEURS-VAD-102 |
| FireRedVAD (của chúng tôi) | 94.21 | 69.33 | 5.05 | 588K | VoxConverse |
FireRedVAD đạt F1 99.12% trên FLEURS với tỷ lệ báo động giả thấp nhất (2.52%) và chạy ở tốc độ 135x thời gian thực. Silero v5 cung cấp lựa chọn streaming tốt nhất với 32 ms mỗi đoạn.
Wake-Word / Nhận diện từ khoá
KWS Zipformer (fine-tune gigaspeech)
Streaming Zipformer2 transducer (3.49M tham số, Apache-2.0) với palettization INT8 trên CoreML. Đánh giá với 12 từ khoá trên LibriSpeech test-clean (158 câu thoại dương tính, 60 câu âm tính). Ngưỡng đã tinh chỉnh: acThreshold = 0.15, contextScore = 0.5, numTrailingBlanks = 1.
| Chỉ số | Giá trị | Ghi chú |
|---|---|---|
| RTF (CPU + Neural Engine) | 0.04 | 26× thời gian thực trên dòng M |
| Recall (12 từ khoá) | 88% | LibriSpeech test-clean, 158 câu thoại dương tính |
| Báo động giả / câu thoại | 0.27 | 60 câu thoại âm tính |
| CoreML INT8 so với PyTorch FP32 | 99% | Mức độ đồng thuận khi phát ra |
| Dung lượng mô hình đã biên dịch | ~4 MB | encoder 3.3 MB + decoder 525 KB + joiner 160 KB |
| Bộ nhớ runtime | ~6 MB | Trọng số + cache trạng thái encoder |
Các giá trị mặc định đã tinh chỉnh đã cải thiện recall từ 62% lên 88% (và giảm FP/câu thoại từ 0.43 xuống 0.27) so với mặc định icefall upstream (acThreshold = 0.25, contextScore = 2.0). Xem hướng dẫn wake-word để biết định dạng tệp từ khoá và tinh chỉnh ngưỡng theo từng cụm từ.
Vector hoá người nói
Độ trễ trích xuất
Clip âm thanh 20 giây, 10 lần lặp sau khi làm nóng.
| Mô hình | Dim | Backend | Độ trễ |
|---|---|---|---|
| CAM++ (3D-Speaker) | 192 | CoreML (ANE) | 12 ms |
| WeSpeaker ResNet34-LM | 256 | MLX (GPU) | 64 ms |
| WeSpeaker ResNet34-LM | 256 | CoreML (ANE) | 143 ms |
Chất lượng embedding (VoxConverse)
Độ tương đồng cosine giữa các embedding cấp đoạn từ 5 bản ghi nhiều người nói. Độ tách biệt càng cao = phân biệt người nói càng tốt.
| Mô hình | Backend | Cùng người nói | Khác người nói | Độ tách biệt |
|---|---|---|---|---|
| WeSpeaker | MLX | 0.726 | 0.142 | 0.584 |
| WeSpeaker | CoreML | 0.726 | 0.143 | 0.582 |
| CAM++ | CoreML | 0.723 | 0.395 | 0.328 |
Cả ba engine đều ngang ngửa tham chiếu Python pyannote (độ tách biệt 0.577, độ tương đồng cosine >0.96). WeSpeaker đạt độ tách biệt 0.584 trên cả MLX và CoreML. CAM++ chạy nhanh hơn 5x (12 ms so với 65 ms) với độ tách biệt tốt (0.328).
Tách nguồn âm — SDR
Tỷ số tín hiệu trên méo (SDR) trên MUSDB18-HQ (50 bản nhạc test đầy đủ, stereo 44.1kHz). Càng cao càng tốt. Hai kích thước mô hình: HQ (8.9M tham số/stem) và L (28.3M tham số/stem).
| Đối tượng | UMX-HQ (MLX) | UMX-L (MLX) | UMX-HQ (đã công bố) |
|---|---|---|---|
| Giọng hát | 6.23 dB | ~10.5 dB | 6.32 dB |
| Trống | 6.44 dB | ~7.0 dB | 5.73 dB |
| Bass | 4.56 dB | ~5.5 dB | 5.23 dB |
| Khác | 3.41 dB | ~4.5 dB | 4.02 dB |
| Mô hình | Tham số/stem | Dung lượng | RTF | Tốc độ |
|---|---|---|---|---|
| Open-Unmix HQ | 8.9M | 136 MB | 0.23 | 4.3x thời gian thực |
| Open-Unmix L | 28.3M | 432 MB | 0.21 | 4.8x thời gian thực |
UMX-HQ ngang bằng SDR đã công bố trên giọng hát và trống với mô hình nhẹ 8.9M. UMX-L mang lại cải thiện +2–4 dB với mô hình lớn gấp 3 lần. Cả hai đều bao gồm hậu lọc Wiener EM đa kênh và chạy nhanh hơn thời gian thực trên Apple Silicon.
Tái lập
# 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