ترجمة الكلام بنموذج 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.
خط الأنابيب بأسلوب 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-3B | INT4 | ~2.7 GB | Metal GPU (MLX) | aufklarer/Hibiki-Zero-3B-MLX-4bit |
| Hibiki Zero-3B | INT8 | ~3.9 GB | Metal 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 الإسبانية المسجّلة بشريًا بتردد 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× المصدر |
القيود المعروفة
translateStream()يُصدر جزءًا نهائيًا واحدًا. نقطة دخول البث تغلّف حاليًا الدالة دون اتصالtranslate(). فك ترميز Mimi بالبث الحقيقي لكل جزء متابعة في الإصدار v2.- لا يوجد فاكّ نصي لـ SentencePiece. العلم
--transcriptيطبع معرّفات الرموز الخام. توصيل فك ترميز SPM متابعة لاحقة. - الوضع العشوائي أكثر ضوضاءً بشكل ملحوظ من الوضع الحتمي. استخدم
HIBIKI_GREEDY=1للتشغيلات القابلة للتكرار. - الضغط الكمي فقط. يشحن المستودع حاليًا Zero-3B بدقة 4-بت و8-بت؛ الإصداران 1B و2B من Hibiki موجودان في المحوّل (
models/hibiki/export/convert.py) لكن سائق Swift يستهدف بنية Zero-3B القائمة على GQA + rope_concat + غير المشروطة.
المراجع
- البحث: High-Fidelity Simultaneous Speech-to-Speech Translation (Kyutai، 2025)
- الكود الأصلي: kyutai-labs/hibiki
- العينات: kyutai/hibiki-zero-samples
- الترخيص: CC-BY-4.0