Phase 05 - Lesson 11
Tradução Automática
A tradução é a tarefa que financiou a pesquisa em PLN por trinta anos e continua financiando hoje.
Tipo: Build Linguagens: Python Pré-requisitos: Fase 5 · 10 (Mecanismo de Atenção), Fase 5 · 04 (GloVe, FastText, Subword) Tempo: ~75 minutos
O Problema
Um modelo lê uma frase em um idioma e produz uma frase em outro. O comprimento varia. A ordem das palavras varia. Algumas palavras de origem mapeiam para várias palavras de destino e vice-versa. As expressões idiomáticas se recusam ao mapeamento um-para-um. "I miss you" em francês é "tu me manques" — literalmente "você está faltando para mim". Nenhum alinhamento em nível de palavra sobrevive a isso.
A tradução automática é a tarefa que forçou o PLN a inventar encoder-decoders, atenção, transformers e, por fim, todo o paradigma de LLMs. Cada passo adiante chegou porque a qualidade da tradução era mensurável e a lacuna entre humano e máquina era teimosa.
Esta lição pula a aula de história e ensina o pipeline funcional de 2026: encoder-decoder multilíngue pré-treinado (NLLB-200 ou mBART), tokenização por subpalavras, beam search, avaliação por BLEU e chrF, e o punhado de modos de falha que ainda chegam à produção sem serem detectados.
O Conceito
A MT moderna é um transformer encoder-decoder treinado em texto paralelo. O encoder lê a origem na tokenização de seu idioma. O decoder gera o destino, uma subpalavra de cada vez, usando a saída do encoder por meio de cross-attention (lição 10). A decodificação usa beam search para evitar a armadilha da decodificação gananciosa (greedy). A saída é destokenizada, tem o truecasing revertido e é pontuada contra uma referência.
Três escolhas operacionais determinam a qualidade real de MT no mundo real.
- Tokenizador. SentencePiece BPE treinado em um corpus de idiomas misturados. O vocabulário compartilhado entre idiomas é o que habilita os pares zero-shot no NLLB.
- Tamanho do modelo. O NLLB-200 distilled 600M cabe em um laptop. O NLLB-200 3.3B é o padrão de produção publicado. 54.5B é o teto de pesquisa.
- Decodificação. Largura de beam de 4-5 para conteúdo geral. Penalidade de comprimento para evitar saída curta demais. Decodificação restrita quando você precisa de consistência terminológica.
Construa
Passo 1: uma chamada de MT pré-treinada
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
model_id = "facebook/nllb-200-distilled-600M"
tok = AutoTokenizer.from_pretrained(model_id, src_lang="eng_Latn")
model = AutoModelForSeq2SeqLM.from_pretrained(model_id)
src = "The cats are running."
inputs = tok(src, return_tensors="pt")
out = model.generate(
**inputs,
forced_bos_token_id=tok.convert_tokens_to_ids("fra_Latn"),
num_beams=5,
length_penalty=1.0,
max_new_tokens=64,
)
print(tok.batch_decode(out, skip_special_tokens=True)[0])
Les chats courent.
Três coisas importam aqui. src_lang diz ao tokenizador qual script e segmentação aplicar. forced_bos_token_id diz ao decoder qual idioma gerar. Ambos são truques específicos do NLLB; mBART e M2M-100 usam suas próprias convenções e elas não são intercambiáveis.
Passo 2: BLEU e chrF
O BLEU mede a sobreposição de n-gramas entre a saída e a referência. Quatro tamanhos de n-grama de referência (1-4), média geométrica das precisões, penalidade de brevidade para saída curta demais. A pontuação fica em [0, 100]. De uso comum. Frustrante de interpretar: 30 BLEU é "utilizável"; 40 é "bom"; 50 é "excepcional"; diferenças abaixo de 1 BLEU são ruído.
O chrF mede o F-score em nível de caractere. Mais sensível a idiomas morfologicamente ricos, onde o BLEU subconta correspondências. Frequentemente reportado ao lado do BLEU.
import sacrebleu
hypotheses = ["Les chats courent."]
references = [["Les chats courent."]]
bleu = sacrebleu.corpus_bleu(hypotheses, references)
chrf = sacrebleu.corpus_chrf(hypotheses, references)
print(f"BLEU: {bleu.score:.1f} chrF: {chrf.score:.1f}")
Sempre use sacrebleu. Ele normaliza a tokenização para que as pontuações sejam comparáveis entre artigos. Implementar seu próprio cálculo de BLEU é como surgem benchmarks enganosos.
A hierarquia de avaliação em três níveis (2026)
A avaliação moderna de MT usa três famílias de métricas complementares. Entregue com pelo menos duas.
- Heurística (BLEU, chrF). Rápida, baseada em referência, interpretável, insensível a paráfrase. Use para comparação legada e detecção de regressão.
- Aprendida (COMET, BLEURT, BERTScore). Modelos neurais treinados em julgamento humano; comparam a similaridade semântica da tradução com a origem e a referência. O COMET tem a maior associação com a pesquisa em MT desde 2023 e é o padrão de produção de 2026 onde a qualidade importa.
- LLM como juiz (sem referência). Solicite a um modelo grande que pontue traduções quanto a fluência, adequação, tom e adequação cultural. O GPT-4 como juiz coincide com a concordância humana ~80% das vezes quando a rubrica é bem projetada. Use para conteúdo aberto onde não existe referência.
Stack prático de 2026: sacrebleu para BLEU e chrF, unbabel-comet para COMET, e um LLM com prompt para o sinal final voltado ao humano. Calibre cada métrica contra 50-100 exemplos rotulados por humanos antes de confiar nela em dados de produção.
As métricas sem referência (COMET-QE, BLEURT-QE, LLM como juiz) permitem avaliar traduções sem uma referência, o que importa para pares de idiomas de cauda longa onde traduções de referência não existem.
Passo 3: o que quebra em produção
O pipeline funcional acima traduzirá com fluência 80% das vezes e falhará silenciosamente nos 20% restantes. Modos de falha nomeados:
- Alucinação. O modelo inventa conteúdo que não estava na origem. Comum em vocabulário de domínio desconhecido. Sintoma: a saída é fluente, mas afirma fatos que a origem não declarou. Mitigação: decodificação restrita em termos de domínio, revisão humana em conteúdo regulado, monitoramento de saída muito mais longa que a entrada.
- Geração off-target. O modelo traduz para o idioma errado. O NLLB é surpreendentemente propenso a isso em pares de idiomas raros. Mitigação: verifique o
forced_bos_token_ide sempre decodifique com uma verificação de modelo de identificação de idioma (language-ID) na saída. - Deriva terminológica. "Sign up" vira "s'inscrire" no doc 1 e "créer un compte" no doc 2. Para texto de UI e strings voltadas ao usuário, a consistência importa mais que a qualidade bruta. Mitigação: decodificação restrita por glossário ou dicionário de pós-edição.
- Incompatibilidade de formalidade. "tu" vs "vous" do francês, níveis de polidez do japonês. O modelo escolhe a forma que foi mais comum no treinamento. Para conteúdo voltado ao cliente, isso geralmente está errado. Mitigação: prefixo de prompt com um token de formalidade se o modelo suportar, ou fine-tune de um modelo pequeno em corpora apenas formais.
- Explosão de comprimento em entrada curta. Frases de entrada muito curtas frequentemente produzem traduções longas demais porque a penalidade de comprimento despenca abaixo de ~5 tokens de origem. Mitigação: limite máximo de comprimento proporcional ao comprimento da origem.
Passo 4: fine-tuning para um domínio
Modelos pré-treinados são generalistas. A tradução jurídica, médica ou de diálogo de jogos se beneficia de forma mensurável do fine-tuning em dados paralelos de domínio. A receita não é exótica:
from transformers import Trainer, TrainingArguments
from datasets import Dataset
pairs = [
{"src": "The defendant pleaded guilty.", "tgt": "L'accusé a plaidé coupable."},
]
ds = Dataset.from_list(pairs)
def preprocess(ex):
return tok(
ex["src"],
text_target=ex["tgt"],
truncation=True,
max_length=128,
padding="max_length",
)
ds = ds.map(preprocess, remove_columns=["src", "tgt"])
args = TrainingArguments(output_dir="out", per_device_train_batch_size=4, num_train_epochs=3, learning_rate=3e-5)
Trainer(model=model, args=args, train_dataset=ds).train()
Alguns milhares de exemplos paralelos de alta qualidade batem algumas centenas de milhares de exemplos ruidosos raspados da web. A qualidade dos dados de treinamento é a maior alavanca individual de produção.
Use
A stack de produção de MT em 2026:
| Caso de uso | Ponto de partida recomendado |
|---|---|
| Qualquer-para-qualquer, 200 idiomas | facebook/nllb-200-distilled-600M (laptop) ou nllb-200-3.3B (produção) |
| Centrado no inglês, alta qualidade, 50 idiomas | facebook/mbart-large-50-many-to-many-mmt |
| Execuções curtas, inferência barata, inglês-francês/alemão/espanhol | Modelos Helsinki-NLP / Marian |
| Crítico em latência, no lado do navegador | Marian quantizado em ONNX (~50 MB) |
| Qualidade máxima, disposto a pagar | GPT-4 / Claude / Gemini com prompts de tradução |
Os LLMs agora superam modelos de MT especializados em vários pares de idiomas a partir de 2026, particularmente em conteúdo idiomático e contexto longo. O tradeoff é o custo por token e a latência. Escolha um LLM quando o comprimento de contexto, a consistência estilística ou a adaptação de domínio via prompting importarem mais que a vazão (throughput).
Entregue
Salve como outputs/skill-mt-evaluator.md:
---
name: mt-evaluator
description: Evaluate a machine translation output for shipping.
version: 1.0.0
phase: 5
lesson: 11
tags: [nlp, translation, evaluation]
---
Given a source text and a candidate translation, output:
1. Automatic score estimate. BLEU and chrF ranges you would expect. State whether a reference is available.
2. Five-point human-verifiable check list: (a) content preservation (no hallucinations), (b) correct language, (c) register / formality match, (d) terminology consistency with glossary if provided, (e) no truncation or length explosion.
3. One domain-specific issue to probe. E.g., for legal: named entities and statute citations. For medical: drug names and dosages. For UI: placeholder variables `{name}`.
4. Confidence flag. "Ship" / "Ship with review" / "Do not ship". Tie to the severity of issues found in step 2.
Refuse to ship a translation without a language-ID check on output. Refuse to evaluate without a reference unless the user explicitly opts in to reference-free scoring (COMET-QE, BLEURT-QE). Flag any content over 1000 tokens as likely needing chunked translation.
Exercícios
- Fácil. Traduza um parágrafo em inglês de 5 frases para o francês e de volta para o inglês usando
nllb-200-distilled-600M. Meça quão próxima a ida-e-volta está do original. Você deve ver preservação semântica com deriva na escolha das palavras. - Médio. Implemente uma verificação de identificação de idioma (language-ID) nas saídas de tradução usando
fasttext lid.176oulangdetect. Integre-a à chamada de MT para que gerações off-target sejam capturadas antes de retornar. - Difícil. Faça fine-tuning de
nllb-200-distilled-600Mem um corpus de domínio de 5.000 pares de sua escolha. Meça o BLEU em um conjunto de validação (held-out) antes e depois do fine-tuning. Reporte quais tipos de frases melhoraram e quais regrediram.
Termos-Chave
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| BLEU | Pontuação de tradução | Precisão de n-gramas com penalidade de brevidade. [0, 100]. |
| chrF | F-score de caractere | F-score em nível de caractere. Mais sensível para idiomas morfologicamente ricos. |
| NMT | MT Neural | Transformer encoder-decoder treinado em texto paralelo. O padrão de 2017+. |
| NLLB | No Language Left Behind | A família de modelos de MT de 200 idiomas da Meta. |
| Decodificação restrita | Saída controlada | Forçar tokens ou n-gramas específicos a aparecer / não aparecer na saída. |
| Alucinação | Conteúdo inventado | Saída do modelo que não é sustentada pela origem. |
Leitura Adicional
- Costa-jussà et al. (2022). No Language Left Behind: Scaling Human-Centered Machine Translation — o artigo do NLLB.
- Post (2018). A Call for Clarity in Reporting BLEU Scores — por que
sacrebleué a única forma correta de reportar BLEU. - Popović (2015). chrF: character n-gram F-score for automatic MT evaluation — o artigo do chrF.
- Hugging Face MT guide — guia prático de fine-tuning.