Qwen3-ASR

Qwen3-ASR เป็นโมเดลการรู้จำเสียงพูดอัตโนมัติหลายภาษาที่ทันสมัยที่สุด ทำงานบนอุปกรณ์โดยใช้การเร่งความเร็ว GPU แบบ Metal ผ่าน MLX พร้อมการควอนไทซ์ 4-bit เพื่อใช้หน่วยความจำอย่างมีประสิทธิภาพ มีให้เลือกสองรุ่นคือ 0.6B และ 1.7B พารามิเตอร์

Pipeline

Pipeline การอนุมานของ Qwen3-ASR ประมวลผลเสียงผ่านสี่ขั้นตอน:

ขั้นตอนคำอธิบาย
อินพุตเสียงเสียงดิบถูกสุ่มตัวอย่างใหม่เป็น 16 kHz mono
Mel Spectrogramคุณลักษณะ mel filterbank แบบ 128 bin สกัดจากรูปคลื่น
Audio EncoderTransformer 18 ชั้นพร้อม block attention ประมวลผลเฟรม mel เป็น audio embeddings
Text DecoderTransformer Qwen3 28 ชั้นพร้อม grouped-query attention (GQA) และ rotary position embeddings (RoPE) สร้าง token ข้อความแบบ autoregressive

ประสิทธิภาพ

BackendRTFหน่วยความจำสูงสุดหมายเหตุ
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 = เร็วกว่าเรียลไทม์

รุ่นของโมเดล

โมเดลBackendขนาดHuggingFace
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

การใช้งาน CLI

ถอดเสียงจากไฟล์เสียงด้วยโมเดล Qwen3-ASR ค่าเริ่มต้น:

.build/release/speech transcribe recording.wav

ตัวเลือก

# 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

ใช้โมดูล Qwen3ASR เพื่อถอดเสียงจากโค้ด:

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)

CoreML Encoder (Neural Engine)

รัน audio encoder บน Neural Engine ผ่าน CoreML ส่วน text decoder รันบน GPU ผ่าน MLX วิธีไฮบริดนี้ช่วยลดการใช้พลังงานและปลดปล่อย GPU สำหรับงานคู่ขนาน

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

รุ่น INT8 palettized (180 MB, cosine similarity > 0.999) เป็นค่าเริ่มต้น ส่วนรุ่น INT4 (90 MB) มีให้ใช้สำหรับการดีพลอยที่จำกัดขนาด

โหมดสตรีมมิ่ง

โหมดสตรีมมิ่งใช้ VAD (การตรวจจับกิจกรรมเสียงพูด) เพื่อตัดเสียงออกเป็นช่วง ๆ และถอดเสียงทีละส่วน เหมาะกับการบันทึกเสียงยาว ๆ หรือการประมวลผลแบบเรียลไทม์

# 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

แฟล็ก --max-segment ควบคุมระยะเวลาสูงสุดของ chunk เป็นวินาที แฟล็ก --partial เปิดการแสดงผลลัพธ์บางส่วน โดยแสดงคำตามที่ถูกถอดออกมา

ฟอร์แมตที่รองรับ

Qwen3-ASR รองรับฟอร์แมตเสียงต่อไปนี้ ทุกอินพุตจะถูกสุ่มตัวอย่างใหม่เป็น 16 kHz mono ภายในโดยอัตโนมัติ

ข้อสำคัญ

โมเดลถูกดาวน์โหลดจาก HuggingFace ในการใช้งานครั้งแรกและถูกแคชไว้ที่ ~/Library/Caches/qwen3-speech/ โมเดล 0.6B แบบ 4-bit มีขนาดประมาณ 1.5 GB

หากต้องการคู่มือเลือกแบบเจาะจง ดู Qwen3-ASR vs Whisper: ความแม่นยำ ความเร็ว และหน่วยความจำ

การยกเลิกแบบร่วมมือ

สำหรับการถอดเสียงด้วย MLX เมธอด Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) จะโยน CancellationError เมื่อตรวจพบการยกเลิกงานก่อนการสกัดคุณลักษณะ การเข้ารหัส การเติมข้อมูลล่วงหน้าให้ตัวถอดรหัส หรือขั้นตอนการถอดรหัส งานที่ส่งไปยัง GPU แล้วอาจทำงานจนเสร็จ API แบบซิงโครนัส transcribe และ transcribeBatch ยังคงไม่โยนข้อผิดพลาดและไม่สนใจการยกเลิกงาน speech-server ใช้จุดเรียกเข้าที่รองรับการยกเลิกสำหรับ Qwen3-ASR

ขีดจำกัดแคช MLX

การโหลด Qwen3-ASR จะจำกัดพูลบัฟเฟอร์ Metal ที่นำกลับมาใช้ได้ของ MLX ซึ่งใช้ร่วมกันทั้งโปรเซส: min(1 GiB, RAM / 8) สำหรับ 0.6B และ min(4 GiB, RAM / 4) สำหรับ 1.7B โมเดล MLX อื่นใช้พูลนี้ร่วมกัน ขีดจำกัดนี้ใช้กับบัฟเฟอร์ชั่วคราวที่เก็บในแคช ไม่ใช่น้ำหนักที่ใช้งานอยู่หรือหน่วยความจำรวมของโปรเซส

ขีดจำกัดจริงคือค่าต่ำสุดระหว่าง MLX.Memory.cacheLimit ที่ผู้เรียกกำหนดไว้กับขีดจำกัดของอินสแตนซ์ ASR ที่โหลดอยู่ทั้งหมด สามารถยกเลิกการโหลดอินสแตนซ์ในลำดับใดก็ได้ เมื่อยกเลิกการโหลดหรือทำลายอินสแตนซ์สุดท้าย จะคืนค่าขีดจำกัดของผู้เรียก หากผู้เรียกกำหนดขีดจำกัดที่เข้มงวดกว่าในขณะที่โมเดลยังโหลดอยู่ ค่านั้นจะยังคงอยู่

การถอดเสียงจากอินพุตเดียวจะปล่อยบัฟเฟอร์ที่นำกลับมาใช้ได้เมื่อดีโคเดอร์คืนค่าหรือโยนข้อผิดพลาด รวมถึงเมื่อยกเลิกระหว่างการถอดรหัส อาร์เรย์ที่ใช้งานอยู่และน้ำหนักโมเดลยังคงโหลดอยู่ ดีโคเดอร์แบบ greedy ของ transcribeBatch จะเก็บพูลที่มีขีดจำกัดไว้ระหว่างแบตช์ ตัวเลือก API และแฟล็ก CLI ไม่เปลี่ยนแปลง

การล้างพูลบัฟเฟอร์ช่วยลดหน่วยความจำที่เก็บไว้ แต่คำขอถัดไปต้องจัดสรรใหม่ จึงอาจทำให้คำขอสั้นใช้เวลานานขึ้น การรอให้งานตัวถอดรหัสที่ส่งไปแล้วเสร็จสิ้นช่วยให้การล้างหน่วยความจำแน่นอน รวมถึงเมื่อยกเลิกด้วย เวลาแฝงและหน่วยความจำของโปรเซสขึ้นอยู่กับฮาร์ดแวร์ โมเดล และเสียง