Hibiki Zero-3B — перевод речи (FR / ES / PT / DE → EN)

Hibiki Zero-3B — это модель потокового перевода речь-в-речь от Kyutai: на вход подаётся аудиопоток 24 кГц на французском, испанском, португальском или немецком языке; на выходе — англоязычный аудиопоток 24 кГц плюс параллельная английская текстовая транскрипция с той же частотой кадров 12,5 Гц. Построена на многопотоковой архитектуре Moshi/Mimi: единый трансформер только-декодер совместно моделирует кодек-поток исходного аудио и потоки целевого текста и аудио, поэтому отдельного конвейера 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

# ID токенов внутреннего монолога (сырые — декодирование SPM появится позже)
speech audio-translate input.wav -o out.wav --transcript

Архитектура

Hibiki Zero-3B — это многопотоковый трансформер только-декодер с 3,1 млрд параметров. Модель совместно обрабатывает 33 потока на каждый кадр: один текстовый поток, 16 кодбуков целевого аудио (вывод агента) и 16 кодбуков исходного аудио (ввод пользователя). На каждом кадре длительностью 80 мс модель сэмплирует один текстовый токен и 16 аудиокодов через небольшой 6-слойный depformer, выполняющий 16 подшагов на кадр, по одному на каждый целевой кодбук, с 9-срезной запланированной проекцией MultiLinear.

Аудиокодек — Mimi с частотой 12,5 Гц и 16 кодбуками. Исходное аудио кодируется в 16 кодбуков исходного потока (задержка [0, 2, 2, …, 2]); сгенерированное целевое аудио заполняет 16 кодбуков целевого потока (та же схема задержек); перед тем как Mimi декодирует целевое аудио обратно в 24 кГц английский 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 потокам, с подстановкой init-токена при step ≤ delays[k]); сэмплированный текст + 16 целевых кодов записываются по индексу step + 1. Это отражает поведение upstream Moshi lm.py, где state.offsets += 1 происходит до scatter в кэш. Строка text_emb для EOS (id 2) при загрузке весов алиасится в строку 3 (PAD), повторяя патч Kyutai из loaders.py:312 «неявно заменять ранний EOS на PAD» — любой EOS, сэмплированный во время потокового аудиоокна, безвреден, цикл завершает только пост-исходный EOS.

Варианты модели

ВариантКвантованиеРазмерВычисленияHuggingFace
Hibiki Zero-3BINT4~2,7 ГБMetal GPU (MLX)aufklarer/Hibiki-Zero-3B-MLX-4bit
Hibiki Zero-3BINT8~3,9 ГБMetal GPU (MLX)aufklarer/Hibiki-Zero-3B-MLX-8bit

Поддерживаемые языки

Hibiki Zero-3B обучен на парах французский, испанский, португальский и немецкий → английский. Swift-драйвер автоматически определяет исходный язык; флаг --source-lang используется только как метаданные.

ИсточникСтатусПример greedy-вывода
FRСтрогая E2E-канарейка«so it's a ski route.» (из «Pensez à l'itinéraire de ski…»)
ESСтрогая E2E-канарейка«gentlemen, the data is worrying.» (пример Hibiki europarl)
PTТолько предупреждение (содержательно верно, ниже recall ключевых слов)«the fifth c is p of the martyr.» (FLEURS PT)
DEТолько предупреждение (содержательно верно, ниже recall ключевых слов)«that didn't seem to me to be useful.» (FLEURS DE)
FLEURS на испанском вне распределения

Записанные людьми клипы FLEURS на испанском с частотой 16 кГц вызывают вырожденную генерацию как в upstream-версии на Python, так и в Swift-порте (Python выдаёт 1643 шага / ~131 с поломанного аудио, не сэмплируя EOS). Swift-канарейка для ES использует обрезанный 5-секундный фрагмент из собственного samples-пространства Kyutai (kyutai/hibiki-zero-samples) — это TTS-сгенерированное аудио 24 кГц, соответствующее обучающему распределению, и оно даёт чистый английский. Если вы подаёте Hibiki испанский в продакшене, заранее ресэмплируйте до 24 кГц и используйте более длинные клипы (от 5 с).

Переменные окружения

ПеременнаяЭффект
HIBIKI_GREEDY=1Принудительное argmax-декодирование для текста и целевого аудио. Воспроизводимо — используется строгими канарейками CI.
HIBIKI_E2E=1Включить E2E-тесты (требуется загрузка модели ~2,7 ГБ).
HIBIKI_STRICT_ALL=1Перевести тесты PT/DE из режима «только предупреждение» в строгий.
HIBIKI_LENIENT=1Понизить тесты FR/ES со строгого режима до «только предупреждение» (только для отладки).
HIBIKI_MODEL_ID=<repo>Переопределить ID модели по умолчанию aufklarer/Hibiki-Zero-3B-MLX-4bit.

Производительность (M2 Max, MLX 4-бит)

МетрикаGreedySampled
Задержка на шаг~75 мс~95 мс
Реальное время для 3,54 с источника FR~5 с~7 с
Длительность вывода1,0–1,6× источника1,0–1,6× источника

Известные ограничения

Ссылки