Tradução de Fala Hibiki Zero-3B (FR / ES / PT / DE → EN)

O Hibiki Zero-3B é o modelo de tradução de fala para fala em streaming da Kyutai — a entrada é um fluxo de áudio a 24 kHz em francês, espanhol, português ou alemão; a saída é um fluxo de áudio em inglês a 24 kHz mais uma transcrição em texto em inglês paralela na mesma taxa de quadros de 12,5 Hz. Construído sobre a arquitetura multistream Moshi/Mimi: um único transformer decoder-only modela conjuntamente o fluxo do codec de áudio fonte e os fluxos de texto+áudio de destino, então não há um pipeline separado de ASR + MT + TTS. O build da Soniqo roda como safetensors MLX quantizados (INT4 padrão, INT8 disponível) inteiramente em Apple Silicon. CC-BY-4.0.

Quando usar Hibiki vs. ASR + MADLAD

O estilo pipe ASR + MADLAD (speech transcribe | speech translate) oferece mais de 400 idiomas, mas adiciona a latência de ida e volta de três modelos. O Hibiki é um modelo end-to-end e preserva a prosódia — escolha-o quando precisar de fala ao vivo no idioma de destino em vez de apenas texto.

Início Rápido

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 — detectado automaticamente, mas passe para os metadados
)
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

# Modo determinístico (usado pelos canários de regressão da CI)
HIBIKI_GREEDY=1 speech audio-translate input_fr.wav -o out_en.wav --source-lang fr

# IDs de tokens de texto do monólogo interno (raw — decodificação SPM é um follow-up)
speech audio-translate input.wav -o out.wav --transcript

Arquitetura

O Hibiki Zero-3B é um transformer decoder-only multistream de 3,1B parâmetros. O modelo atende conjuntamente sobre 33 fluxos por quadro: um fluxo de texto, 16 codebooks de áudio de destino (a saída do agente) e 16 codebooks de áudio fonte (a entrada do usuário). A cada quadro de 80 ms o modelo amostra um token de texto mais 16 códigos de áudio via um pequeno depformer de 6 camadas que executa 16 sub-passos por quadro, um por codebook de destino, com uma projeção MultiLinear agendada de 9 fatias.

O codec de áudio é o Mimi a 12,5 Hz / 16 codebooks. O áudio fonte é codificado nos 16 codebooks do fluxo fonte (delay [0, 2, 2, …, 2]); o áudio de destino gerado preenche os 16 codebooks do fluxo de destino (mesmo padrão de delay); un-shift por codebook é aplicado antes que o Mimi decodifique o destino de volta para PCM em inglês a 24 kHz. O backbone temporal são 28 camadas GQA (dim = 2048, 16 query heads, 8 KV heads, kv_repeat = 2, split-half RoPE rope_concat, sem condicionador — Zero é a variante incondicional).

Loop de Decodificação

O Hibiki emite tokens de padding SPM (id 3) enquanto acumula contexto fonte suficiente para traduzir, depois tokens de texto de conteúdo com áudio de destino correspondente, e finalmente text-EOS (id 2). O driver Swift executa até que EOS seja amostrado além da janela fonte, com limite de max(tSrc × 5/2, tSrc + 20) passos como limite de segurança. A saída tem aproximadamente 1,0–1,6× a duração da entrada em clipes estilo FLEURS; os chamadores não devem assumir output_duration == input_duration.

O caminho de feedback autorregressivo não é óbvio: no passo t o transformer lê tokens no índice de cache step (uniforme em todos os 33 fluxos, com substituição de token de inicialização quando step ≤ delays[k]); o texto amostrado + 16 códigos de destino são escritos no índice step + 1. Isso espelha o upstream Moshi lm.py onde state.offsets += 1 ocorre antes do scatter do cache. A linha text_emb para EOS (id 2) é mapeada como alias para a linha 3 (PAD) no momento do carregamento dos pesos, espelhando o patch "implicitly replace early EOS with PAD" do loaders.py:312 da Kyutai — qualquer EOS amostrado durante a janela de streaming de áudio é inofensivo, apenas o EOS pós-fonte termina o loop.

Variantes do Modelo

VarianteQuantizaçãoTamanhoComputeHuggingFace
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

Cobertura de Idiomas

O Hibiki Zero-3B é treinado em francês, espanhol, português e alemão → inglês. O driver Swift detecta automaticamente o idioma fonte; a flag --source-lang é apenas metadado.

FonteStatusExemplo de saída greedy
FRCanário E2E estrito"so it's a ski route." (de "Pensez à l'itinéraire de ski…")
ESCanário E2E estrito"gentlemen, the data is worrying." (sample europarl do Hibiki)
PTApenas warn (fiel ao conteúdo, menor recall de palavras-chave)"the fifth c is p of the martyr." (FLEURS PT)
DEApenas warn (fiel ao conteúdo, menor recall de palavras-chave)"that didn't seem to me to be useful." (FLEURS DE)
FLEURS Espanhol está fora da distribuição

Clipes do FLEURS em espanhol gravados por humanos a 16 kHz disparam geração degenerada tanto no upstream Python quanto no port Swift (o Python emite 1643 passos / ~131 s de áudio quebrado sem amostrar EOS). O canário de regressão ES em Swift usa um trecho recortado de 5 s do próprio space de samples da Kyutai (kyutai/hibiki-zero-samples) em áudio gerado por TTS a 24 kHz, que corresponde à distribuição de treino e produz inglês limpo. Se você estiver alimentando o Hibiki com espanhol em produção, pré-amostre para 24 kHz e use clipes mais longos (5 s+).

Variáveis de Ambiente

VariávelEfeito
HIBIKI_GREEDY=1Força decodificação argmax tanto para texto quanto para áudio de destino. Reprodutível — usado pelos canários estritos da CI.
HIBIKI_E2E=1Habilita os casos de teste E2E (requer o download do modelo de ~2,7 GB).
HIBIKI_STRICT_ALL=1Promove os testes PT/DE de apenas warn para estritos.
HIBIKI_LENIENT=1Rebaixa os testes FR/ES de estritos para apenas warn (somente para depuração).
HIBIKI_MODEL_ID=<repo>Sobrescreve o ID do modelo padrão aufklarer/Hibiki-Zero-3B-MLX-4bit.

Desempenho (M2 Max, MLX 4-bit)

MétricaGreedyAmostrado
Latência por passo~75 ms~95 ms
Tempo de relógio para 3,54 s de fonte FR~5 s~7 s
Duração da saída1,0–1,6× fonte1,0–1,6× fonte

Limitações Conhecidas

Referências