Lección 11 del módulo “Redes Recurrentes y LSTM” del curso Fundamentos de Deep Learning con Python.
En las dos últimas lecciones hemos visto los elementos esenciales de las Redes LSTM: las compuertas y la celda de memoria y la actualización de la celda de memoria y del estado oculto.
Así que ya estamos listos para ver de forma práctica el potencial de esta arquitectura para el procesamiento de secuencias.
Entonces, en esta práctica veremos cómo diseñar, entrenar y poner a prueba una Red LSTM capaz de clasificar una crítica a una película (en formato texto) como positiva o negativa.
Así que comencemos viendo en detalle las características del sistema que vamos a implementar así como el pre-procesamiento de los datos:
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
Para este proyecto usaremos el dataset IMDB (Internet Movie Database) que contiene 50.000 críticas a diferentes películas, etiquetadas por sentimiento: 0 para negativos y 1 para positivos.
Como parte de la preparación del set de datos debemos garantizar que cada palabra en el review correspondiente esté representada con un número entero, que para la codificación a usar corresponde a la frecuencia con que la palabra aparece en el dataset.
Adicionalmente, debemos definir enteros específicos para codificar los espacios en blanco, los inicios de frase, las palabras desconocidas o las palabras no usadas, entre otras.
Por otra parte, al implementar la Red LSTM usaremos un tamaño de secuencia de máximo 100 elementos, de tal manera que para reviews con una longitud menor a este valor haremos uso del rellenado con ceros (padding) para completar el tamaño de la secuencia. Con esto garantizamos que todas las secuencias procesadas por la Red LSTM tendrán un tamaño fijo de 100.
Posteriormente, como parte del pre-procesamiento, usaremos un word embedding. Es decir que entrenaremos una pequeña Red Neuronal que representará de forma compacta (con 128 elementos) cada palabra. De esta forma palabras similares tendrán representaciones vectoriales similares.
Y por último añadiremos nuestra Red LSTM que tendrá igualmente un tamaño de 128 (UNITS = 128) correspondientes al tamaño de la celda de memoria y del estado oculto. Y con esto tendremos un modelo con un poco más de 3 millones de parámetros.
Veamos ahora cómo entrenar este modelo y cómo generar predicciones (es decir cómo realizar la clasificación de sentimientos):
Contenido exclusivo para suscriptores
Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.
¡Excelente! Acabamos de ver que a pesar de que el modelo entrenado presenta algo de overfitting, en últimas alcanza una exactitud bastante buena con el set de prueba (80%) y de hecho al realizar el análisis de sentimientos con varios ejemplos de dicho dataset encontramos un desempeño adecuado. ¡No está nada mal para ser un primer modelo!, aunque podemos refinarlo para mejorar dicho desempeño.
Teniendo esta práctica como punto de partida estamos listos para realizar el proyecto final de esta sección, en donde usaremos las Redes LSTM para realizar la predicción de demanda energética.
Todas las lecciones del curso Fundamentos de Deep Learning con Python.
