5.12 - Práctica 1: Machine Translation
Lección 12 de la sección “Redes Transformer” del curso Fundamentos de Deep Learning con Python.
Tabla de contenido
Introducción
En la lección anterior hablamos de la etapa de salida del decodificador de una Red Transformer, y con ello terminamos de ver en detalle todos los elementos que constituyen esta arquitectura.
En esta primera práctica de la sección resolveremos un problema similar al que dio origen a estas Redes Transformer: la traducción de texto (o Machine Translation).
En particular implementaremos en Python una Red Transformer capaz de tomar una frase en Inglés y que aprenderá a generar la correspondiente frase en Español.
Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
Lectura, limpieza y pre-procesamiento del set de datos
Usaremos un set de datos disponible que contiene casi 120.000 pares de frases (Inglés-Español).
Lectura y limpieza del set de datos
Por tratarse de un set que se encuentra almacenado en un archivo de texto (extensión .txt), usaremos funciones básicas de Python para la lectura de archivos.
Por otra parte, en la limpieza intentaremos:
- Separar cada frase en cada uno de los dos idiomas
- Convertir caracteres a minúsculas
- Eliminar caracteres atípicos (#&@[} etc.) incluyendo signos de puntuación
- Crear tokens: ’the cat sat on the rug’ –> [’the’, ‘cat’, ‘sat’, ‘on’, ’the’, ‘rug’], añadiendo tokens de inicio (
<START>
) y finalización (<END>
) a las frases en Español
Para esto resultará útil el módulo string
de la librería estándar de Python
Creación de diccionarios
Al ingresar a la Red Transformer, cada token debe ser representado numéricamente. Así que crearemos dos diccionarios:
ing_int_dic
: diccionario de equivalencias Inglés -> Número Enteroesp_int_dic
: diccionario de equivalencias Español -> Número Entero
Para ello usaremos la estructura de diccionarios de Python
Padding
Como las frases tienen longitudes diferentes, es necesario usar padding (rellenar con ceros) para garantizar que al ingresar a la Red Transformer todas tengan la misma longitud.
Calcularemos el tamaño máximo de las secuencias y usaremos este valor para realizar el padding.
Codificación numérica
Finalmente, con las secuencias tokenizadas y con los diccionarios, convertiremos cada token a su representación numérica.
Creación sets de entrenamiento y prueba
Usaremos el 75% de los datos para el entrenamiento y el 25% restante para prueba.
Red Transformer
Creación
Una de las desventajas de la Red Transformer es su elevado número de parámetros: en su versión original la red contiene casi 60 millones de parámetros.
Dadas las limitaciones de almacenamiento y capacidad de procesamiento de la máquina virtual de Google Colab, tendremos que usar una arquitectura simplificada.
Para implementarla usaremos la librería keras-transformer
que fácilmente puede ser instalada usando el comando pip
.
Entrenamiento
Para el modelo anterior se requieren un poco más de 3 min/epoch para el entrenamiento. Así que haremos un total de 10 iteraciones de entrenamiento y usaremos un tamaño de lote relativamente pequeño (64) para evitar problemas de almacenamiento en memoria.
Traducción con el modelo entrenado
Usaremos la función decode
de la librería keras_transformer
.
La traducción se lleva a cabo siguiendo estos pasos:
- Tomar la frase en Inglés, tokenizarla y agregar padding
- Codificar numéricamente la frase tokenizada
- Llevar la secuencia resultante al modelo usando la función
decode
- Tomar la secuencia numérica generada por el modelo y representarla en formato de texto usando el diccionario
esp_int_dic_inv
Usaremos frases escritas en minúscula y sin caracteres atípicos o signos de puntuación.
Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online
Conclusión
Muy bien, con ayuda de Python y la librería Keras ¡hemos logrado crear y entrenar nuestra primera Red Transformer!
Y su desempeño es bastante bueno, pues es capaz de interpretar el significado de la frase y generar la traducción correcta de Inglés a Español, incluso si hacemos ligeros cambios entre una frase y otra.
Así que en las próximas lecciones veremos nuevas arquitecturas que han tomado como punto de partida la Red Transformer original que acabamos de implementar para resolver diversos problemas de procesamiento de secuencias.
En particular, en la próxima lección hablaremos de una de estas primeras arquitecturas, que se conoce como BERT y que introduce el concepto de transferencia de aprendizaje al área del Procesamiento del Lenguaje Natural, lo que ha permitido desarrollar aplicaciones muy interesantes en este campo.