A tradução automática é a tarefa desafiadora de converter texto de um idioma de origem em texto coerente e correspondente em um idioma de destino.
Os sistemas neurais de tradução automática, como redes neurais recorrentes de codificador-decodificador, estão alcançando resultados de última geração para tradução automática com um único sistema ponta a ponta treinado diretamente no idioma de origem e de destino.
Conjuntos de dados padrão são necessários para desenvolver, explorar e familiarizar-se com como desenvolver sistemas de tradução automática neural.
Neste tutorial, você descobrirá o conjunto de dados de tradução automática padrão Europarl e como preparar os dados para modelagem.
Depois de concluir este tutorial, você saberá:
- O conjunto de dados Europarl incluía os trabalhos do Parlamento Europeu numa série de 11 línguas.
- Como carregar e limpar as transcrições paralelas em francês e inglês prontas para modelagem em um sistema de tradução automática neural.
- Como reduzir o tamanho do vocabulário de dados em francês e inglês para reduzir a complexidade da tarefa de tradução.
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 preparar um conjunto de dados francês para inglês para tradução automática
Foto de Giuseppe Milo, alguns direitos reservados.
Visão geral do tutorial
Este tutorial é dividido em 5 partes; eles estão:
- Conjunto de dados de tradução automática da Europarl
- Baixe o conjunto de dados francês-inglês
- Carregar conjunto de dados
- Limpar conjunto de dados
- Reduzir vocabulário
Ambiente Python
Este tutorial presume que você tenha um ambiente Python SciPy instalado com o Python 3 instalado.
O tutorial também pressupõe que você tenha o scikit-learn, Pandas, NumPy e Matplotlib instalados.
Se precisar de ajuda com seu ambiente, veja esta postagem:
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 automática da Europarl
O Europarl é um conjunto de dados padrão usado para tradução automática estatística e, mais recentemente, tradução automática neural.
É composto pelos trabalhos do Parlamento Europeu, daí o nome do conjunto de dados como a contração Europarl.
As actas são transcrições de oradores do Parlamento Europeu, traduzidas para 11 línguas diferentes.
É uma coleção dos trabalhos do Parlamento Europeu, que datam de 1996. No total, o corpus é composto por cerca de 30 milhões de palavras para cada uma das 11 línguas oficiais da União Europeia
- Europarl: A Parallel Corpus for Statistical Machine Translation, 2005.
Os dados brutos estão disponíveis no site do Parlamento Europeu em formato HTML.
A criação do conjunto de dados foi liderada por Philipp Koehn, autor do livro "Statistical Machine Translation".
O conjunto de dados foi disponibilizado gratuitamente para pesquisadores no site “European Parliament Proceedings Parallel Corpus 1996-2011” e muitas vezes aparece como parte de desafios de tradução automática, como a tarefa de Tradução Automática no Workshop de Tradução Automática Estatística de 2014.
A versão mais recente do conjunto de dados é a versão 7, lançada em 2012, composta por dados de 1996 a 2011.
Baixe o conjunto de dados francês-inglês
Vamos nos concentrar no conjunto de dados paralelo francês-inglês.
Este é um corpus preparado de frases alinhadas em francês e inglês gravadas entre 1996 e 2011.
O conjunto de dados possui as seguintes estatísticas:
- Frases: 2.007.723
- Palavras francesas: 51.388.643
- Palavras em inglês: 50,196,035
Você pode baixar o conjunto de dados aqui:
Depois de baixado, você deve ter o arquivo “fr-en.tgz”Em seu diretório de trabalho atual.
Você pode descompactar este arquivo usando o comando tar, da seguinte maneira:
Agora você terá dois arquivos, da seguinte maneira:
- Inglês: europarl-v7.fr-en.en (288M)
- Francês: europarl-v7.fr-en.fr (331M)
Abaixo está uma amostra do arquivo em inglês.
Reinício da sessão Declaro reaberta a sessão do Parlamento Europeu interrompida na sexta-feira, 17 de Dezembro de 1999, e gostaria mais uma vez de vos desejar um feliz ano novo, na esperança de que tenham passado um agradável período festivo. Embora, como você deve ter visto, o temido 'bug do milênio' não tenha se materializado, ainda assim as pessoas em vários países sofreram uma série de desastres naturais que foram realmente terríveis. Solicitou um debate sobre este assunto nos próximos dias, durante este período de sessões. Entretanto, gostaria de guardar um minuto de silêncio, tal como vários deputados solicitaram, em nome de todas as vítimas em causa, nomeadamente as das terríveis tempestades, nos vários países da União Europeia. |
Abaixo está uma amostra do arquivo francês.
Reprise de la session Je déclare reprise la session du Parlement européen qui avait été interrompue le vendredi 17 décembre dernier et je vous renouvelle tous mes vux en espérant that vous avez passé de bonnes vacances. Comme vous avez pu le constater, le grand "bogue de l'an 2000" ne s'est pas produit. En revanche, les citoyens d'un certo nombre de nos paga ont été victimes de catastrophes naturelles qui ont vraiment été terribles. Vous avez souhaité un débat à ce sujet dans les prochains jours, au cours de cette période de session. En Attant, je souhaiterais, comme un sure nombre de collègues me l'ont demandé, que nous observions une minute de silence pour toutes les victimes, des tempêtes notamment, dans les différents pays de l'Union européenne qui ont été touchés. |
Carregar conjunto de dados
Vamos começar carregando os arquivos de dados.
Podemos carregar cada arquivo como uma string. Como os arquivos contêm caracteres Unicode, devemos especificar uma codificação ao carregar os arquivos como texto. Neste caso, usaremos UTF-8 que manipulará facilmente os caracteres Unicode em ambos os arquivos.
A função abaixo, chamada load_doc (), carregará um determinado arquivo e o retornará como um blob de texto.
# carregar doc na memória def load_doc(nome do arquivo): # abre o arquivo como somente leitura Arquivo = abrir(nome do arquivo, modo='rt', codificação='utf-8') # ler todo o texto texto = Arquivo.leitura() # feche o arquivo Arquivo.fechar() Retorna texto |
Em seguida, podemos dividir o arquivo em frases.
Geralmente, um enunciado é armazenado em cada linha. Podemos tratá-los como frases e dividir o arquivo por caracteres de nova linha. A função to_sentences () abaixo irá dividir um documento carregado.
# divide um documento carregado em frases def to_sentences(doc): Retorna doc.faixa().dividir(' n') |
Ao preparar nosso modelo posteriormente, precisaremos saber a extensão das sentenças no conjunto de dados. Podemos escrever uma função curta para calcular as frases mais curtas e mais longas.
# frases mais curtas e mais longas def comprimento_da_ sentença(frases): comprimentos = [len(s.split()) for s in sentences] Retorna min(comprimentos), max(comprimentos) |
Podemos unir tudo isso para carregar e resumir os arquivos de dados em inglês e francês. O exemplo completo está listado abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# carregar doc na memória def load_doc(nome do arquivo): # abre o arquivo como somente leitura Arquivo = abrir(nome do arquivo, modo='rt', codificação='utf-8') # ler todo o texto texto = Arquivo.leitura() # feche o arquivo Arquivo.fechar() Retorna texto
# divide um documento carregado em frases def to_sentences(doc): Retorna doc.faixa().dividir(' n')
# frases mais curtas e mais longas def comprimento_da_ sentença(frases): comprimentos = [len(s.split()) for s in sentences] Retorna min(comprimentos), max(comprimentos)
# carregar dados em inglês nome do arquivo = 'europarl-v7.fr-en.en' doc = load_doc(nome do arquivo) frases = to_sentences(doc) minlen, maxlen = comprimento_da_ sentença(frases) imprimir('Dados em inglês: sentenças =% d, min =% d, max =% d' % (len(frases), minlen, maxlen))
# carregar dados franceses nome do arquivo = 'europarl-v7.fr-en.fr' doc = load_doc(nome do arquivo) frases = to_sentences(doc) minlen, maxlen = comprimento_da_ sentença(frases) imprimir('Dados em francês: sentenças =% d, min =% d, max =% d' % (len(frases), minlen, maxlen)) |
A execução do exemplo resume o número de linhas ou sentenças em cada arquivo e o comprimento das linhas mais longas e mais curtas em cada arquivo.