Hibiki Zero-3B 音声翻訳 (FR / ES / PT / DE → EN)
Hibiki Zero-3B は Kyutai によるストリーミング音声間翻訳モデルです。入力はフランス語、スペイン語、ポルトガル語、またはドイツ語の 24 kHz 音声ストリームで、出力は 24 kHz の英語音声ストリームと、同じ 12.5 Hz のフレームレートで並行する英語テキストの書き起こしです。Moshi/Mimi のマルチストリームアーキテクチャ上に構築されており、単一のデコーダ専用 Transformer がソース音声のコーデックストリームとターゲットのテキスト+音声ストリームを同時にモデル化するため、ASR + MT + TTS のパイプラインを分ける必要がありません。Soniqo ビルドは量子化された MLX safetensors (デフォルト INT4、INT8 も利用可能) として Apple Silicon 上で完全に動作します。CC-BY-4.0。
パイプライン型の ASR + MADLAD (speech transcribe | speech translate) は 400 以上の言語に対応しますが、3 つのモデルを経由する分のラウンドトリップ遅延が加わります。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
# 内的独白テキストのトークン ID (生 — SPM デコードは今後の対応)
speech audio-translate input.wav -o out.wav --transcript
アーキテクチャ
Hibiki Zero-3B は 3.1B パラメータのデコーダ専用マルチストリーム Transformer です。モデルは 1 フレームあたり 33 ストリームを同時にアテンションします: 1 つのテキストストリーム、16 のターゲット音声コードブック (エージェントの出力)、16 のソース音声コードブック (ユーザの入力) です。80 ms のフレームごとに、9 スライスのスケジュール済み MultiLinear 投影を伴って 1 フレームあたり 16 のサブステップ (ターゲットコードブックごとに 1 つ) を実行する小さな 6 層の depformer により、1 つのテキストトークンと 16 の音声コードがサンプリングされます。
音声コーデックは 12.5 Hz / 16 コードブックの Mimi です。ソース音声は 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) を出力し、続いて対応するターゲット音声と共に内容のあるテキストトークンを、最後にテキスト EOS (id 2) を出力します。Swift ドライバはソースウィンドウを越えて EOS がサンプリングされるまで実行し、安全上の上限として max(tSrc × 5/2, tSrc + 20) ステップでキャップされます。FLEURS 風のクリップでは、出力は入力長のおおよそ 1.0〜1.6 倍になります。呼び出し側は output_duration == input_duration を仮定すべきではありません。
自己回帰のフィードバック経路は直感的ではありません: ステップ t において、Transformer はキャッシュインデックス step のトークンを読み取り (33 ストリームすべてで統一、step ≤ delays[k] の場合は init-token に置き換えられる)、サンプリングされたテキスト + 16 のターゲットコードはインデックス step + 1 に書き込まれます。これは state.offsets += 1 がキャッシュスキャッタの前に発生するアップストリームの Moshi lm.py をミラーしたものです。EOS (id 2) に対する text_emb 行は重みロード時に行 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) |
16 kHz の人間が録音した FLEURS スペイン語クリップは、Python のアップストリームでも Swift 移植版でも退化した生成をトリガーします (Python は EOS をサンプリングせずに 1643 ステップ / 約 131 秒の壊れた音声を出力します)。Swift の ES リグレッションカナリアは、Kyutai 自身のサンプルスペース (kyutai/hibiki-zero-samples) から 24 kHz の TTS 生成音声を 5 秒トリミングした抜粋を使用しており、これは学習分布と一致し、クリーンな英語を生成します。本番で Hibiki にスペイン語を供給する場合は、事前に 24 kHz にリサンプリングし、長めのクリップ (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 モデル ID をオーバーライドします。 |
パフォーマンス (M2 Max、MLX 4-bit)
| 指標 | グリーディ | サンプリング |
|---|---|---|
| ステップあたりのレイテンシ | ~75 ms | ~95 ms |
| 3.54 秒の FR ソースに対するウォールクロック | ~5 s | ~7 s |
| 出力長 | ソースの 1.0〜1.6 倍 | ソースの 1.0〜1.6 倍 |
既知の制限
translateStream()は単一の最終チャンクを出力します。 ストリーミングエントリポイントは現在オフラインのtranslate()をラップしています。チャンクごとの真の Mimi ストリーミングデコードは v2 で対応します。- SentencePiece テキストデコーダがありません。
--transcriptフラグは生のトークン ID を出力します。SPM デコードの配線は今後対応します。 - サンプリングモードはグリーディと比べて明らかにノイズが多くなります。 再現性のある実行には
HIBIKI_GREEDY=1を使用してください。 - 量子化版のみ。 リポジトリは現在 Zero-3B の 4-bit と 8-bit を提供しています。Hibiki の 1B と 2B バリアントはコンバータ (
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