Machine translation con deep learning. P1: carga de datos

| Última modificación: 9 de julio de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo realizaremos un ejercicio de machine translation con deep learning. En esta ocasión ejecutaremos la primera parte, correspondiente a la carga de datos.

Ejercicio de machine translation

El dataset

Lo primero que haremos será escoger el dataset. El dataset que usaremos estará formado por unos textos del parlamento europeo, el European Parliament Proceedings Parallel Corpus 1996 – 2011, donde tenemos un montón de traducciones.

Entonces, aquí tenemos textos en un idioma (hay muchísimos en inglés) y las traducciones de esos mismos textos a otros idiomas. Trabajaremos con textos en inglés y francés.

Descargar los datos

Lo primero que haremos, como siempre, es descargar los datos:

#Ejercicio de machine translation
! wget https://www.statmt.org/europarl/v7/fr-en.tgz
#Ejercicio de machine translation
! tar zxvf fr - en.tgz
#Ejercicio de machine translation
! head europarl - v7.fr - en.en
Machine translation con deep learning. P1: carga de datos
#Ejercicio de machine translation
! head europarl - v7.fr - en.fr
Machine translation con deep learning. P1: carga de datos

Carga del dataset

#Ejercicio de machine translation
! pip uninstall tensorflow
Machine translation
#Ejercicio de machine translation
! pip install tensorflow - gpu == 2.4.0
Machine translation con deep learning.
#Ejercicio de machine translation
from tensorflow.python.client import device_lib
print (device_lib.list_local_devices ())
#Ejercicio de machine translation
import tensorflow as tf

physical_devices = tf.config.list_physical_devices ('GPU')
tf.config.experimental.set_memory_growth (physical_devices [0], enable = True)

Librerías

Ahora haremos uso de las distintas librerías que, seguramente, ya hayas visto en otros artículos de nuestro blog.

#Ejercicio de machine translation
import collections
import os

import numpy as np

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Model
from tensorflow.keras.layers import GRU, Input, Dense, TimeDistributed, Activation, RepeatVector, Bidirectional
from tensorflow.keras.layers import Embedding
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import sparse_categorical_crossentropy

A continuación, haremos la definición de una función para cargar los datos:

#Ejercicio de machine translation
def load_data (path):
       " " "
       Load dataset
       " " "
       input_file = os.path.join (path)
       with open (input_file, "r") as f:
              data = f.read ()
       return data.split ('\n')

Este ejercicio nos devuelve una lista de los datos divididos en frases. Utilizamos el salto de línea como separador.

Ahora vamos a cargar las palabras en inglés y en frances. Definimos el fichero para cada uno de los idiomas. Con esto veremos cuántos datos tenemos en el dataset y con cuántos vamos a trabajar.

#Ejercicio de machine translation
#Load english data
english_sentences = load_data ('europarl - v7.fr - en.en')
#Load french data
french_sentences = load_data ('europarl - v7.fr - en.fr')

print ('Dataset Loaded')
print (len (english_sentences))

dataset_size = int (len (english_sentences) / 6)

#Use a small dataset
english_sentences = english_sentences [:dataset:size]
french_sentences = french_sentences [:dataset_size]

Dataset Loaded:

2.007.724

Vemos que, en total, tenemos dos millones de frases, pero solo trabajaremos con una pequeña parte de este dataset; de otra forma, la máquina, por muy potente que sea, puede llegar a colapsar.

Para ello establecemos el tamaño con el que queremos trabaja; en este caso, será 6 veces menor que el tamaño original.

Aquí no tenemos que hacer ningún tipo de reequilibrado de labels ni nada por el estilo, porque al final lo único que tenemos es texto y no hay etiquetas.

Ahora veamos la representación de estos textos:

#Ejercicio de machine translation
for sample_i in range (2):
       print ('europarl - v7.fr - en.en Line { }: { }'.format (sample_i + 1, english_sentences [sample_i]))
       print ('europarl - v7.fr - en.fr Line { }: { }'.format (sample_i + 1, french_sentences [sample_i]))

Después de esto, lo que haremos es una pequeña etapa de exploración de cara al procesamiento. Para ello usamos el módulo de collection y, por tanto, el counter:

#Ejercicio de machine translation
english_words_counter = collections.Counter ([word for sentence in english_sentences for word in sentence.split ()])
french_words_counter = collections.Counter ([word for sentence in french_sentences for word in sentence.split ()])

Así, podremos ver cuáles son las palabras más frecuentes en ambos idiomas y algunas otras generalidades que podemos hacer en un prepreprocesado:

#Ejercicio de machine translation
print ('{ } English words.'.format (len ([word for sentence in english_sentences for word in sentence.split ()])))
print ('{ } unique English words.'.format (len (english_words_counter)))
print ('10 Most common words in the English dataset: ')
print (' " ' + ' "  " '.join (list (zip (*english_words_counter.most_common (10))) [0]) + ' " ')
print ( )
print ('{ } French words.'.format (len ([word for sentence in french_sentences for word in sentence.split ()])))
print ('{ } unique French words.'.format (len (french_words_counter)))
print ('10 Most common words in the French dataset: ')
print (' " ' + ' "  " '.join (list (zip (*french_words_counter.most_common (10))) [0]) + ' " ')
Machine translation con deep learning.

Sabemos que el Big Data tiene muchísimas vertientes y, por tanto, hay infinidad de temas sobre los cuales puedes aprender. En KeepCoding tienes la posibilidad de formarte con los mejores profesionales, que te guiarán a través de la teoría y la práctica, lo que te permitirá convertirte en un gran profesional del sector IT en cuestión de meses. Échale un vistazo al temario del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp y descubre esta formación íntegra e intensiva. ¡No dudes en pedir más información y da el paso que impulsará tu carrera!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado