ترجمة الكلام بنموذج Hibiki Zero-3B (FR / ES / PT / DE → EN)

Hibiki Zero-3B هو نموذج الترجمة من كلام إلى كلام بالبث الحي من Kyutai — المدخل تيار صوتي بتردد 24 كيلوهرتز بالفرنسية أو الإسبانية أو البرتغالية أو الألمانية، والمخرج تيار صوتي إنجليزي بتردد 24 كيلوهرتز إلى جانب نص إنجليزي موازٍ بنفس معدل الإطارات البالغ 12.5 هرتز. مبني على بنية Moshi/Mimi متعددة التيارات: محوّل واحد بفك تشفير فقط يمثل في آنٍ واحد تيار تشفير الصوت المصدري وتياري النص والصوت الهدف، فلا حاجة لخط أنابيب منفصل يجمع بين ASR وMT وTTS. إصدار Soniqo يعمل بصيغة MLX safetensors المضغوطة (الافتراضي INT4، وINT8 متاح) كاملاً على Apple Silicon. ترخيص CC-BY-4.0.

متى تختار Hibiki مقابل ASR + MADLAD

خط الأنابيب بأسلوب ASR + MADLAD (speech transcribe | speech translate) يمنحك أكثر من 400 لغة لكنه يضيف زمن جولة ثلاثة نماذج. أما Hibiki فهو نموذج واحد من الطرف إلى الطرف ويحافظ على نبرة الكلام — استخدمه عندما تحتاج إلى كلام مباشر في اللغة الهدف وليس مجرد نص.

البداية السريعة

import HibikiTranslate
import AudioCommon

let model = try await HibikiTranslateModel.fromPretrained()

let pcm = try AudioFileLoader.load(url: input, targetSampleRate: 24000)
let (englishAudio, textTokens) = model.translate(
    sourceAudio: pcm,
    sourceLanguage: .fr     // .fr / .es / .pt / .de — يُكتشف تلقائيًا لكن مرّره لأغراض البيانات الوصفية
)
try WAVWriter.write(samples: englishAudio, sampleRate: 24000, to: output)

واجهة سطر الأوامر

speech audio-translate input_fr.wav -o out_en.wav --source-lang fr
speech audio-translate input_es.wav -o out_en.wav --source-lang es --quantization 8bit
speech audio-translate input_pt.wav -o out_en.wav --source-lang pt --verbose

# الوضع الحتمي (يُستخدم في اختبارات التراجع الذهبية في CI)
HIBIKI_GREEDY=1 speech audio-translate input_fr.wav -o out_en.wav --source-lang fr

# معرّفات رموز النص للحوار الداخلي (خام — فك ترميز SPM متابعة لاحقًا)
speech audio-translate input.wav -o out.wav --transcript

البنية المعمارية

Hibiki Zero-3B هو محوّل متعدد التيارات بفك تشفير فقط يضم 3.1 مليار معامل. يُولي النموذج اهتمامًا مشتركًا بـ33 تيارًا لكل إطار: تيار نصي واحد، و16 كتاب رموز للصوت الهدف (مخرج الوكيل)، و16 كتاب رموز للصوت المصدر (مدخل المستخدم). في كل إطار مدته 80 مللي ثانية يأخذ النموذج عينة من رمز نصي واحد بالإضافة إلى 16 رمزًا صوتيًا عبر depformer صغير من 6 طبقات يجري 16 خطوة فرعية لكل إطار، واحدة لكل كتاب رموز هدف، باستخدام إسقاط MultiLinear مُجدوَل من 9 شرائح.

برنامج الترميز الصوتي هو Mimi بتردد 12.5 هرتز و16 كتاب رموز. يُشفَّر الصوت المصدري في كتب رموز التيار المصدري الستة عشر (التأخير [0, 2, 2, …, 2])؛ ويملأ الصوت الهدف المُولَّد كتب رموز التيار الهدف الستة عشر (بنفس نمط التأخير)؛ ويُطبَّق إلغاء الإزاحة لكل كتاب رموز قبل أن يفك Mimi ترميز الهدف عائدًا إلى صوت PCM إنجليزي بتردد 24 كيلوهرتز. العمود الفقري الزمني هو 28 طبقة GQA (dim = 2048، 16 رأس استعلام، 8 رؤوس KV، kv_repeat = 2، RoPE بنصف-تقسيم rope_concat، بدون مكيّف — Zero هو الإصدار غير المشروط).

حلقة فك التشفير

يصدر Hibiki رموز حشو SPM (id 3) أثناء تجميع سياق مصدري كافٍ للترجمة، ثم رموز نصية بمحتوى مع صوت هدف مطابق، وأخيرًا EOS النصي (id 2). يعمل سائق Swift حتى يتم اختيار EOS بعد نافذة المصدر، بسقف max(tSrc × 5/2, tSrc + 20) خطوة كحد أمان. تبلغ مدة المخرجات نحو 1.0–1.6× مدة المدخل في مقاطع نمط FLEURS؛ ينبغي للمستدعين عدم افتراض أن output_duration == input_duration.

مسار التغذية الراجعة التلقائي ليس بديهيًا: في الخطوة t يقرأ المحوّل الرموز عند مؤشر الذاكرة المؤقتة step (موحد عبر التيارات الـ33 جميعًا، مع استبدال رمز التهيئة عندما step ≤ delays[k])؛ ويُكتب النص المُعاين + رموز الهدف الستة عشر عند المؤشر step + 1. يعكس ذلك ما هو موجود في Moshi lm.py الأصلي حيث يحدث state.offsets += 1 قبل نثر الذاكرة المؤقتة. صف text_emb لـ EOS (id 2) موصول بالصف 3 (PAD) أثناء تحميل الأوزان، بما يحاكي ترقيع Kyutai في loaders.py:312 الذي "يستبدل ضمنيًا EOS المبكر بـ PAD" — أي EOS تمت معاينته خلال نافذة بث الصوت غير ضار، فقط EOS اللاحق للمصدر هو الذي ينهي الحلقة.

إصدارات النموذج

الإصدارالضغط الكميالحجمالحوسبةHuggingFace
Hibiki Zero-3BINT4~2.7 GBMetal GPU (MLX)aufklarer/Hibiki-Zero-3B-MLX-4bit
Hibiki Zero-3BINT8~3.9 GBMetal GPU (MLX)aufklarer/Hibiki-Zero-3B-MLX-8bit

اللغات المدعومة

تم تدريب Hibiki Zero-3B على الفرنسية والإسبانية والبرتغالية والألمانية → الإنجليزية. يكتشف سائق Swift اللغة المصدر تلقائيًا؛ والعلم --source-lang للبيانات الوصفية فقط.

المصدرالحالةعينة مخرج بالوضع الحتمي
FRاختبار ذهبي صارم E2E"so it's a ski route." (من "Pensez à l'itinéraire de ski…")
ESاختبار ذهبي صارم E2E"gentlemen, the data is worrying." (عينة Hibiki europarl)
PTتحذير فقط (مخلص للمحتوى، استرجاع كلمات مفتاحية أقل)"the fifth c is p of the martyr." (FLEURS PT)
DEتحذير فقط (مخلص للمحتوى، استرجاع كلمات مفتاحية أقل)"that didn't seem to me to be useful." (FLEURS DE)
FLEURS الإسبانية خارج التوزيع

تؤدي مقاطع FLEURS الإسبانية المسجّلة بشريًا بتردد 16 كيلوهرتز إلى توليد متدهور في كل من نسخة Python الأصلية ونقل Swift (تصدر Python 1643 خطوة / ~131 ثانية من الصوت المكسور بدون أخذ عينة EOS). يستخدم اختبار التراجع الذهبي ES في Swift مقتطفًا مقصوصًا مدته 5 ثوانٍ من فضاء عينات Kyutai الخاص (kyutai/hibiki-zero-samples) كصوت TTS بتردد 24 كيلوهرتز، وهو ما يتطابق مع توزيع التدريب وينتج إنجليزية نظيفة. إذا كنت تغذي Hibiki بالإسبانية في الإنتاج، فأعد العينة مسبقًا إلى 24 كيلوهرتز والتزم بالمقاطع الأطول (5 ثوانٍ فأكثر).

متغيرات البيئة

المتغيرالأثر
HIBIKI_GREEDY=1إجبار فك التشفير بـ argmax لكل من النص والصوت الهدف. قابل للتكرار — يُستخدم في اختبارات CI الذهبية الصارمة.
HIBIKI_E2E=1تفعيل حالات اختبار E2E (يتطلب تحميل النموذج بحجم ~2.7 GB).
HIBIKI_STRICT_ALL=1ترقية اختبارات PT/DE من تحذير فقط إلى صارمة.
HIBIKI_LENIENT=1تخفيض اختبارات FR/ES من الصارمة إلى تحذير فقط (لأغراض التصحيح فقط).
HIBIKI_MODEL_ID=<repo>تجاوز معرف النموذج الافتراضي aufklarer/Hibiki-Zero-3B-MLX-4bit.

الأداء (M2 Max، MLX 4-بت)

المقياسالوضع الحتميالوضع العشوائي
زمن كل خطوة~75 مللي ثانية~95 مللي ثانية
الزمن الكلي لمصدر فرنسي مدته 3.54 ثانية~5 ثوانٍ~7 ثوانٍ
مدة المخرج1.0–1.6× المصدر1.0–1.6× المصدر

القيود المعروفة

المراجع