Como desenvolver um sistema de tradução automática neural a partir do zero

Como desenvolver um sistema de tradução automática neural a partir do zero

Desenvolva um modelo de aprendizado profundo para automaticamente
Traduza do alemão para o inglês em Python com Keras, passo a passo.

A tradução automática é uma tarefa desafiadora que tradicionalmente envolve grandes modelos estatísticos desenvolvidos com conhecimento linguístico altamente sofisticado.

Tradução automática neural é o uso de redes neurais profundas para o problema de tradução automática.

Neste tutorial, você descobrirá como desenvolver um sistema de tradução automática neural para traduzir frases do alemão para o inglês.

Depois de concluir este tutorial, você saberá:

  • Como limpar e preparar dados prontos para treinar um sistema de tradução automática neural.
  • Como desenvolver um modelo codificador-decodificador para tradução automática.
  • Como usar um modelo treinado para inferência sobre novas frases de entrada e avaliar a habilidade do modelo.

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.

  • Atualização abril / 2019: Corrigido bug no cálculo da pontuação BLEU (Zhongpu Chen).
  • Atualização out / 2020: Adicionado link direto para o conjunto de dados original.
Como desenvolver um sistema de tradução automática neural em Keras

Como desenvolver um sistema de tradução automática neural em Keras
Foto de Björn Groß, alguns direitos reservados.

Visão geral do tutorial

Este tutorial é dividido em 4 partes; eles estão:

  1. Conjunto de dados de tradução de alemão para inglês
  2. Preparando os Dados de Texto
  3. Treinar modelo de tradução neural
  4. Avalie o modelo de tradução neural

Ambiente Python

Este tutorial presume que você tenha um ambiente Python 3 SciPy instalado.

Você deve ter o Keras (2.0 ou superior) instalado com o back-end TensorFlow ou Theano.

O tutorial também assume que você tem o NumPy e o Matplotlib instalados.

Se precisar de ajuda com seu ambiente, veja esta postagem:

Uma GPU não é necessária para este tutorial, no entanto, você pode acessar GPUs mais barato no Amazon Web Services. Aprenda como neste tutorial:

Vamos mergulhar.

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

Conjunto de dados de tradução de alemão para inglês

Neste tutorial, usaremos um conjunto de dados de termos de alemão para inglês usados ​​como base para flashcards para aprendizagem de idiomas.

O conjunto de dados está disponível no site ManyThings.org, com exemplos retirados do Projeto Tatoeba. O conjunto de dados é composto por frases em alemão e suas contrapartes em inglês e deve ser usado com o software flashcard Anki.

A página fornece uma lista de muitos pares de idiomas e eu o encorajo a explorar outros idiomas:

Observe que o conjunto de dados original foi alterado e, se usado diretamente, interromperá este tutorial e resultará em um erro:

Assim, você pode baixar o conjunto de dados original no formato correto diretamente aqui:

Baixe o arquivo do conjunto de dados para seu diretório de trabalho atual.

Você terá um arquivo chamado deu.txt que contém 152.820 pares de fases de inglês para alemão, um par por linha com uma guia separando o idioma.

Por exemplo, as primeiras 5 linhas do arquivo são as seguintes:

Vamos enquadrar o problema de previsão como dada uma sequência de palavras em alemão como entrada, traduzir ou prever a sequência de palavras em inglês.

O modelo que desenvolveremos será adequado para algumas frases básicas do alemão.

Preparando os Dados de Texto

A próxima etapa é preparar os dados de texto prontos para modelagem.

Se você é novo na limpeza de dados de texto, consulte esta postagem:

Dê uma olhada nos dados brutos e observe o que você vê que pode ser necessário tratar em uma operação de limpeza de dados.

Por exemplo, aqui estão algumas observações que observo ao revisar os dados brutos:

  • Existe pontuação.
  • O texto contém maiúsculas e minúsculas.
  • Existem caracteres especiais no alemão.
  • Existem frases duplicadas em inglês com diferentes traduções em alemão.
  • O arquivo é ordenado pelo comprimento da frase com frases muito longas no final do arquivo.

Você notou mais alguma coisa que poderia ser importante?
Deixe-me saber nos comentários abaixo.

Um bom procedimento de limpeza de texto pode lidar com algumas ou todas essas observações.

A preparação de dados é dividida em duas subseções:

  1. Texto Limpo
  2. Dividir Texto

1. Texto limpo

Primeiro, devemos carregar os dados de uma forma que preserve os caracteres Unicode alemães. A função abaixo chamada load_doc () irá carregar o arquivo como um blob de texto.

Cada linha contém um único par de frases, primeiro em inglês e depois em alemão, separadas por um caractere de tabulação.

Devemos dividir o texto carregado por linha e depois por frase. A função to_pairs () abaixo irá dividir o texto carregado.

Agora estamos prontos para limpar cada frase. As operações de limpeza específicas que realizaremos são as seguintes:

  • Remova todos os caracteres não imprimíveis.
  • Remova todos os caracteres de pontuação.
  • Normalize todos os caracteres Unicode para ASCII (por exemplo, caracteres latinos).
  • Normalize o caso para minúsculas.
  • Remova todos os tokens restantes que não sejam alfabéticos.

Vamos realizar essas operações em cada frase para cada par no conjunto de dados carregado.

O clean_pairs () a função abaixo implementa essas operações.

Finalmente, agora que os dados foram limpos, podemos salvar a lista de pares de frases em um arquivo pronto para uso.

A função save_clean_data () usa a API pickle para salvar a lista de texto limpo em um arquivo.

Reunindo tudo isso, o exemplo completo está listado abaixo.

Você também pode estar interessado em