Hibiki Zero-3B 语音翻译 (FR / ES / PT / DE → EN)

Hibiki Zero-3B 是 Kyutai 的流式语音到语音翻译模型——输入为法语、西班牙语、葡萄牙语或德语的 24 kHz 音频流;输出为 24 kHz 英语音频流以及一份在同一 12.5 Hz 帧率下并行生成的英文文本转录。基于 Moshi/Mimi 多流架构:单个 decoder-only Transformer 同时建模源音频编解码流和目标文本+音频流,因此无需单独的 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)

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

# 内心独白文本 token ID(原始——SPM 解码是后续工作)
speech audio-translate input.wav -o out.wav --transcript

架构

Hibiki Zero-3B 是一个 31 亿参数的 decoder-only 多流 Transformer。模型在每帧上联合关注 33 个流:一个文本流、16 个目标音频码本(agent 的输出)和 16 个源音频码本(用户的输入)。在每 80 ms 帧,模型通过一个小型的 6 层 depformer 采样 1 个文本 token 加 16 个音频码;depformer 每帧运行 16 个子步(每个目标码本一个),并使用 9 切片的 scheduled 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,无 conditioner——Zero 是无条件变体)。

解码循环

Hibiki 在累积足够的源上下文以进行翻译时会发射 SPM padding token(id 3),然后是带匹配目标音频的内容文本 token,最后是 text-EOS(id 2)。Swift 驱动会运行直到在源窗口之后采样到 EOS 为止,并以 max(tSrc × 5/2, tSrc + 20) 步作为安全上限。在 FLEURS 风格的片段上,输出时长约为输入时长的 1.0–1.6 倍;调用方不应假设 output_duration == input_duration

自回归反馈路径并不直观:在第 t 步,Transformer 在缓存索引 step 处读取 token(在所有 33 个流上统一,当 step ≤ delays[k] 时采用初始 token 替换);采样得到的文本 + 16 个目标码会写入索引 step + 1。这与上游 Moshi lm.py 一致,其中 state.offsets += 1 发生在缓存散布之前。EOS(id 2)的 text_emb 行在权重加载时被别名到第 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 西班牙语属于分布外

16 kHz 人工录制的 FLEURS 西班牙语片段在 Python 上游和 Swift 移植版中都会触发退化生成(Python 在不采样 EOS 的情况下输出 1643 步 / ~131 秒的损坏音频)。Swift 的 ES 回归基准用例使用了从 Kyutai 自己的样本空间(kyutai/hibiki-zero-samples)截取的 5 秒 24 kHz TTS 合成音频片段,这与训练分布匹配,能产出干净的英文。如果你在生产中向 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 秒法语源的挂钟时间~5 秒~7 秒
输出时长1.0–1.6× 源时长1.0–1.6× 源时长

已知限制

参考资料