Qwen3-ASR

Qwen3-ASR نموذج حديث متعدّد اللغات للتعرّف الآلي على الكلام. يعمل على الجهاز بتسارع GPU عبر Metal باستخدام MLX، مع تكميم 4-bit لاستهلاك ذاكرة فعّال. متوفّر بنسختين بسعة 0.6B و1.7B معاملات.

سير المعالجة

يعالج خطّ استدلال Qwen3-ASR الصوت عبر أربع مراحل:

المرحلةالوصف
دخل الصوتصوت خام يُعاد أخذ عيّناته إلى 16 kHz مونو
طيف melسمات بنك فلاتر mel بـ 128 خانة مستخرجة من الموجة الصوتية
مرمِّز الصوتمحوّل بـ 18 طبقة وانتباه بالكتل، يحوّل أُطر mel إلى تضمينات صوتية
مفكّك النصمحوّل Qwen3 بـ 28 طبقة مع انتباه استعلامي مجموع (GQA) وتضمينات موضع دوّارة (RoPE)، يولّد رموز النص بشكل انحداري ذاتي

الأداء

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، عزل كل محرك في عملية. 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

واجهة 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 (Neural Engine)

شغّل مرمِّز الصوت على Neural Engine عبر CoreML، مع تشغيل مفكّك النص على 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 ذو اللوحة اللونية (180 MB، تشابه جيب التمام > 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 في أقصى مدّة للمقطع بالثواني. ويفعّل العَلَم --partial إخراج النتائج الجزئية، فيعرض الكلمات لحظة فكّ ترميزها.

الصيغ المدعومة

يقبل Qwen3-ASR الصيغ الصوتية التالية. يُعاد أخذ عيّنات كل دخل تلقائيًا إلى 16 kHz مونو داخليًا.

مهم

تُنزَّل النماذج من HuggingFace في أوّل استخدام وتُخزَّن مؤقّتًا في ~/Library/Caches/qwen3-speech/. يبلغ حجم نموذج 0.6B بـ 4-bit نحو 1.5 GB.

لدليل اختيار مركّز، راجع Qwen3-ASR vs Whisper: الدقة والسرعة والذاكرة.

الإلغاء التعاوني

في نسخ MLX، تطرح Qwen3ASRModel.transcribeCheckingCancellation(audio:sampleRate:options:) الخطأ CancellationError عند اكتشاف إلغاء المهمة قبل استخراج الميزات أو الترميز أو التهيئة الأولية لفك الترميز أو إحدى خطوات فك الترميز. قد يكتمل العمل الذي أُرسل بالفعل إلى GPU. تحتفظ واجهتا 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 المحملة. يمكن إلغاء تحميل المثيلات بأي ترتيب. عند إلغاء تحميل آخر مثيل أو تدميره، تُستعاد ميزانية المستدعي. ويُحافَظ على أي حد أكثر تقييدًا يحدده المستدعي أثناء تحميل النماذج.

يحرر نسخ مدخل واحد المخازن القابلة لإعادة الاستخدام عندما تعود دالة فك الترميز أو ترمي خطأ، بما في ذلك الإلغاء أثناء فك الترميز. تظل المصفوفات النشطة وأوزان النموذج محملة. يحتفظ مفكك الترميز الجشع في transcribeBatch بالمجموعة المحدودة بين الدفعات. لا تتغير خيارات API أو أعلام CLI.

يقلّل مسح مجموعة المخازن المؤقتة الذاكرة المحتفظ بها، لكنه يتطلب تخصيصات جديدة في الطلبات اللاحقة، لذا قد تستغرق الطلبات القصيرة وقتًا أطول. يضمن انتظار اكتمال عمل وحدة فك الترميز الذي أُرسل بالفعل تنظيفًا موثوقًا، بما في ذلك عند الإلغاء. يعتمد زمن الاستجابة وذاكرة العملية على الأجهزة والنموذج والصوت.