Hibiki Zero-3B Sprachübersetzung (FR / ES / PT / DE → EN)
Hibiki Zero-3B ist Kyutais Modell zur Streaming-Sprach-zu-Sprach-Übersetzung — die Eingabe ist ein 24-kHz-Audiostream auf Französisch, Spanisch, Portugiesisch oder Deutsch; die Ausgabe ist ein 24-kHz-Englisch-Audiostream plus ein paralleles englisches Texttranskript bei derselben Bildrate von 12,5 Hz. Aufgebaut auf der Moshi/Mimi-Multistream-Architektur: Ein einzelner Decoder-only-Transformer modelliert gemeinsam den Quell-Audio-Codec-Stream und die Ziel-Text+Audio-Streams, sodass es keine separate ASR + MT + TTS-Pipeline gibt. Der Soniqo-Build läuft als quantisierte MLX-Safetensors (INT4 standardmäßig, INT8 verfügbar) vollständig auf Apple Silicon. CC-BY-4.0.
Pipeline-artiges ASR + MADLAD (speech transcribe | speech translate) bietet Ihnen 400+ Sprachen, fügt aber die Round-Trip-Latenz von drei Modellen hinzu. Hibiki ist ein einziges Modell von Ende zu Ende und bewahrt die Prosodie — wählen Sie es, wenn Sie Live-Sprache in der Zielsprache benötigen und nicht nur Text.
Schnellstart
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 — automatisch erkannt, aber für die Metadaten übergeben
)
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
# Deterministischer Modus (verwendet von den CI-Regressions-Kanaren)
HIBIKI_GREEDY=1 speech audio-translate input_fr.wav -o out_en.wav --source-lang fr
# Inner-Monolog-Text-Token-IDs (roh — SPM-Decode ist ein Follow-up)
speech audio-translate input.wav -o out.wav --transcript
Architektur
Hibiki Zero-3B ist ein Decoder-only-Multistream-Transformer mit 3,1 Milliarden Parametern. Das Modell verarbeitet gemeinsam 33 Streams pro Frame: einen Text-Stream, 16 Ziel-Audio-Codebücher (die Ausgabe des Agents) und 16 Quell-Audio-Codebücher (die Eingabe des Nutzers). Bei jedem 80-ms-Frame sampelt das Modell ein Texttoken plus 16 Audiocodes über einen kleinen 6-schichtigen Depformer, der 16 Sub-Schritte pro Frame ausführt, einen pro Ziel-Codebuch, mit einer 9-Slice-skalierten MultiLinear-Projektion.
Der Audiocodec ist Mimi bei 12,5 Hz / 16 Codebüchern. Quell-Audio wird in die 16 Quell-Stream-Codebücher kodiert (Verzögerung [0, 2, 2, …, 2]); das generierte Ziel-Audio füllt die 16 Ziel-Stream-Codebücher (gleiches Verzögerungsmuster); pro Codebuch wird eine Rückverschiebung angewendet, bevor Mimi das Ziel zurück zu 24-kHz-Englisch-PCM dekodiert. Das zeitliche Rückgrat besteht aus 28 GQA-Schichten (dim = 2048, 16 Query-Heads, 8 KV-Heads, kv_repeat = 2, Split-Half-RoPE rope_concat, kein Konditionierer — Zero ist die unkonditionierte Variante).
Decode-Schleife
Hibiki gibt SPM-Padding-Tokens (id 3) aus, während es genügend Quellkontext zum Übersetzen sammelt, dann inhaltliche Texttokens mit passendem Ziel-Audio und schließlich Text-EOS (id 2). Der Swift-Treiber läuft bis EOS jenseits des Quellfensters gesampelt wird, begrenzt auf max(tSrc × 5/2, tSrc + 20) Schritte als Sicherheitsgrenze. Die Ausgabe läuft ungefähr 1,0–1,6× die Eingabedauer bei FLEURS-artigen Clips; Aufrufer sollten nicht davon ausgehen, dass output_duration == input_duration.
Der autoregressive Feedback-Pfad ist nicht offensichtlich: Bei Schritt t liest der Transformer Tokens am Cache-Index step (einheitlich über alle 33 Streams, mit Init-Token-Substitution wenn step ≤ delays[k]); das gesampelte Text + 16 Ziel-Codes werden am Index step + 1 geschrieben. Dies spiegelt das Upstream-Moshi lm.py wider, wo state.offsets += 1 vor dem Cache-Scatter erfolgt. Die text_emb-Zeile für EOS (id 2) wird beim Laden der Gewichte auf Zeile 3 (PAD) aliased, was Kyutais Patch loaders.py:312 "implicitly replace early EOS with PAD" widerspiegelt — jedes während des Audio-Streaming-Fensters gesampelte EOS ist harmlos, nur EOS nach der Quelle beendet die Schleife.
Modellvarianten
| Variante | Quantisierung | Größe | Berechnung | 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 |
Sprachunterstützung
Hibiki Zero-3B ist auf Französisch, Spanisch, Portugiesisch und Deutsch → Englisch trainiert. Der Swift-Treiber erkennt die Quellsprache automatisch; das Flag --source-lang ist nur Metadaten.
| Quelle | Status | Beispiel-Greedy-Ausgabe |
|---|---|---|
| FR | Strikter E2E-Kanarienvogel | "so it's a ski route." (aus "Pensez à l'itinéraire de ski…") |
| ES | Strikter E2E-Kanarienvogel | "gentlemen, the data is worrying." (Hibiki europarl-Beispiel) |
| PT | Nur Warnung (inhaltstreu, geringere Schlüsselwort-Erfassung) | "the fifth c is p of the martyr." (FLEURS PT) |
| DE | Nur Warnung (inhaltstreu, geringere Schlüsselwort-Erfassung) | "that didn't seem to me to be useful." (FLEURS DE) |
16-kHz menschlich aufgezeichnete FLEURS-Spanisch-Clips lösen entartete Generierung sowohl im Python-Upstream als auch im Swift-Port aus (Python gibt 1643 Schritte / ~131 s defektes Audio aus, ohne EOS zu sampeln). Der Swift-ES-Regressions-Kanarienvogel verwendet einen 5-s-gekürzten Auszug aus Kyutais eigenem Samples-Space (kyutai/hibiki-zero-samples) mit 24-kHz-TTS-generiertem Audio, der mit der Trainingsverteilung übereinstimmt und sauberes Englisch produziert. Wenn Sie Hibiki Spanisch in der Produktion einspeisen, resampeln Sie vorab auf 24 kHz und bleiben Sie bei längeren Clips (5 s+).
Umgebungsvariablen
| Variable | Wirkung |
|---|---|
HIBIKI_GREEDY=1 | Erzwingt Argmax-Decoding sowohl für Text als auch Ziel-Audio. Reproduzierbar — verwendet von den strikten CI-Kanarienvögeln. |
HIBIKI_E2E=1 | Aktiviert die E2E-Testfälle (erfordert den ~2,7 GB Modell-Download). |
HIBIKI_STRICT_ALL=1 | Stuft PT/DE-Tests von nur-Warnung auf strikt hoch. |
HIBIKI_LENIENT=1 | Stuft FR/ES-Tests von strikt auf nur-Warnung herab (nur Debugging). |
HIBIKI_MODEL_ID=<repo> | Überschreibt die Standard-Modell-ID aufklarer/Hibiki-Zero-3B-MLX-4bit. |
Leistung (M2 Max, MLX 4-bit)
| Metrik | Greedy | Gesampelt |
|---|---|---|
| Latenz pro Schritt | ~75 ms | ~95 ms |
| Wanduhrzeit für 3,54 s FR-Quelle | ~5 s | ~7 s |
| Ausgabedauer | 1,0–1,6× Quelle | 1,0–1,6× Quelle |
Bekannte Einschränkungen
translateStream()gibt einen einzigen finalen Chunk aus. Der Streaming-Einstiegspunkt umschließt derzeit das Offline-translate(). Echtes Per-Chunk-Mimi-Streaming-Decode ist ein v2-Follow-up.- Kein SentencePiece-Textdecoder. Das Flag
--transcriptgibt rohe Token-IDs aus. SPM-Decode-Verkabelung ist ein Follow-up. - Der gesampelte Modus ist merklich verrauschter als Greedy. Verwenden Sie
HIBIKI_GREEDY=1für reproduzierbare Läufe. - Nur Quantisierung. Das Repo liefert derzeit Zero-3B 4-bit und 8-bit; die 1B- und 2B-Hibiki-Varianten existieren im Konverter (
models/hibiki/export/convert.py), aber der Swift-Treiber zielt auf das GQA + rope_concat + nicht-konditionierte Layout von Zero-3B ab.
Referenzen
- Paper: High-Fidelity Simultaneous Speech-to-Speech Translation (Kyutai, 2025)
- Upstream-Code: kyutai-labs/hibiki
- Beispiele: kyutai/hibiki-zero-samples
- Lizenz: CC-BY-4.0