En este artículo vamos a hacer una introducción a las
Redes Neuronales Recurrentes (
RNN), una clase de redes que tienen la capacidad de predecir datos pertenecientes a secuencias o series temporales. Este tipo de redes tiene múltiples aplicaciones en la actualidad: desde predecir la evolución del precio de la acción en el mercado bursátil hasta en los sistemas de conducción autónomos, permitiendo la anticipación de trayectorias de automóvil para ayudar a evitar accidentes.
De manera más general, pueden funcionar en secuencias de longitudes arbitrarias, en lugar de con inputs de tamaño fijo, como ocurría con todas las redes que hemos discutido en los artículos anteriores. Por ejemplo, se pueden introducir oraciones, documentos o fragmentos de audio, por lo que este tipo de redes también resultan cruciales para el
Procesamiento del Lenguaje Natural (
NLP), presentes en sistemas de traducción automática, transcripción de discurso a texto o análisis de sentimientos; por ejemplo, leer reseñas de películas y ser capaz de evaluar la sensación del usuario sobre las mismas.
Figura 1: Neuronas.
En anteriores artículos, realizamos una introducción al manejo de la librería
TensorFlow para
Deep Learning:
una vez asimilados los conceptos básicos asociados al manejo de esta librería y de otras como
Keras, os proponemos dos ejercicios de clasificación con algunos
datasets no tan habituales en el aprendizaje de técnicas de
Machine Learning.
La progresión que se vaticina para las redes neuronales recurrentes es enorme, y sin duda en un futuro muy próximo verá refinado su funcionamiento y extendido su campo de aplicabilidad.
En este post nos centraremos en hacer uso de un tipo de bloque recurrente llamado
LSTM (
Long Short-Term Memory). Este tipo de celda fue propuesto por
Sepp Hochreiter y
Jürgen Schmidhuber en 1973 (podéis ver la
publicación original aquí). Esta propuesta de celda fue refinada con los años por varios investigadores como
Alex Graves,
Haşim Sak y
Wojciech Zaremba. Con las
LSTM, el entrenamiento converge más rápido y detecta
dependencias a largo plazo en los datos, aspecto que no estaba del todo cubierto con las
RNNs. Para profundizar más en el funcionamiento de una
LSTM y en las operaciones soportadas por ellas, recomendamos visitar el siguiente
enlace.
Vamos a mostrar cómo realizar predicción de texto y clasificación de texto haciendo uso de
LSTM con la librería
Keras. Esta librería es una biblioteca de aprendizaje profundo de código abierto escrita en Python. Es capaz de ejecutarse sobre
TensorFlow,
Microsoft Cognitive Toolkit o
Theano. Diseñado para permitir una rápida experimentación con redes neuronales profundas, es fácil de usar, modular y extensible.
En el siguiente
Jupyter Notebook mostramos cómo generar texto haciendo uso de celdas
LSTM. Para ello nos descargaremos un texto de muestra sobre el que entrenar nuestro modelo. A pesar de que el modelo es bastante simple, tarda algunas horas en entrenar. En el caso de que no dispongáis del tiempo suficiente, tenéis disponible en este
enlace el
checkpoint del modelo entrenado sobre el texto indicado en la introducción del cuaderno.
La clasificación de secuencias es un problema de
modelado predictivo en el que se tiene una secuencia de entradas sobre el espacio o el tiempo con la finalidad de
predecir una categoría para la secuencia. Lo que hace que este problema sea difícil es que las secuencias
pueden variar en longitud, estar compuestas de un vocabulario muy grande, tener símbolos de entrada y pueden requerir que el modelo aprenda el contexto a largo plazo o las dependencias entre símbolos en la secuencia de entrada.
En este cuaderno veremos cómo se pueden desarrollar modelos de redes neuronales recurrentes
LSTM para problemas de clasificación de secuencias en
Python utilizando la biblioteca de aprendizaje profundo
Keras.
Arriba hemos abordado distintas arquitecturas de clasificación con la estructura
Embedding + LSTM, así como un preprocesado de
t-SNE del vocabulario de las reseñas que se deseaban clasificar. Al igual que con el
Jupyter Notebook anterior, el entrenamiento puede ser bastante extenso, por lo que también tenéis disponible los
checkpoints de los modelos para acelerar las pruebas que deseéis realizar.