Como desenvolver um modelo Seq2Seq para tradução automática neural em Keras

Como desenvolver um modelo Seq2Seq para tradução automática neural em Keras

O modelo codificador-decodificador fornece um padrão para o uso de redes neurais recorrentes para resolver problemas desafiadores de predição de sequência a sequência, como tradução automática.

Modelos de codificador-decodificador podem ser desenvolvidos na biblioteca de aprendizado profundo Keras Python e um exemplo de um sistema de tradução automática neural desenvolvido com este modelo foi descrito no blog Keras, com código de amostra distribuído com o projeto Keras.

Nesta postagem, você descobrirá como definir um modelo de predição de sequência a sequência codificador-decodificador para tradução automática, conforme descrito pelo autor da biblioteca de aprendizado profundo Keras.

Depois de ler esta postagem, você saberá:

  • O exemplo de tradução automática neural fornecido com Keras e descrito no blog Keras.
  • Como definir corretamente um LSTM codificador-decodificador para treinar um modelo de tradução automática neural.
  • Como definir corretamente um modelo de inferência para usar um modelo de codificador-decodificador treinado para traduzir novas sequências.

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 definir um modelo de seqüência a seqüência codificador-decodificador para tradução automática neural em Keras

Como definir um modelo de seqüência a seqüência codificador-decodificador para tradução automática neural em Keras
Foto de Tom Lee, alguns direitos reservados.

Predição sequência a sequência em Keras

François Chollet, o autor da biblioteca de aprendizagem profunda Keras, lançou recentemente uma postagem de blog que mostra um exemplo de código para desenvolver um codificador-decodificador LSTM para predição sequência a sequência intitulado “Uma introdução de dez minutos à aprendizagem sequência a sequência em Keras “.

O código desenvolvido na postagem do blog também foi adicionado ao Keras como um exemplo no arquivo lstm_seq2seq.py.

A postagem desenvolve uma implementação sofisticada do codificador-decodificador LSTM, conforme descrito nos artigos canônicos sobre o assunto:

O modelo é aplicado ao problema da tradução automática, da mesma forma que os documentos originais nos quais a abordagem foi descrita pela primeira vez. Tecnicamente, o modelo é um modelo de tradução automática neural.

A implementação de François fornece um modelo de como a previsão de sequência para sequência pode ser implementada (corretamente) na biblioteca de aprendizado profundo de Keras no momento da escrita.

Neste post, veremos mais de perto exatamente como os modelos de treinamento e inferência foram projetados e como funcionam.

Você será capaz de usar esse conhecimento para desenvolver modelos semelhantes para seus próprios problemas de predição de sequência a sequência.

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

Dados de tradução automática

O conjunto de dados usado no exemplo envolve pares curtos de frases em francês e inglês usados ​​no software de cartão de memória Anki.

O conjunto de dados é chamado de “Pares de Frases Bilíngues delimitados por tabulação” e é parte do Projeto Tatoeba e listado no site ManyThings.org para ajudar alunos de Inglês como Segunda Língua.

O conjunto de dados usado no tutorial pode ser baixado aqui:

Abaixo está uma amostra das primeiras 10 linhas do fra.txt arquivo de dados que você verá após descompactar o arquivo baixado.

O problema é enquadrado como um problema de previsão de sequência em que as sequências de entrada de caracteres estão em inglês e as sequências de saída de caracteres estão em francês.

Um total de 10.000 dos quase 150.000 exemplos no arquivo de dados são usados ​​no conjunto de dados. Alguns detalhes técnicos dos dados preparados são os seguintes:

  • Sequências de entrada: Preenchido com um comprimento máximo de 16 caracteres com um vocabulário de 71 caracteres diferentes (10000, 16, 71).
  • Sequências de saída: Preenchido com um comprimento máximo de 59 caracteres com um vocabulário de 93 caracteres diferentes (10000, 59, 93).

Os dados de treinamento são estruturados de forma que a entrada para o modelo seja composta por uma sequência de entrada inteira de caracteres ingleses e toda a sequência de saída de caracteres franceses. A saída do modelo é toda a sequência de caracteres franceses, mas com deslocamento para frente em uma etapa de tempo.

Por exemplo (com preenchimento mínimo e sem codificação one-hot):

  • Input1: [‘G’, ‘o’, ‘.’, ”]
  • Input2: [ ”, ‘V’, ‘a’, ‘ ‘]
  • Resultado: [‘V’, ‘a’, ‘ ‘, ‘!’]

Modelo de tradução automática

O modelo de tradução neural é uma rede neural recorrente codificador-decodificador.

É composto por um codificador que lê uma sequência de entrada de comprimento variável e um decodificador que prevê uma sequência de saída de comprimento variável.

Nesta seção, passaremos por cada elemento da definição do modelo, com o código retirado diretamente da postagem e o exemplo de código no projeto Keras (no momento da escrita).

O modelo é dividido em dois submodelos: o codificador responsável por emitir uma codificação de comprimento fixo da sequência em inglês de entrada e o decodificador responsável por prever a sequência de saída, um caractere por intervalo de tempo de saída.

A primeira etapa é definir o codificador.

A entrada para o codificador é uma sequência de caracteres, cada um codificado como vetores one-hot com comprimento de num_encoder_tokens.

A camada LSTM no codificador é definida com o return_state argumento definido para Verdade. Isso retorna a saída do estado oculto retornada pelas camadas LSTM em geral, bem como o estado oculto e da célula para todas as células na camada. Eles são usados ​​ao definir o decodificador.

Em seguida, definimos o decodificador.

A entrada do decodificador é definida como uma sequência de caracteres franceses codificados a quente para vetores binários com um comprimento de num_decoder_tokens.

A camada LSTM é definida para retornar sequências e estado. Os estados finais ocultos e da célula são ignorados e apenas a sequência de saída dos estados ocultos é referenciada.

É importante ressaltar que o estado final oculto e de célula do codificador é usado para inicializar o estado do decodificador. Isso significa que sempre que o modelo do codificador codifica uma sequência de entrada, os estados internos finais do modelo do codificador são usados ​​como ponto de partida para a saída do primeiro caractere na sequência de saída. Isso também significa que as camadas LSTM do codificador e do decodificador devem ter o mesmo número de células, neste caso, 256.

UMA Denso camada de saída é usada para prever cada personagem. Esta Denso é usado para produzir cada caractere na sequência de saída de uma maneira única, em vez de recursivamente, pelo menos durante o treinamento. Isso ocorre porque toda a sequência de destino necessária para a entrada no modelo é conhecida durante o treinamento.

O Denso não precisa ser envolvido em um TimeDistributed camada.

Finalmente, o modelo é definido com entradas para o codificador e o decodificador e a sequência de destino de saída.

Podemos amarrar tudo isso em um exemplo autônomo e corrigir a configuração e imprimir um gráfico do modelo. O exemplo de código completo para definir o modelo está listado abaixo.

Você também pode estar interessado em