المحاذاة الإجبارية

يوفّر Qwen3-ForcedAligner محاذاة طوابع زمنية على مستوى الكلمة للصوت. يُجري تمريرة أمامية واحدة غير ذاتيّة الانحدار لمحاذاة كل كلمة في نصّ تفريغ مع موضعها الدقيق في الموجة الصوتية.

كيف يعمل

يستخدم المحاذي محاذاة CTC (Connectionist Temporal Classification) مع خطوة تصحيح رتابة LIS (Longest Increasing Subsequence). يضمن ذلك أن تبقى الطوابع الزمنية مرتّبة دائماً، حتى عندما يحتوي خرج CTC الخام على تباينات طفيفة.

الخاصيةالقيمة
طريقة المحاذاةCTC مع تصحيح رتابة LIS
دقّة الطوابع الزمنية80 مللي ثانية
فئات الخرج5000
وضع الاستدلالغير ذاتيّ الانحدار (تمريرة أمامية واحدة)

استخدام CLI

محاذاة ملف صوتي. إن لم يُقدَّم نص تفريغ، فإنّ الصوت يُفرَّغ تلقائياً أوّلاً باستخدام Qwen3-ASR:

.build/release/speech align recording.wav

قدّم نص تفريغ معروفاً لتخطّي التفريغ التلقائي:

.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"

الخيارات

# حدّد نص التفريغ مباشرةً
.build/release/speech align recording.wav --text "known transcript"

# اختر نموذج ASR لخطوة التفريغ التلقائي
.build/release/speech align recording.wav --model 1.7b

# حدّد متغيّر نموذج المحاذي
.build/release/speech align recording.wav --aligner-model default

# عيّن اللغة
.build/release/speech align recording.wav --language en

دعم اللغات

مرّر --language بما يطابق لغة الصوت. النموذج مدرَّب رسمياً على 11 لغة (en, zh, ja, ko, es, fr, de, ru, it, pt, ar)؛ ويقطّع المعالج الأوّلي أيضاً المورفيمات اليابانية، والكلمات الكورية، والصينية حرفاً بحرف، والتايلانديّة واللاويّة والخميريّة والبورمية والتبتيّة بشكل أصيل عبر NLTokenizer من Apple. تُحفَظ علامات الدمج (matras الديفاناغارية وحروف العلّة التايلاندية وغيرها)، فتبقى كلمات مثل नमस्ते وสวัสดี سليمة.

متغيّرات النموذج

تتوفّر متغيّرات متعدّدة للنموذج، تُوازن بين الحجم والدقّة:

المتغيّرمعرّف النموذجالحجم
MLX 4-bit (افتراضي)aufklarer/Qwen3-ForcedAligner-0.6B-4bit~979 MB
MLX 8-bitaufklarer/Qwen3-ForcedAligner-0.6B-8bit~1.3 GB
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16~1.8 GB
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4~662 MB
CoreML INT8aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8~1.1 GB

اختر متغيّراً عبر --aligner-model:

.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit

صيغة الخرج

يُخرج المحاذي سطراً واحداً لكل كلمة مع طابعَي زمن البداية والنهاية بالثواني:

[0.24 - 0.48] The
[0.48 - 0.72] quick
[0.72 - 1.04] brown
[1.04 - 1.36] fox
[1.36 - 1.68] jumps
[1.68 - 1.92] over
[1.92 - 2.08] the
[2.08 - 2.40] lazy
[2.40 - 2.80] dog

يشير كل زوج من الطوابع الزمنية إلى وقت بداية الكلمة ونهايتها في الصوت، بدقّة 80 مللي ثانية.

التعامل مع الصوت الطويل

تستطيع رأس التصنيف من حيث المبدأ معالجة ما يصل إلى 400 ثانية (5000 فئة × 80 مللي ثانية)، لكن في النموذج المنشور Qwen3-ForcedAligner-0.6B يكون النموذج مدرَّباً بشكل موثوق حتى نحو 270 ثانية. بعد تلك النقطة، يُصدر النموذج فهارس طوابع زمنية مشوّشة، وتقوم خطوة LIS بانهيار كل الكلمات المتأخّرة على الطابع الزمني نفسه.

تتولّى CLI ذلك تلقائياً: يُقسَّم الصوت الطويل عند نقطة الإشباع ويُعاد محاذاته. سترى رسالة من سطر واحد عند تفعيل التقسيم:

Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)

عيّن ALIGN_DEBUG=1 لتفريغ فهارس الطوابع الزمنية الخام مقابل المصحَّحة عند التحقيق في مخرجات مختلّة المحاذاة.

قيود معروفة: محتوى غير كلامي في البداية

عندما يبدأ الصوت بمحتوى غير كلامي (مقدّمة موسيقية أو صمت طويل)، يميل النموذج إلى وضع طابع الكلمة الأولى قرب الثانية صفر لأنّ المصنّف ليس لديه مفهوم "الكلام لم يبدأ بعد". الحلّ البديل: اقتطع المحتوى غير الكلامي في البداية قبل المحاذاة، أو شغّل تمريرة VAD مسبقة باستخدام Silero للعثور على بداية الكلام الفعلية.

مهمّ

عند عدم تمرير --text، يُجري المحاذي أوّلاً تمريرة تفريغ كاملة بـ Qwen3-ASR ثم يحاذي النص الناتج. هذا يعني أنّ التشغيل الأوّل يحمّل كلاً من نموذج ASR ونموذج المحاذي. تمرير --text يتخطّى خطوة ASR ولا يحمّل سوى المحاذي.