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)، يولّد رموز النص بشكل انحداري ذاتي |
الأداء
| Backend | RTF | الذروة في الذاكرة | ملاحظات |
|---|---|---|---|
| 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، عزل كل محرك في عملية. RTF < 1.0 = أسرع من الزمن الحقيقي.
نسخ النموذج
| النموذج | Backend | الحجم | 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 |
الاستخدام عبر 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 مونو داخليًا.
- WAV — PCM غير مضغوط
- M4A — صوت مُرمَّز بـ AAC
- MP3 — MPEG Layer III
- CAF — Apple Core Audio Format
تُنزَّل النماذج من 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.
يقلّل مسح مجموعة المخازن المؤقتة الذاكرة المحتفظ بها، لكنه يتطلب تخصيصات جديدة في الطلبات اللاحقة، لذا قد تستغرق الطلبات القصيرة وقتًا أطول. يضمن انتظار اكتمال عمل وحدة فك الترميز الذي أُرسل بالفعل تنظيفًا موثوقًا، بما في ذلك عند الإلغاء. يعتمد زمن الاستجابة وذاكرة العملية على الأجهزة والنموذج والصوت.