antonio leandro

ia generativa

Neural Machine Translation by Jointly Learning to Align and Translate

paper · Dzmitry Bahdanau, Kyunghyun Cho, Yoshua Bengio ·

a tese

o gargalo do encoder–decoder não era a rede, era o vetor de tamanho fixo: deixe o decoder montar um contexto próprio a cada palavra gerada e a tradução para de degradar em frases longas

o que fica

  1. O gargalo do encoder–decoder era o vetor de tamanho fixo, não a capacidade da rede: a RNNsearch-50 não mostra queda de BLEU nem em frases de 50 palavras ou mais, enquanto a versão sem attention despenca conforme a entrada cresce.
  2. Attention entrou no mundo como alinhamento suave e diferenciável: em vez de variável latente estimada à parte, o alinhamento virou uma rede pequena treinada por backpropagation junto com o tradutor inteiro.
  3. O custo declarado é avaliar o modelo de alinhamento T_x × T_y vezes por par de frases, e os próprios autores avisam que isso é tolerável em tradução (15 a 40 palavras) e pode inviabilizar outras tarefas.
  4. Alinhamento duro erra onde o suave acerta: para escolher entre le, la, les e l', o modelo precisa olhar [the] e a palavra seguinte ao mesmo tempo, coisa que um mapeamento palavra a palavra não permite.
  5. O ganho não saiu de graça no treino: a RNNsearch-50 fez 2,88×10⁵ updates em 111 horas contra 6,00×10⁵ do encoder–decoder em 108 horas, e ainda assim terminou com NLL de desenvolvimento melhor, 38,1 contra 43,6.
  6. Com vocabulário de 30.000 palavras, o modelo só alcança o Moses no subconjunto sem palavras desconhecidas (36,15 contra 35,63); no teste completo fica em 28,45 contra 33,30, e o paper aponta palavras raras como o problema em aberto.

o problema

Até 2014, traduzir por máquina era montar um sistema, não treinar um modelo. Um sistema phrase-based como o Moses tem tabela de frases, modelo de língua, reordenador, e cada peça é ajustada separadamente antes de ser costurada numa busca. Redes neurais entravam ali como acessório: davam uma feature a mais para pontuar pares de frases, ou reordenavam uma lista de candidatos que outro sistema tinha produzido.

A alternativa recém-proposta era mais limpa. Um encoder RNN lê a frase de origem e a comprime num vetor c; um decoder RNN desenrola a tradução a partir de c; tudo treinado junto para maximizar p(y|x). O problema mora no c. Ele tem tamanho fixo — mil dimensões, no caso — e precisa carregar tanto uma frase de cinco palavras quanto uma de cinquenta. Cho et al. já tinham mostrado empiricamente que a qualidade cai rápido conforme a entrada cresce, e a tabela deste paper confirma: o encoder–decoder treinado com frases de até 30 palavras marca 13,93 de BLEU no teste completo do WMT ’14 inglês–francês, contra 33,30 do Moses.

a ideia

Parar de exigir um vetor. O encoder passa a produzir uma sequência de anotações, uma por posição da frase de origem, e o decoder escolhe uma mistura diferente delas a cada palavra que gera. A escolha é suave: não é “esta posição”, é uma distribuição de probabilidade sobre todas as posições. Por ser suave, é diferenciável; por ser diferenciável, o gradiente da função de custo atravessa o alinhamento e treina o alinhador junto com o tradutor. Não há supervisão de alinhamento em lugar nenhum.

A analogia que se sustenta: em vez de ler a frase, decorar e recitar de memória, o tradutor deixa a página aberta e volta os olhos ao trecho relevante antes de escrever cada palavra. É este paper que chama isso de mecanismo de attention.

como funciona

O encoder é uma RNN bidirecional. A passada para frente lê x₁…x_Tx, a passada para trás lê na ordem inversa, e a anotação h_j é a concatenação dos dois estados escondidos naquela posição. Como RNN representa melhor a entrada recente, h_j acaba focada nas palavras em volta de x_j, mas contém contexto dos dois lados — inclusive do que vem depois, o que o encoder unidirecional não tinha.

No decoder, a cada passo i:

# U_a·h[j] não depende de i: pré-computado uma vez por frase
e    = [v_a · tanh(W_a·s[i-1] + U_a·h[j]) for j in origem]
α    = softmax(e)                            # pesos sobre as posições de origem
c    = sum(α[j] * h[j] for j in origem)      # contexto desta palavra
s[i] = gated_unit(s[i-1], y[i-1], c)
y[i] = softmax(maxout(s[i-1], y[i-1], c))

O alinhador a é um perceptron de uma camada só, escolhido justamente porque roda muitas vezes. Fixe c em h_Tx da passada para frente e o modelo vira o encoder–decoder original: a diferença entre as duas arquiteturas é essa linha.

O resto é convencional para a época: unidade recorrente com portas de update e reset, mil unidades escondidas, embedding de 620, camada maxout de 500 na saída, Adadelta, minibatch de 80 frases, cerca de cinco dias de treino por modelo, beam search na hora de gerar.

o que isso custou

O alinhador é avaliado T_x × T_y vezes por par de frases. Os autores declaram isso como limitação e a relativizam pelo domínio: em tradução as frases têm 15 a 40 palavras, então dá. Fora daí, dizem, pode não dar.

O preço aparece no treino. A RNNsearch-50 completou 2,88×10⁵ updates em 111 horas; o encoder–decoder fez 6,00×10⁵ em 108 horas. Cada update custa bem mais caro. Compensa — a RNNsearch chega a NLL de desenvolvimento de 38,1 contra 43,6 — mas compensa pagando.

E a comparação com o Moses precisa de asterisco, que o próprio paper coloca. No teste completo, o melhor modelo faz 28,45 contra 33,30. O empate técnico só existe no subconjunto de frases sem palavras desconhecidas: 36,15 contra 35,63. O vocabulário é de 30.000 palavras por língua e todo o resto vira [UNK]. A conclusão do paper diz com todas as letras que tratar palavras raras é o desafio que fica para depois. Em compensação, o Moses usou 418M palavras de corpus monolíngue que a RNNsearch não viu.

A análise de alinhamento também é qualitativa: quatro matrizes de exemplo, sem métrica. Elas mostram coisas boas — o modelo alinha [zone] com [Area] pulando duas palavras para formar [zone économique européenne] — mas são amostras, não avaliação.

onde isso aparece hoje

Attention nasceu aqui como enxerto num RNN e depois virou a arquitetura inteira: o transformer joga fora a recorrência e mantém exatamente essa soma ponderada sobre posições, que é a base dos modelos de linguagem atuais. O custo T_x × T_y que os autores mencionam de passagem é o mesmo custo quadrático que hoje define o preço de uma janela de contexto. A matriz de pesos como objeto de inspeção também sobreviveu — olhar α para entender o que o modelo consultou continua sendo a primeira ferramenta de interpretabilidade que qualquer um alcança. E o problema de palavras raras que eles deixam em aberto foi resolvido por outro caminho, o da tokenização em subpalavras, que tirou o [UNK] do vocabulário em vez de ensinar o modelo a lidar com ele.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·