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

Pipeline de MT: tokenizar → codificar → decodificar com atenção → destokenizar

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_id e 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

  1. 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.
  2. Médio. Implemente uma verificação de identificação de idioma (language-ID) nas saídas de tradução usando fasttext lid.176 ou langdetect. Integre-a à chamada de MT para que gerações off-target sejam capturadas antes de retornar.
  3. Difícil. Faça fine-tuning de nllb-200-distilled-600M em 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

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).