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.

Pipe a partir do ASR

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

VarianteQuantizaçãoTamanhoComputeHuggingFace
MADLAD-400-3B-MTINT4~1.7 GBMetal GPU (MLX)aufklarer/MADLAD400-3B-MT-MLX (int4/)
MADLAD-400-3B-MTINT8~3.1 GBMetal 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âmetroPadrãoDescrição
temperature0.00 = greedy. Para variações tipo paráfrase, suba para 0.6–0.8.
topK0Corte top-K (0 = desativado).
topP1.0Limite de amostragem nucleus.
maxTokens256Limite rígido de comprimento da saída.
repetitionPenalty1.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.