Hibiki Zero-3B स्पीच अनुवाद (FR / ES / PT / DE → EN)
Hibiki Zero-3B Kyutai का स्ट्रीमिंग स्पीच-टू-स्पीच अनुवाद मॉडल है — इनपुट फ्रेंच, स्पेनिश, पुर्तगाली, या जर्मन में 24 kHz ऑडियो स्ट्रीम है; आउटपुट 24 kHz अंग्रेज़ी ऑडियो स्ट्रीम के साथ-साथ उसी 12.5 Hz फ्रेम दर पर एक समानांतर अंग्रेज़ी टेक्स्ट ट्रांसक्रिप्ट है। Moshi/Mimi मल्टीस्ट्रीम आर्किटेक्चर पर बनाया गया: एक सिंगल डिकोडर-ओनली ट्रांसफ़ॉर्मर स्रोत-ऑडियो कोडेक स्ट्रीम और लक्ष्य टेक्स्ट+ऑडियो स्ट्रीम्स को संयुक्त रूप से मॉडल करता है, इसलिए कोई अलग ASR + MT + TTS पाइपलाइन नहीं है। Soniqo बिल्ड पूरी तरह से Apple Silicon पर क्वांटाइज़्ड MLX safetensors (डिफ़ॉल्ट INT4, INT8 उपलब्ध) के रूप में चलता है। 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)
CLI
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
# इनर-मोनोलॉग टेक्स्ट टोकन IDs (रॉ — SPM डिकोड एक फ़ॉलो-अप है)
speech audio-translate input.wav -o out.wav --transcript
आर्किटेक्चर
Hibiki Zero-3B एक 3.1B-पैरामीटर डिकोडर-ओनली मल्टीस्ट्रीम ट्रांसफ़ॉर्मर है। मॉडल प्रति फ्रेम 33 स्ट्रीम पर संयुक्त रूप से अटेंड करता है: एक टेक्स्ट स्ट्रीम, 16 टार्गेट-ऑडियो कोडबुक्स (एजेंट का आउटपुट), और 16 सोर्स-ऑडियो कोडबुक्स (उपयोगकर्ता का इनपुट)। प्रत्येक 80 ms फ्रेम पर मॉडल एक छोटे 6-लेयर depformer के माध्यम से एक टेक्स्ट टोकन प्लस 16 ऑडियो कोड सैंपल करता है जो प्रति फ्रेम 16 सब-स्टेप्स चलाता है, प्रति टार्गेट कोडबुक एक, 9-स्लाइस शेड्यूल्ड MultiLinear प्रोजेक्शन के साथ।
ऑडियो कोडेक Mimi है 12.5 Hz / 16 कोडबुक्स पर। सोर्स ऑडियो को 16 सोर्स-स्ट्रीम कोडबुक्स में एनकोड किया जाता है (देरी [0, 2, 2, …, 2]); जनरेट किया गया टार्गेट ऑडियो 16 टार्गेट-स्ट्रीम कोडबुक्स को भरता है (समान देरी पैटर्न); Mimi द्वारा टार्गेट को 24 kHz अंग्रेज़ी PCM में डिकोड करने से पहले प्रति-कोडबुक अन-शिफ्ट लागू किया जाता है। टेम्पोरल बैकबोन 28 GQA लेयर्स है (dim = 2048, 16 क्वेरी हेड्स, 8 KV हेड्स, kv_repeat = 2, स्प्लिट-हाफ RoPE rope_concat, कोई कंडीशनर नहीं — Zero अनकंडीशनल वेरिएंट है)।
डिकोड लूप
Hibiki अनुवाद करने के लिए पर्याप्त सोर्स कॉन्टेक्स्ट एकत्रित करते समय SPM पैडिंग टोकन (id 3) उत्सर्जित करता है, फिर मेल खाते टार्गेट ऑडियो के साथ कॉन्टेंट टेक्स्ट टोकन, और अंत में text-EOS (id 2)। Swift ड्राइवर तब तक चलता है जब तक सोर्स विंडो के बाद EOS सैंपल न हो जाए, सुरक्षा सीमा के रूप में max(tSrc × 5/2, tSrc + 20) स्टेप्स पर सीमित। FLEURS-स्टाइल क्लिप्स पर आउटपुट लगभग इनपुट अवधि का 1.0–1.6× चलता है; कॉलर्स को output_duration == input_duration नहीं मानना चाहिए।
ऑटोरिग्रेसिव फ़ीडबैक पाथ गैर-स्पष्ट है: स्टेप t पर ट्रांसफ़ॉर्मर कैश इंडेक्स step पर टोकन पढ़ता है (सभी 33 स्ट्रीम्स में एकसमान, जब step ≤ delays[k] हो तो init-token प्रतिस्थापन के साथ); सैंपल किए गए टेक्स्ट + 16 टार्गेट कोड इंडेक्स step + 1 पर लिखे जाते हैं। यह अपस्ट्रीम Moshi lm.py को प्रतिबिंबित करता है जहाँ कैश स्कैटर से पहले state.offsets += 1 होता है। EOS (id 2) के लिए text_emb रो को वज़न-लोड समय पर रो 3 (PAD) पर अलियास किया जाता है, जो Kyutai के loaders.py:312 "implicitly replace early EOS with 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) |
16 kHz मानव-रिकॉर्ड की गई FLEURS स्पेनिश क्लिप्स Python अपस्ट्रीम और Swift पोर्ट दोनों में डिजेनरेट जनरेशन ट्रिगर करती हैं (Python EOS सैंपल किए बिना 1643 स्टेप्स / ~131 s का टूटा हुआ ऑडियो उत्सर्जित करता है)। Swift ES रिग्रेशन कैनरी 24 kHz TTS-जनरेटेड ऑडियो पर Kyutai के अपने नमूने स्पेस (kyutai/hibiki-zero-samples) से 5 s ट्रिम किए गए अंश का उपयोग करती है, जो प्रशिक्षण वितरण से मेल खाता है और साफ़ अंग्रेज़ी उत्पन्न करता है। यदि आप प्रोडक्शन में Hibiki Spanish फ़ीड कर रहे हैं, तो पहले 24 kHz पर रिसैंपल करें और लंबी क्लिप्स (5 s+) का उपयोग करें।
एनवायरनमेंट वेरिएबल्स
| वेरिएबल | प्रभाव |
|---|---|
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 मॉडल id को ओवरराइड करें। |
प्रदर्शन (M2 Max, MLX 4-bit)
| मीट्रिक | ग्रीडी | सैंपल्ड |
|---|---|---|
| प्रति-स्टेप लेटेंसी | ~75 ms | ~95 ms |
| 3.54 s FR सोर्स के लिए वॉल-क्लॉक | ~5 s | ~7 s |
| आउटपुट अवधि | 1.0–1.6× सोर्स | 1.0–1.6× सोर्स |
ज्ञात सीमाएँ
translateStream()एक सिंगल फ़ाइनल चंक उत्सर्जित करता है। स्ट्रीमिंग एंट्री पॉइंट वर्तमान में ऑफ़लाइनtranslate()को रैप करता है। ट्रू पर-चंक Mimi स्ट्रीमिंग डिकोड एक v2 फ़ॉलो-अप है।- कोई SentencePiece टेक्स्ट डिकोडर नहीं।
--transcriptफ्लैग रॉ टोकन IDs प्रिंट करता है। SPM डिकोड वायरिंग एक फ़ॉलो-अप है। - सैंपल्ड मोड ग्रीडी की तुलना में स्पष्ट रूप से अधिक नॉइज़ी है। पुनरुत्पादक रन के लिए
HIBIKI_GREEDY=1का उपयोग करें। - केवल क्वांटाइज़ेशन। रेपो वर्तमान में Zero-3B 4-bit और 8-bit शिप करता है; 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