Qwen3-ASR
Qwen3-ASR là mô hình nhận dạng giọng nói tự động đa ngôn ngữ thuộc hàng tiên tiến nhất hiện nay. Mô hình chạy ngay trên thiết bị với khả năng tăng tốc GPU Metal qua MLX, lượng tử hoá 4-bit để sử dụng bộ nhớ hiệu quả. Có sẵn ở hai biến thể 0.6B và 1.7B tham số.
Pipeline
Pipeline suy luận của Qwen3-ASR xử lý âm thanh qua bốn giai đoạn:
| Giai đoạn | Mô tả |
|---|---|
| Đầu vào âm thanh | Âm thanh thô được lấy mẫu lại về 16 kHz mono |
| Mel Spectrogram | Đặc trưng mel filterbank 128 bin được trích xuất từ dạng sóng |
| Bộ mã hoá âm thanh | Transformer 18 lớp với block attention, xử lý các khung mel thành embedding âm thanh |
| Bộ giải mã văn bản | Transformer Qwen3 28 lớp với grouped-query attention (GQA) và rotary position embeddings (RoPE), sinh token văn bản theo cách tự hồi quy |
Hiệu năng
| Backend | RTF | Bộ nhớ đỉnh | Ghi chú |
|---|---|---|---|
| Qwen3-ASR 1.7B MLX 5-bit | 0.027 | 1.92 GB | WER 1.32% (new accuracy leader) |
| Qwen3-ASR 1.7B MLX 8-bit | 0.033 | 2.7 GB | WER 1.52% |
| Qwen3-ASR 0.6B MLX 8-bit | 0.015 | 1.3 GB | WER 1.82% |
| Qwen3-ASR 0.6B MLX 5-bit | 0.014 | 1.03 GB | WER 1.74% (near-8-bit at ~4-bit RAM) |
| Qwen3-ASR 0.6B MLX 4-bit | 0.012 | 1.0 GB | WER 2.20% |
| Qwen3-ASR 0.6B CoreML INT8 | 0.098 | 1.4 GB | WER 3.02% (chunked-attn rebuild) |
Apple M5 Pro, 48 GB. LibriSpeech test-clean n=200, isolated per-engine. RTF < 1.0 = nhanh hơn thời gian thực.
Biến thể mô hình
| Mô hình | Backend | Kích thước | HuggingFace |
|---|---|---|---|
| Qwen3-ASR-0.6B (4-bit) | MLX | 680 MB | aufklarer/Qwen3-ASR-0.6B-MLX-4bit |
| Qwen3-ASR-0.6B (5-bit) | MLX | 1.0 GB | aufklarer/Qwen3-ASR-0.6B-MLX-5bit |
| Qwen3-ASR-0.6B (8-bit) | MLX | 1.0 GB | aufklarer/Qwen3-ASR-0.6B-MLX-8bit |
| Qwen3-ASR-0.6B (CoreML INT8) | CoreML | 180 MB | aufklarer/Qwen3-ASR-CoreML |
| Qwen3-ASR-1.7B (4-bit) | MLX | 2.1 GB | aufklarer/Qwen3-ASR-1.7B-MLX-4bit |
| Qwen3-ASR-1.7B (5-bit) | MLX | 2.3 GB | aufklarer/Qwen3-ASR-1.7B-MLX-5bit |
| Qwen3-ASR-1.7B (8-bit) | MLX | 3.2 GB | aufklarer/Qwen3-ASR-1.7B-MLX-8bit |
Sử dụng CLI
Phiên âm một tệp âm thanh bằng mô hình Qwen3-ASR mặc định:
.build/release/speech transcribe recording.wav
Tuỳ chọn
# Use the larger 1.7B model
.build/release/speech transcribe recording.wav --model 1.7b
# Specify language
.build/release/speech transcribe recording.wav --language en
# Streaming mode with partial results
.build/release/speech transcribe recording.wav --stream --partial
API Swift
Dùng module Qwen3ASR để phiên âm âm thanh từ mã nguồn:
import Qwen3ASR
// Load the model (downloads from HuggingFace on first use)
let model = try await Qwen3ASRModel.fromPretrained()
// Transcribe audio samples (16 kHz mono Float)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)
Bộ mã hoá CoreML (Neural Engine)
Chạy bộ mã hoá âm thanh trên Neural Engine qua CoreML, còn bộ giải mã văn bản chạy trên GPU qua MLX. Cách tiếp cận lai này giúp giảm tiêu thụ điện năng và giải phóng GPU cho các tác vụ chạy song song.
import Qwen3ASR
let encoder = try await CoreMLASREncoder.fromPretrained()
let model = try await Qwen3ASRModel.fromPretrained()
let text = try model.transcribe(
audio: samples, sampleRate: 16000,
coremlEncoder: encoder
)
# CLI
.build/release/speech transcribe recording.wav --engine qwen3-coreml
Biến thể INT8 palettized (180 MB, độ tương đồng cosine > 0.999) là lựa chọn mặc định. Còn có biến thể INT4 (90 MB) cho các triển khai bị giới hạn về kích thước.
Chế độ streaming
Chế độ streaming dùng VAD (phát hiện hoạt động giọng nói) để chia âm thanh thành các chunk và phiên âm tăng dần. Cách này hữu ích cho bản ghi dài hoặc xử lý thời gian thực.
# Stream with default segment size
.build/release/speech transcribe recording.wav --stream
# Control maximum segment duration
.build/release/speech transcribe recording.wav --stream --max-segment 15
# Show partial (in-progress) results as they arrive
.build/release/speech transcribe recording.wav --stream --partial
Cờ --max-segment điều khiển thời lượng tối đa của chunk tính bằng giây. Cờ --partial bật xuất kết quả từng phần, hiển thị các từ khi chúng vừa được giải mã.
Định dạng được hỗ trợ
Qwen3-ASR chấp nhận các định dạng âm thanh sau. Mọi đầu vào đều được tự động lấy mẫu lại về 16 kHz mono ở bên trong.
- WAV — PCM không nén
- M4A — âm thanh mã hoá AAC
- MP3 — MPEG Layer III
- CAF — Apple Core Audio Format
Các mô hình được tải xuống từ HuggingFace ở lần dùng đầu tiên và được lưu cache tại ~/Library/Caches/qwen3-speech/. Mô hình 0.6B ở định dạng 4-bit có dung lượng xấp xỉ 1.5 GB.
Cần hướng dẫn chọn tập trung? Xem Qwen3-ASR vs Whisper: độ chính xác, tốc độ và bộ nhớ.
Hủy hợp tác
Đối với phiên âm MLX, Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) ném CancellationError khi phát hiện tác vụ bị hủy trước khi trích xuất đặc trưng, mã hóa, nạp trước bộ giải mã hoặc thực hiện một bước giải mã. Công việc đã gửi đến GPU có thể hoàn tất. Các API đồng bộ transcribe và transcribeBatch vẫn không ném lỗi và bỏ qua việc hủy tác vụ. speech-server sử dụng điểm vào hỗ trợ hủy cho Qwen3-ASR.
Giới hạn bộ nhớ đệm MLX
Khi tải Qwen3-ASR, vùng bộ đệm Metal có thể tái sử dụng của MLX được giới hạn trên toàn tiến trình: min(1 GiB, RAM / 8) cho 0.6B và min(4 GiB, RAM / 4) cho 1.7B. Các mô hình MLX khác dùng chung vùng này. Giới hạn áp dụng cho bộ đệm tạm được lưu để tái sử dụng, không phải trọng số đang hoạt động hay tổng bộ nhớ của tiến trình.
Giới hạn thực tế là giá trị nhỏ nhất giữa MLX.Memory.cacheLimit do bên gọi đặt và giới hạn của mọi phiên bản ASR đang được tải. Có thể dỡ các phiên bản theo bất kỳ thứ tự nào. Khi phiên bản cuối cùng được dỡ hoặc hủy, ngân sách của bên gọi được khôi phục. Giới hạn chặt hơn do bên gọi đặt trong khi các mô hình được tải vẫn được giữ nguyên.
Phiên âm một đầu vào giải phóng bộ đệm có thể tái sử dụng khi bộ giải mã trả về hoặc ném lỗi, kể cả khi bị hủy trong quá trình giải mã. Các mảng đang hoạt động và trọng số mô hình vẫn được tải. Bộ giải mã tham lam của transcribeBatch giữ vùng đệm có giới hạn giữa các lô. Tùy chọn API và cờ CLI không thay đổi.
Xóa nhóm bộ đệm làm giảm bộ nhớ được giữ lại nhưng cần cấp phát mới cho các yêu cầu sau, nên yêu cầu ngắn có thể mất nhiều thời gian hơn. Chờ công việc giải mã đã gửi hoàn tất giúp việc dọn dẹp diễn ra chắc chắn, kể cả khi hủy. Độ trễ và bộ nhớ của tiến trình phụ thuộc vào phần cứng, mô hình và âm thanh.