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ạnMô 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 thanhTransformer 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ảnTransformer 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

BackendRTFBộ nhớ đỉnhGhi chú
Qwen3-ASR 1.7B MLX 5-bit0.0271.92 GBWER 1.32% (new accuracy leader)
Qwen3-ASR 1.7B MLX 8-bit0.0332.7 GBWER 1.52%
Qwen3-ASR 0.6B MLX 8-bit0.0151.3 GBWER 1.82%
Qwen3-ASR 0.6B MLX 5-bit0.0141.03 GBWER 1.74% (near-8-bit at ~4-bit RAM)
Qwen3-ASR 0.6B MLX 4-bit0.0121.0 GBWER 2.20%
Qwen3-ASR 0.6B CoreML INT80.0981.4 GBWER 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ìnhBackendKích thướcHuggingFace
Qwen3-ASR-0.6B (4-bit)MLX680 MBaufklarer/Qwen3-ASR-0.6B-MLX-4bit
Qwen3-ASR-0.6B (5-bit)MLX1.0 GBaufklarer/Qwen3-ASR-0.6B-MLX-5bit
Qwen3-ASR-0.6B (8-bit)MLX1.0 GBaufklarer/Qwen3-ASR-0.6B-MLX-8bit
Qwen3-ASR-0.6B (CoreML INT8)CoreML180 MBaufklarer/Qwen3-ASR-CoreML
Qwen3-ASR-1.7B (4-bit)MLX2.1 GBaufklarer/Qwen3-ASR-1.7B-MLX-4bit
Qwen3-ASR-1.7B (5-bit)MLX2.3 GBaufklarer/Qwen3-ASR-1.7B-MLX-5bit
Qwen3-ASR-1.7B (8-bit)MLX3.2 GBaufklarer/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.

Lưu ý quan trọng

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.