antonio leandro

ia generativa

Neural Machine Translation of Rare Words with Subword Units

paper · Rico Sennrich, Barry Haddow, Alexandra Birch ·

a tese

vocabulário fixo não é teto: quebrando a palavra rara em subword units aprendidas por um algoritmo de compressão de 1994, a rede traduz e inventa palavra que nunca viu, e o dicionário de back-off some

o que fica

  1. O tamanho do vocabulário deixa de ser um teto e vira um botão: o número de merges é o único hiperparâmetro do BPE, e o vocabulário final é o alfabeto inicial mais esse número.
  2. Reduzir o vocabulário da rede pode melhorar a tradução, porque uma subword unit é menos esparsa que uma palavra rara — no corpus dos autores, o rank 50.000 corresponde a 60 ocorrências no treino e o rank 500.000 a duas.
  3. Aprender o BPE sobre a união dos dois idiomas rende mais que aprender o melhor BPE de cada lado, porque segmentação inconsistente entre origem e destino ensina transliteração errada.
  4. A segmentação não precisa respeitar morfema para funcionar: a rede produziu a tradução correta a partir de cortes linguisticamente ruins como Forsch | ungsinstitu | ten.
  5. O ganho em Bleu é pequeno (até 1,1 no inglês→alemão e 1,3 no inglês→russo) porque palavras raras e OOV são só 9% a 11% dos tokens de teste; o efeito real está no F1 unigrama dessa fatia.
  6. Passar a gerar palavras novas troca precisão por recall: nos OOV do inglês→alemão o dicionário de back-off acertava 60,6% do que produzia, e o melhor sistema de subword, 38,6%.

o problema

Em 2015 um modelo de tradução neural carregava um vocabulário fixo de 30.000 a 50.000 palavras. Tradução não é um problema fechado: sempre chega um nome próprio, um empréstimo, um composto que não estava na lista. A palavra virava UNK e a saída perdia o conteúdo. O remédio da época era um dicionário de back-off: a rede emite UNK, e um passo posterior consulta ou copia a palavra correspondente na origem.

Esse remédio assume duas coisas que muitas vezes não valem. A primeira é que existe correspondência de uma palavra para uma palavra entre os idiomas — o alemão Abwasser|behandlungs|anlange é uma palavra só para as quatro de sewage water treatment plant. A segunda é que copiar resolve nome próprio: resolve quando os alfabetos coincidem, e falha em inglês→russo, onde o que se exige é transliteração. E, em qualquer cenário, um modelo de palavra não gera palavra que nunca viu. Os autores olharam 100 tokens raros do treino em alemão (fora dos 50.000 tipos mais frequentes) e encontraram 56 compostos, 21 nomes, 6 empréstimos de origem comum, 5 afixações transparentes, 1 número e 1 identificador de linguagem de programação. A maioria era traduzível por partes menores.

a ideia

Um tradutor humano competente traduz palavra que nunca viu porque reconhece as partes. A aposta do paper é que a rede faz o mesmo, desde que você lhe entregue as partes: represente a palavra rara como sequência de subword units e o problema de vocabulário aberto sai do pós-processamento e entra na própria rede. Um conjunto fixo de símbolos de comprimento variável cobre um conjunto infinito de palavras.

Falta o critério de corte. Segmentadores herdados da tradução estatística — divisão de compostos, hifenização, Morfessor — são conservadores: reduzem pouco o vocabulário e continuam deixando desconhecidos. O achado do paper é que o critério certo já existia como algoritmo de compressão de dados: byte pair encoding, de 1994, que substitui iterativamente o par de bytes mais frequente por um byte não usado. Troque byte por caractere e você tem um segmentador que otimiza compressão, não linguística.

como funciona

O treino roda sobre o dicionário do corpus, cada palavra pesada pela frequência. Cada palavra começa como sequência de caracteres mais um símbolo de fim de palavra, que é o que permite recuperar a tokenização original depois da tradução. Aí é um laço:

para i em 1..num_merges:
    pares = conta todos os pares de símbolos adjacentes, ponderados pela frequência da palavra
    melhor = par mais frequente
    substitui toda ocorrência de melhor por um símbolo novo

Pares não cruzam fronteira de palavra. Cada merge cria um símbolo que é um n-grama de caracteres; n-gramas frequentes acabam virando a palavra inteira, e por isso o BPE dispensa a shortlist de palavras não segmentadas que os modelos de caractere precisam. Em tempo de teste, quebra-se a palavra em caracteres e aplicam-se os merges aprendidos, na ordem — o que funciona para qualquer palavra.

O efeito na estatística do corpus alemão: sem segmentar, 100 milhões de tokens, 1.750.000 tipos e 1.079 desconhecidos no newstest2013. Com BPE, 112 milhões de tokens, 63.000 tipos e nenhum desconhecido. Caractere puro zeraria os desconhecidos também, mas a 550 milhões de tokens.

Uma variante importa: aprender o BPE sobre a concatenação dos dois lados do corpus (joint BPE) em vez de um encoding por idioma. Alfabetos diferentes atrapalham isso, então para o russo os autores transliteram o vocabulário para o latino com ISO-9, aprendem os merges e transliteram os merges de volta para o cirílico.

o que isso custou

O texto fica mais longo, e o custo do encoder-decoder é pelo menos linear no comprimento da sequência: 112 milhões de tokens contra 100 milhões. Segmentar demais piora isso.

O ganho agregado é modesto e as métricas discordam. No inglês→alemão, o melhor Bleu (25,3) veio do modelo de bigrama de caractere, e o melhor chrF3 (54,1) do joint BPE. Os próprios autores atribuem a inconsistência ao viés de precisão do Bleu e ao de recall do chrF3, e notam que palavras raras e OOV são apenas 9% a 11% do teste.

Segmentação inconsistente entre origem e destino gera transliteração errada. O BPE separado aprendeu, de pares mal alinhados no treino, a mapear rak para пра, e traduziu rakfisk com letra inserida e letra faltando. O joint BPE corrige boa parte disso, mas não tudo. E gerar palavra nova custa precisão: onde o dicionário de back-off copiava nomes com 60,6% de precisão nos OOV do inglês→alemão, o joint BPE fica em 38,6%, com recall maior. Ele inventa — às vezes bem, às vezes produzindo Asinin-Situation para asinine situation.

Dois limites que os autores declaram: a escolha do tamanho do vocabulário é arbitrária, motivada por comparação com trabalho anterior, e a variabilidade entre execuções chega a 1 Bleu no dev — os números de sistema único são o melhor de oito modelos no conjunto de desenvolvimento.

onde isso aparece hoje

O código saiu como subword-nmt e o algoritmo virou infraestrutura: BPE é a base dos tokenizers da família GPT e de boa parte dos modelos de linguagem que vieram depois, muito além de tradução. O vocabulário fechado com UNK saiu de cena.

A consequência prática que sobrou é a mesma do paper. Os merges são decididos por frequência no corpus de treino, então o corpus decide quantos tokens custa cada idioma, e o número de merges continua sendo o botão que troca tamanho de vocabulário por comprimento de sequência. A pergunta que os autores deixaram aberta — aprender automaticamente o tamanho ótimo do vocabulário para cada par de idiomas e volume de dados — continua sendo escolhida na mão.

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