Dịch thuật MADLAD-400 (ngay trên thiết bị, 400+ ngôn ngữ)
MADLAD-400-3B-MT là mô hình encoder-decoder T5 v1.1 của Google, được huấn luyện cho dịch máy nhiều chiều giữa 400+ ngôn ngữ. Apache 2.0. Bản build của Soniqo chạy dưới dạng MLX safetensors được lượng tử hóa (INT4 / INT8) trên Apple Silicon, không cần gọi đám mây. Đặt sau ASR cho phụ đề trực tiếp, sau bước chuẩn bị TTS cho tác nhân giọng nói đa ngôn ngữ, hoặc dùng độc lập.
speech transcribe meeting.wav | speech translate --to es — vẫn cùng binary, ngôn ngữ đích là tham số bắt buộc duy nhất. Ngôn ngữ nguồn được encoder tự phát hiện; bạn chỉ cần chỉ định bạn muốn dịch sang ngôn ngữ nào.
Bắt đầu nhanh
import MADLADTranslation
let translator = try await MADLADTranslator.fromPretrained()
// Greedy decode (recommended default)
let es = try translator.translate("Hello, how are you?", to: "es")
// → "Hola, ¿cómo estás?"
let zh = try translator.translate("Where is the library?", to: "zh")
// → "图书馆在哪里?"
// Streaming
for try await piece in translator.translateStream("Good morning", to: "fr") {
print(piece, terminator: "")
}
CLI
speech translate "Hello, how are you?" --to es
speech translate "Bonjour" --to en --quantization int8
speech translate "Hello world" --to es --stream
speech translate --to fr --json # JSON with timing metrics
# Pipe from ASR
speech transcribe meeting.wav | speech translate --to es
Kiến trúc
Encoder-decoder T5 v1.1, ~3B tham số. 32 lớp encoder + 32 lớp decoder, d_model = 1024, d_kv = 128, num_heads = 16, FFN gated GeLU (d_ff = 8192). Thông tin vị trí được truyền qua một relative position bias được học (32 bucket, khoảng cách tối đa 128) thay vì position embedding — hai chiều ở encoder, một chiều (chỉ quá khứ) ở decoder. Bảng bias chỉ nằm ở lớp đầu tiên của mỗi stack và được lan truyền qua các lớp sau. Điểm attention không được chia tỉ lệ bởi 1/√d_k — đây là đặc thù của T5.
K/V của cross-attention được tính một lần từ đầu ra encoder và tái sử dụng cho mỗi bước decode (cache trong DecoderLayerCache.crossAttn). KV cache của self-attention decoder phình ra theo từng token sinh ra. Greedy decoding là mặc định và được khuyến nghị cho dịch thuật; sampling temperature / top-k / top-p vẫn được mở ra cho các trường hợp dùng kiểu diễn giải lại.
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 |
|---|---|---|---|---|
| MADLAD-400-3B-MT | INT4 | ~1.7 GB | Metal GPU (MLX) | aufklarer/MADLAD400-3B-MT-MLX (int4/) |
| MADLAD-400-3B-MT | INT8 | ~3.1 GB | Metal GPU (MLX) | aufklarer/MADLAD400-3B-MT-MLX (int8/) |
Ngôn ngữ đích
Chỉ định ngôn ngữ đích bằng mã ngôn ngữ trong từ vựng của MADLAD (thường là ISO 639-1 như es, fr, zh, ja, cộng thêm 400+ biến thể vùng miền như yue cho tiếng Quảng Đông, min_nan cho tiếng Mân Nam). Tokenizer phân giải <2{lang}> qua tra cứu trực tiếp trong từ vựng và ném MADLADTranslationError.unsupportedLanguage nếu mã không được nhận. Ngôn ngữ nguồn được tự phát hiện từ đầu vào — bạn không cần chỉ định.
// Errors out if the language code isn't in MADLAD's vocab.
do {
let _ = try translator.translate("Hello", to: "xx")
} catch MADLADTranslationError.unsupportedLanguage(let code) {
print("MADLAD doesn't support: \(code)")
}
Cấu hình sampling
let sampling = TranslationSamplingConfig(
temperature: 0.0, // greedy (default, recommended for MT)
topK: 0, // disabled
topP: 1.0, // disabled
maxTokens: 256,
repetitionPenalty: 1.0
)
let result = try translator.translate("Long-form text…", to: "es", sampling: sampling)
| Tham số | Mặc định | Mô tả |
|---|---|---|
temperature | 0.0 | 0 = greedy. Tăng lên 0.6–0.8 cho biến thể kiểu diễn giải lại. |
topK | 0 | Ngưỡng cắt Top-K (0 = tắt). |
topP | 1.0 | Ngưỡng cắt nucleus sampling. |
maxTokens | 256 | Giới hạn cứng cho độ dài đầu ra. |
repetitionPenalty | 1.0 | >1 phạt các token vừa sinh ra. |
Chuyển đổi
MLX safetensors tại aufklarer/MADLAD400-3B-MT-MLX được lượng tử hóa từ google/madlad400-3b-mt gốc qua mx.quantize (group size 64). Các trọng số q/k/v/o, wi_0/wi_1/wo, lm_head và embedding shared đều được lượng tử hóa; scale của layer norm và bảng relative-position-bias được giữ ở fp16. Khóa embedding HF duy nhất của MADLAD (decoder.embed_tokens.weight) được đổi tên thành shared.weight khi chuyển đổi để cả encoder và decoder cùng dùng chung.
Giấy phép
Apache 2.0 (kế thừa từ google/madlad400-3b-mt). Model card liệt kê đầy đủ tập mã ngôn ngữ được hỗ trợ.