Como configurar um modelo codificador-decodificador para tradução automática neural

Como configurar um modelo codificador-decodificador para tradução automática neural

A arquitetura do codificador-decodificador para redes neurais recorrentes está alcançando resultados de ponta em benchmarks de tradução automática padrão e está sendo usada no coração dos serviços de tradução industrial.

O modelo é simples, mas dada a grande quantidade de dados necessários para treiná-lo, ajustar a miríade de decisões de design no modelo para obter o melhor desempenho em seu problema pode ser praticamente intratável. Felizmente, os cientistas pesquisadores usaram hardware em escala do Google para fazer esse trabalho para nós e fornecer um conjunto de heurísticas para configurar o modelo codificador-decodificador para tradução automática neural e para predição de sequência em geral.

Nesta postagem, você descobrirá os detalhes de como configurar melhor uma rede neural recorrente codificador-decodificador para tradução automática neural e outras tarefas de processamento de linguagem natural.

Depois de ler esta postagem, você saberá:

  • O estudo do Google que investigou cada decisão de design de modelo no modelo codificador-decodificador para isolar seus efeitos.
  • Os resultados e recomendações para decisões de design, como incorporação de palavras, profundidade do codificador e do decodificador e mecanismos de atenção.
  • Um conjunto de decisões de design de modelo básico que pode ser usado como ponto de partida em seus próprios projetos de sequência para sequência.

Comece seu projeto com meu novo livro Deep Learning for Natural Language Processing, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

Como configurar um modelo codificador-decodificador para tradução automática neural

Como configurar um modelo codificador-decodificador para tradução automática neural
Foto do Sporting Park, alguns direitos reservados.

Modelo codificador-decodificador para tradução automática neural

A arquitetura do codificador-decodificador para redes neurais recorrentes está substituindo os sistemas de tradução automática estatística com base em frases clássicas para obter resultados de última geração.

Como prova, em seu artigo de 2016 “Sistema de tradução automática neural do Google: Reduzindo a lacuna entre tradução humana e automática”, o Google agora usa a abordagem em seu serviço Google Translate.

Um problema com essa arquitetura é que os modelos são grandes, exigindo, por sua vez, conjuntos de dados muito grandes para treinar. Isso faz com que o treinamento do modelo leve dias ou semanas e exija recursos computacionais que geralmente são muito caros. Como tal, pouco trabalho foi feito sobre o impacto das diferentes opções de design no modelo e seu impacto na habilidade do modelo.

Este problema é abordado explicitamente por Denny Britz, et al. em seu artigo de 2017 "Massive Exploration of Neural Machine Translation Architectures". No artigo, eles projetam um modelo básico para uma tarefa de tradução padrão de inglês para alemão e enumeram um conjunto de diferentes opções de design de modelo e descrevem seu impacto na habilidade do modelo. Eles afirmam que o conjunto completo de experimentos consumiu mais de 250.000 horas de computação de GPU, o que é impressionante, para dizer o mínimo.

Nós relatamos resultados empíricos e números de variação para várias centenas de execuções experimentais, correspondendo a mais de 250.000 horas de GPU na tarefa de tradução WMT de inglês para alemão padrão. Nossos experimentos levam a novos insights e conselhos práticos para construir e estender arquiteturas NMT.

Nesta postagem, veremos algumas das descobertas deste artigo que podemos usar para ajustar nossos próprios modelos de tradução automática neural, bem como modelos sequência a sequência em geral.

Para obter mais informações sobre a arquitetura do codificador-decodificador e o mecanismo de atenção, consulte as postagens:

Precisa de ajuda com Deep Learning for Text Data?

Faça meu curso intensivo de e-mail gratuito de 7 dias agora (com código).

Clique para se inscrever e também obter uma versão gratuita do Ebook em PDF do curso.

Comece Seu Crash-Course GRÁTIS Agora

Modelo de linha de base

Podemos começar descrevendo o modelo de linha de base usado como ponto de partida para todos os experimentos.

Uma configuração de modelo de linha de base foi escolhida de forma que o modelo funcionasse razoavelmente bem na tarefa de tradução.

  • Incorporação: 512 dimensões
  • Célula RNN: Unidade Recorrente Gated ou GRU
  • Codificador: Bidirecional
  • Profundidade do codificador: 2 camadas (1 camada em cada direção)
  • Profundidade do decodificador: 2 camadas
  • Atenção: estilo Bahdanau
  • Otimizador: Adam
  • Abandono: 20% na entrada

Cada experimento começou com o modelo de linha de base e variou um elemento na tentativa de isolar o impacto da decisão de design na habilidade do modelo, neste caso, pontuações BLEU.

Arquitetura codificador-decodificador para tradução automática neural

Arquitetura codificador-decodificador para tradução automática neural
Retirado de "Massive Exploration of Neural Machine Translation Architectures".

Tamanho de incorporação

Uma incorporação de palavras é usada para representar palavras de entrada para o codificador.

Esta é uma representação distribuída em que cada palavra é mapeada para um vetor de tamanho fixo de valores contínuos. O benefício dessa abordagem é que palavras diferentes com significado semelhante terão uma representação semelhante.

Essa representação distribuída geralmente é aprendida ao ajustar o modelo aos dados de treinamento. O tamanho de incorporação define o comprimento dos vetores usados ​​para representar palavras. Geralmente, acredita-se que uma dimensionalidade maior resultará em uma representação mais expressiva e, por sua vez, em uma habilidade melhor.

Curiosamente, os resultados mostram que o maior tamanho testado alcançou os melhores resultados, mas o benefício de aumentar o tamanho foi menor no geral.

[results show] que os embeddings de 2048 dimensões produziram o melhor resultado geral, eles só o fizeram por uma pequena margem. Mesmo pequenos embeddings de 128 dimensões tiveram um desempenho surpreendentemente bom, enquanto convergiam quase duas vezes mais rápido.

Recomendação: Comece com uma pequena incorporação, como 128, talvez aumente o tamanho mais tarde para um pequeno aumento na habilidade.

Tipo de célula RNN

Geralmente, existem três tipos de células de rede neural recorrente que são comumente usadas:

  • RNN simples.
  • Memória longa de curto prazo ou LSTM.
  • Unidade recorrente bloqueada ou GRU.

O LSTM foi desenvolvido para resolver o problema do gradiente de fuga do RNN Simples que limitava o treinamento de RNNs profundos. O GRU foi desenvolvido na tentativa de simplificar o LSTM.

Os resultados mostraram que o GRU e o LSTM foram significativamente melhores do que o RNN Simples, mas o LSTM foi geralmente melhor no geral.

Em nossos experimentos, as células LSTM superaram consistentemente as células GRU

Recomendação: Use unidades LSTM RNN em seu modelo.

Profundidade do codificador-decodificador

Geralmente, acredita-se que redes mais profundas alcançam melhor desempenho do que redes rasas.

A chave é encontrar um equilíbrio entre profundidade da rede, habilidade do modelo e tempo de treinamento. Isso ocorre porque geralmente não temos recursos infinitos para treinar redes muito profundas se o benefício para a habilidade for mínimo.

Os autores exploram a profundidade dos modelos de codificador e decodificador e o impacto na habilidade do modelo.

Quando se trata de codificadores, descobriu-se que a profundidade não teve um impacto dramático na habilidade e, mais surpreendentemente, um modelo unidirecional de 1 camada tem desempenho apenas um pouco pior do que uma configuração unidirecional de 4 camadas. Um codificador bidirecional de duas camadas teve um desempenho ligeiramente melhor do que outras configurações testadas.

Não encontramos nenhuma evidência clara de que a profundidade do codificador além de duas camadas é necessária.

Recomendação: Use um codificador bidirecional de 1 camada e estenda para 2 camadas bidirecionais para um pequeno aumento na habilidade.

Uma história semelhante foi vista quando se tratava de decodificadores. A habilidade entre os decodificadores com 1, 2 e 4 camadas era um pouco diferente, enquanto um decodificador de 4 camadas era um pouco melhor. Um decodificador de 8 camadas não convergiu nas condições de teste.

No lado do decodificador, os modelos mais profundos superaram os mais rasos por uma pequena margem.

Recomendação: Use um decodificador de 1 camada como ponto de partida e use um decodificador de 4 camadas para obter melhores resultados.

Direção da entrada do codificador

A ordem da sequência do texto fonte pode ser fornecida ao codificador de várias maneiras:

  • Avançar ou normal.
  • Invertido.
  • Avançar e inverter ao mesmo tempo.

Os autores exploraram o impacto da ordem da sequência de entrada na habilidade do modelo comparando várias configurações unidirecionais e bidirecionais.

Geralmente, eles confirmaram as descobertas anteriores de que uma sequência reversa é melhor do que uma sequência direta e que bidirecional é ligeiramente melhor do que uma sequência reversa.

… Os codificadores bidirecionais geralmente superam os codificadores unidirecionais, mas não por uma grande margem. Os codificadores com fonte reversa superam consistentemente seus equivalentes não reversos.

Recomendação: Use uma sequência de entrada de ordem reversa ou mova para bidirecional para um pequeno aumento na habilidade do modelo.

Mecanismo de Atenção

Um problema com o modelo codificador-decodificador ingênuo é que o codificador mapeia a entrada para uma representação interna de comprimento fixo a partir da qual o decodificador deve produzir toda a sequência de saída.

Atenção é uma melhoria do modelo que permite ao decodificador “prestar atenção” a diferentes palavras na sequência de entrada à medida que produz cada palavra na sequência de saída.

Os autores examinam algumas variações de mecanismos simples de atenção. Os resultados mostram que ter atenção resulta em um desempenho dramaticamente melhor do que não ter atenção.

Embora esperássemos que os modelos baseados em atenção superassem significativamente aqueles sem um mecanismo de atenção, ficamos surpresos com o quão ruim o [no attention] modelos se saíram.

O estilo de atenção de média ponderada simples descrito por Bahdanau, et al. em seu artigo de 2015 “Tradução automática neural aprendendo a alinhar e traduzir em conjunto” foi considerada a melhor performance.

Recomendação: Use a atenção e prefira a atenção ao estilo médio ponderado ao estilo Bahdanau.

Inferência

É comum em sistemas de tradução automática neural usar uma pesquisa de feixe para amostrar as probabilidades das palavras na sequência de saída do modelo.

Quanto maior a largura do feixe, mais exaustiva será a pesquisa e, acredita-se, melhores serão os resultados.

Os resultados mostraram que uma largura de feixe modesta de 3-5 teve o melhor desempenho, o que poderia ser melhorado apenas ligeiramente com o uso de penalidades de comprimento. Os autores geralmente recomendam ajustar a largura do feixe em cada problema específico.

Descobrimos que uma busca de feixe bem ajustada é crucial para alcançar bons resultados e que leva a ganhos consistentes de mais de um ponto BLEU.

Recomendação: Comece com uma pesquisa gananciosa (feixe = 1) e ajuste com base no seu problema.

Modelo final

Os autores reúnem suas descobertas em um único “melhor modelo” e comparam os resultados desse modelo a outros modelos de bom desempenho e resultados de última geração.

As configurações específicas deste modelo estão resumidas na tabela abaixo, retirada do papel. Esses parâmetros podem ser considerados um bom ou melhor ponto de partida ao desenvolver seu próprio modelo de codificador-decodificador para um aplicativo de PNL.

Resumo da configuração do modelo para o modelo NMT final

Resumo da configuração do modelo para o modelo NMT final
Retirado de "Massive Exploration of Neural Machine Translation Architectures".

Os resultados do sistema se mostraram impressionantes e alcançaram habilidade próxima do estado da arte com um modelo mais simples, o que não era o objetivo do papel.

… Mostramos que, por meio do ajuste cuidadoso de hiperparâmetros e boa inicialização, é possível obter desempenho de última geração em benchmarks WMT padrão

É importante ressaltar que os autores fornecem todo o seu código como um projeto de código aberto chamado tf-seq2seq. Como dois dos autores eram membros do programa de residência do Google Brain, seu trabalho foi anunciado no blog do Google Research com o título “Apresentando tf-seq2seq: Uma estrutura de sequência a sequência de código aberto no TensorFlow“, 2017.

Leitura Adicional

Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.

Resumo

Nesta postagem, você descobriu a melhor forma de configurar uma rede neural recorrente codificador-decodificador para máquina neural ...

Você também pode estar interessado em