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 Apple M5 Pro, 48 GB, macOS 25.5 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).
| 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 |
Lựa chọn nổi bật: Qwen3-ASR MLX 1.7B 5-bit là dẫn đầu mới về độ chính xác với 1.32% WER: vượt WhisperKit Large-v3 Turbo (1.71%) và 1.7B 8-bit của chúng ta (1.52%), dùng ít hơn ~600 MB peak RSS so với 8-bit và nhanh hơn 23%. Parakeet TDT v3 nhanh nhất cho tiếng Anh (117× thời gian thực, 25 ngôn ngữ châu Âu). Omnilingual CTC 300M MLX 4-bit dẫn đầu throughput đa ngôn ngữ: 222× thời gian thực, 384 MB peak, 1 672 ngôn ngữ.
Dòng Qwen3-ASR 0.6B CoreML phản ánh encoder chunked block-attention đã build lại (aufklarer/Qwen3-ASR-CoreML). Bản export cũ chạy self-attention toàn cục không mask trên mel được zero-pad và phát <|im_end|> ngay sau dấu chấm cuối câu đầu tiên (24.88% WER trên cùng fixture trước rebuild).
Độ ổ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, M5 Pro). 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 MLX đạt 1.32% WER ở 5-bit (1.52% ở 8-bit), vượt WhisperKit Large-v3 Turbo (1.71%) và chạy 30-36× 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.
Android — trên thiết bị (Galaxy S23)
Đo trên Samsung Galaxy S23 (SM-S918B), arm64, chỉ CPU, INT8 khi được ghi chú. RTF là thời gian ÷ âm thanh (thấp hơn = nhanh hơn thời gian thực; <1.0 = thời gian thực); Peak RSS là bộ nhớ thường trú của mô hình. STT dùng đoạn 20 giây; TTS báo RTF hoặc thời gian tới âm thanh đầu tiên (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 |
Điểm chính: Parakeet-EOU-120M là STT nhẹ nhất ở đây, chỉ ~232 MB – đa ngôn ngữ (25 ngôn ngữ châu Âu), phát trực tuyến và tích hợp phát hiện kết thúc lượt nói, nhỏ hơn khoảng 5–6× so với Parakeet 0.6B. Tắt vùng nhớ CPU (arena) của ONNX (nay là mặc định) giảm Parakeet-TDT từ ~1.34 GB xuống ~1.15 GB.
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