Tradução MADLAD-400 (on-device, 400+ idiomas)
MADLAD-400-3B-MT é um modelo encoder-decoder T5 v1.1 da Google treinado para tradução automática multidirecional entre 400+ idiomas. Apache 2.0. O build da Soniqo roda como MLX safetensors quantizados (INT4 / INT8) em Apple Silicon, sem chamadas à nuvem. Use após o ASR para legendagem ao vivo, antes do TTS para agentes de voz multilíngues, ou de forma independente.
audio transcribe meeting.wav | audio translate --to es — o mesmo binário; a única entrada obrigatória é o idioma de destino. O idioma de origem é detectado automaticamente pelo encoder; você só indica para qual idioma traduzir.
Início rápido
import MADLADTranslation
let translator = try await MADLADTranslator.fromPretrained()
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")
// → "图书馆在哪里?"
for try await piece in translator.translateStream("Good morning", to: "fr") {
print(piece, terminator: "")
}
CLI
audio translate "Hello, how are you?" --to es
audio translate "Bonjour" --to en --quantization int8
audio translate "Hello world" --to es --stream
audio translate --to fr --json # JSON with timing metrics
# Pipe from ASR
audio transcribe meeting.wav | audio translate --to es
Arquitetura
Encoder-decoder T5 v1.1, ~3B parâmetros. 32 camadas de encoder + 32 camadas de decoder, d_model = 1024, d_kv = 128, num_heads = 16, FFN gated GeLU (d_ff = 8192). A informação posicional vem como um viés de posição relativa aprendido (32 buckets, distância máxima 128) em vez de embeddings posicionais — bidirecional no encoder, unidirecional (somente passado) no decoder. A tabela de viés vive somente na primeira camada de cada pilha e é propagada para as camadas seguintes. Os scores de atenção não são escalados por 1/√d_k — é uma peculiaridade do T5.
O K/V do cross-attention é calculado uma vez a partir da saída do encoder e reutilizado em cada passo de decodificação (em cache em DecoderLayerCache.crossAttn). O KV cache do self-attention do decoder cresce a cada token gerado. Decodificação greedy é o padrão e recomendado para tradução; amostragem temperature / top-k / top-p está disponível para casos de paráfrase.
Variantes do modelo
| Variante | Quantização | Tamanho | Compute | 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/) |
Idiomas de destino
O destino é especificado pelo código de idioma do vocabulário MADLAD (geralmente ISO 639-1 — es, fr, zh, ja, além de 400+ variantes regionais como yue para cantonês ou min_nan para hokkien). O tokenizer resolve <2{lang}> via lookup direto no vocabulário e lança MADLADTranslationError.unsupportedLanguage caso o código seja desconhecido. O idioma de origem é detectado a partir do texto — não é especificado.
Configuração de amostragem
let sampling = TranslationSamplingConfig(
temperature: 0.0,
topK: 0,
topP: 1.0,
maxTokens: 256,
repetitionPenalty: 1.0
)
let result = try translator.translate("Long-form text…", to: "es", sampling: sampling)
| Parâmetro | Padrão | Descrição |
|---|---|---|
temperature | 0.0 | 0 = greedy. Para variações tipo paráfrase, suba para 0.6–0.8. |
topK | 0 | Corte top-K (0 = desativado). |
topP | 1.0 | Limite de amostragem nucleus. |
maxTokens | 256 | Limite rígido de comprimento da saída. |
repetitionPenalty | 1.0 | >1 penaliza tokens gerados recentemente. |
Conversão
Os safetensors MLX em aufklarer/MADLAD400-3B-MT-MLX são quantizados a partir de google/madlad400-3b-mt via mx.quantize (group size 64). Quantizados: q/k/v/o, wi_0/wi_1/wo, lm_head e o embedding shared; escalas de layer norm e a tabela de viés de posição relativa permanecem em fp16. A única chave de embedding do HF do MADLAD (decoder.embed_tokens.weight) é renomeada para shared.weight na conversão para que tanto encoder quanto decoder a reutilizem.
Licença
Apache 2.0 (herdado de google/madlad400-3b-mt). A model card lista todos os códigos de idioma suportados.