Dịch giọng nói Hibiki Zero-3B (FR / ES / PT / DE → EN)
Hibiki Zero-3B là mô hình dịch giọng nói sang giọng nói trực tuyến của Kyutai — đầu vào là luồng âm thanh 24 kHz bằng tiếng Pháp, Tây Ban Nha, Bồ Đào Nha hoặc Đức; đầu ra là luồng âm thanh tiếng Anh 24 kHz cùng với bản phiên âm song song bằng văn bản tiếng Anh ở cùng tốc độ khung hình 12,5 Hz. Được xây dựng trên kiến trúc đa luồng Moshi/Mimi: một transformer chỉ-bộ-giải-mã đơn lẻ mô hình hóa đồng thời luồng codec âm thanh nguồn và các luồng văn bản+âm thanh đích, do đó không cần đường ống ASR + MT + TTS riêng biệt. Phiên bản Soniqo chạy dưới dạng safetensors MLX đã lượng tử hóa (mặc định INT4, có sẵn INT8) hoàn toàn trên Apple Silicon. CC-BY-4.0.
ASR + MADLAD kiểu đường ống (speech transcribe | speech translate) cho bạn 400+ ngôn ngữ nhưng thêm độ trễ vòng lặp của ba mô hình. Hibiki là một mô hình duy nhất đầu-cuối và bảo tồn ngữ điệu — hãy chọn nó khi bạn cần giọng nói trực tiếp ở ngôn ngữ đích chứ không chỉ là văn bản.
Bắt đầu nhanh
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 — tự động phát hiện nhưng truyền vào để làm metadata
)
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
# Chế độ xác định (được sử dụng bởi các canary kiểm thử hồi quy CI)
HIBIKI_GREEDY=1 speech audio-translate input_fr.wav -o out_en.wav --source-lang fr
# ID token văn bản nội độc thoại (thô — giải mã SPM là việc tiếp theo)
speech audio-translate input.wav -o out.wav --transcript
Kiến trúc
Hibiki Zero-3B là một transformer đa luồng chỉ-bộ-giải-mã với 3,1 tỷ tham số. Mô hình chú ý đồng thời trên 33 luồng mỗi khung hình: một luồng văn bản, 16 codebook âm thanh đích (đầu ra của tác nhân), và 16 codebook âm thanh nguồn (đầu vào của người dùng). Tại mỗi khung 80 ms, mô hình lấy mẫu một token văn bản cùng với 16 mã âm thanh thông qua một depformer nhỏ 6 lớp chạy 16 bước con mỗi khung, một bước cho mỗi codebook đích, với phép chiếu MultiLinear theo lịch trình 9 lát.
Codec âm thanh là Mimi ở mức 12,5 Hz / 16 codebook. Âm thanh nguồn được mã hóa thành 16 codebook luồng nguồn (độ trễ [0, 2, 2, …, 2]); âm thanh đích được tạo ra điền vào 16 codebook luồng đích (cùng mẫu độ trễ); việc bỏ dịch chuyển theo từng codebook được áp dụng trước khi Mimi giải mã đích trở lại PCM tiếng Anh 24 kHz. Backbone thời gian là 28 lớp GQA (dim = 2048, 16 đầu truy vấn, 8 đầu KV, kv_repeat = 2, RoPE chia đôi rope_concat, không có conditioner — Zero là biến thể không điều kiện).
Vòng lặp giải mã
Hibiki phát ra các token đệm SPM (id 3) trong khi nó tích lũy đủ ngữ cảnh nguồn để dịch, sau đó là các token văn bản nội dung với âm thanh đích tương ứng, và cuối cùng là text-EOS (id 2). Bộ điều khiển Swift chạy cho đến khi EOS được lấy mẫu vượt qua cửa sổ nguồn, giới hạn ở max(tSrc × 5/2, tSrc + 20) bước như một giới hạn an toàn. Đầu ra chạy khoảng 1,0–1,6× thời lượng đầu vào trên các đoạn kiểu FLEURS; người gọi không nên giả định output_duration == input_duration.
Đường phản hồi tự hồi quy không hiển nhiên: tại bước t, transformer đọc các token tại chỉ số bộ nhớ đệm step (đồng nhất trên tất cả 33 luồng, với việc thay thế token khởi tạo khi step ≤ delays[k]); văn bản được lấy mẫu + 16 mã đích được ghi tại chỉ số step + 1. Điều này phản ánh Moshi lm.py ở thượng nguồn, nơi state.offsets += 1 xảy ra trước khi phân tán bộ nhớ đệm. Hàng text_emb cho EOS (id 2) được đặt bí danh thành hàng 3 (PAD) tại thời điểm tải trọng số, phản ánh bản vá "ngầm thay thế EOS sớm bằng PAD" của Kyutai trong loaders.py:312 — bất kỳ EOS nào được lấy mẫu trong cửa sổ phát trực tiếp âm thanh đều vô hại, chỉ có EOS sau-nguồn mới chấm dứt vòng lặp.
Các biến thể mô hình
| Biến thể | Lượng tử hóa | Kích thước | Tính toán | HuggingFace |
|---|---|---|---|---|
| Hibiki Zero-3B | INT4 | ~2,7 GB | GPU Metal (MLX) | aufklarer/Hibiki-Zero-3B-MLX-4bit |
| Hibiki Zero-3B | INT8 | ~3,9 GB | GPU Metal (MLX) | aufklarer/Hibiki-Zero-3B-MLX-8bit |
Phạm vi ngôn ngữ
Hibiki Zero-3B được huấn luyện trên tiếng Pháp, Tây Ban Nha, Bồ Đào Nha và Đức → tiếng Anh. Bộ điều khiển Swift tự động phát hiện ngôn ngữ nguồn; cờ --source-lang chỉ là metadata.
| Nguồn | Trạng thái | Ví dụ đầu ra greedy |
|---|---|---|
| FR | Canary E2E nghiêm ngặt | "so it's a ski route." (từ "Pensez à l'itinéraire de ski…") |
| ES | Canary E2E nghiêm ngặt | "gentlemen, the data is worrying." (mẫu europarl Hibiki) |
| PT | Chỉ cảnh báo (trung thực với nội dung, độ thu hồi từ khóa thấp hơn) | "the fifth c is p of the martyr." (FLEURS PT) |
| DE | Chỉ cảnh báo (trung thực với nội dung, độ thu hồi từ khóa thấp hơn) | "that didn't seem to me to be useful." (FLEURS DE) |
Các đoạn FLEURS tiếng Tây Ban Nha 16 kHz do người ghi âm kích hoạt sinh ra suy biến cả trong Python thượng nguồn lẫn cổng Swift (Python phát ra 1643 bước / ~131 s âm thanh bị hỏng mà không lấy mẫu EOS). Canary hồi quy ES của Swift sử dụng một trích đoạn 5 s đã cắt từ chính không gian mẫu của Kyutai (kyutai/hibiki-zero-samples) ở mức âm thanh do TTS tạo ra 24 kHz, khớp với phân phối huấn luyện và tạo ra tiếng Anh sạch. Nếu bạn đang cung cấp tiếng Tây Ban Nha cho Hibiki trong sản phẩm, hãy lấy mẫu lại trước thành 24 kHz và giữ ở các đoạn dài hơn (5 s trở lên).
Biến môi trường
| Biến | Tác dụng |
|---|---|
HIBIKI_GREEDY=1 | Ép buộc giải mã argmax cho cả văn bản và âm thanh đích. Có thể tái lập — được sử dụng bởi các canary CI nghiêm ngặt. |
HIBIKI_E2E=1 | Bật các trường hợp kiểm thử E2E (yêu cầu tải xuống mô hình ~2,7 GB). |
HIBIKI_STRICT_ALL=1 | Nâng cấp các kiểm thử PT/DE từ chỉ-cảnh-báo lên nghiêm ngặt. |
HIBIKI_LENIENT=1 | Hạ cấp các kiểm thử FR/ES từ nghiêm ngặt xuống chỉ-cảnh-báo (chỉ dùng cho gỡ lỗi). |
HIBIKI_MODEL_ID=<repo> | Ghi đè id mô hình mặc định aufklarer/Hibiki-Zero-3B-MLX-4bit. |
Hiệu suất (M2 Max, MLX 4-bit)
| Chỉ số | Greedy | Lấy mẫu |
|---|---|---|
| Độ trễ mỗi bước | ~75 ms | ~95 ms |
| Thời gian thực với nguồn FR 3,54 s | ~5 s | ~7 s |
| Thời lượng đầu ra | 1,0–1,6× nguồn | 1,0–1,6× nguồn |
Hạn chế đã biết
translateStream()phát ra một khối cuối cùng duy nhất. Điểm vào streaming hiện đang bao bọctranslate()ngoại tuyến. Giải mã Mimi streaming thực sự theo từng khối là một việc tiếp theo cho v2.- Không có bộ giải mã văn bản SentencePiece. Cờ
--transcriptin các ID token thô. Việc kết nối giải mã SPM là một việc tiếp theo. - Chế độ lấy mẫu ồn hơn đáng kể so với greedy. Sử dụng
HIBIKI_GREEDY=1cho các lần chạy có thể tái lập. - Chỉ-lượng-tử-hóa. Kho hiện đang vận chuyển Zero-3B 4-bit và 8-bit; các biến thể Hibiki 1B và 2B tồn tại trong bộ chuyển đổi (
models/hibiki/export/convert.py) nhưng bộ điều khiển Swift nhắm vào bố cục GQA + rope_concat + không-điều-kiện của Zero-3B.
Tham khảo
- Bài báo: High-Fidelity Simultaneous Speech-to-Speech Translation (Kyutai, 2025)
- Mã thượng nguồn: kyutai-labs/hibiki
- Mẫu: kyutai/hibiki-zero-samples
- Giấy phép: CC-BY-4.0