LSTM bidireccionales: cómo implementarlas

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En un post anterior vimos un ejercicio de machine translation, en el que evaluamos diferentes modelos para probar cuál era mejor. En esta ocasión, te mostraremos cómo implementar uno de esos modelos, denominado LSTM bidireccionales. Lo haremos por medio de TensorFlow.

¿Qué son las LSTM bidireccionales?

Una LSTM bidireccional (memoria a largo plazo o a corto plazo) es un tipo de arquitectura de red neuronal utilizada en el aprendizaje profundo. Está diseñada específicamente para procesar datos secuenciales, como lenguaje natural o datos de series temporales.

Las lstm ai bidireccionales funcionan procesando los datos de entrada en dos direcciones: desde el principio hasta el final (dirección hacia adelante) y desde el final hasta el principio (dirección hacia atrás), lo que permite que el modelo capture el contexto pasado y futuro de los datos de entrada.

La salida del lstmm bidireccional se genera concatenando las salidas de las capas lst m hacia delante y hacia atrás. Esto permite que el modelo aproveche la información de ambas direcciones, lo que puede mejorar la precisión de las predicciones.

Las LSTM bidireccionales se usan comúnmente en tareas como el procesamiento del lenguaje natural, el reconocimiento de voz y el análisis de sentimientos, donde el contexto de los datos de entrada es importante para una predicción precisa.

Implementación de LSTM bidireccionales

El planteamiento de estas LSTM bidireccionales es muy parecido a lo que vimos en el ejercicio mencionado anteriormente. En este caso, no hemos incluido embeddings, aunque se podrían incluir; como el uso de ciertas funcionalidades que debemos causan que el procedimiento sea bastante pesado, optamos por no usarlas.

El input es exactamente el mismo, la diferencia radica en que definimos la GRU de la misma manera que antes, solo que encapsulamos todo el procedimiento dentro de la función bidireccional.

En el TimeDistributed decimos cómo se van a propagar los pesos a lo largo de la capa, que va a ser una Dense.

En el caso de las LSTM bidireccionales, vamos a hacer una GRU de 100 neuronas y la haremos en los dos sentidos, de ahí el nombre de bidireccional.

Luego hacemos el TimeDistributed y las rnn.

Entonces, así quedarían nuestras dependencias:

  • Entrada.
  • De la entrada pasa a la GRU bidireccional.
  • De la salida de la bidireccional pasa al Time Distributed para generar las predicciones.

Acto seguido, creamos el model, hacemos el compile y hacemos un entrenamiento exactamente igual al del modelo anterior.

Aquí entramos en la parte más nueva, donde cambiamos un poco el planteamiento o la tipología de la arquitectura.

#Implementación de LSTM bidireccionales
learning_rate = 1 e - 3

input_seq = Input (tmp_x.shape [1:])
rnn = Bidirectional (GRU (100, return_sequences = True)) (input_seq)
logits = TimeDistributed (Dense (french_vocab_size)) (rnn)

model = Model (input_seq, Activation ('softmax') (logits))
model.compile (loss = sparse_categorical_crossentropy, optimizer = Adam (learning_rate), metrics = ['accuracy'])

model.fit (tmp_x, preproc_french_sentences, batch_size = 64, epochs = 1, validation_split = 0.2)

#Print prediction (s)
print (logits_to_next (model.predict (tmp_x [:1]) [0], french_tokenizer))

Arquitectura seq to seq

Lo que hemos estado haciendo en los anteriores ejercicios es una arquitectura many to many, con una misma entrada y una misma salida. Ahora vamos a cambiar a una arquitectura más compleja, denominada seq to seq, una arquitectura que utilizó Google en su primer traductor y que usaremos nosotros aquí para realizar nuestro ejercicio de machine translation. Este tipo de arquitectura también puede llamarse many to many, con la característica que especifica que tiene diferentes entradas y salidas.

LSTM bidireccionales

Algunas de las diferencias más relevantes respecto a la arquitectura anterior es que no van a ser iguales las celdas que tengamos de entrada y las de salida. Lo que se va a recibir como entrada va a ser un encoder y lo que se va a recibir de salida será un decoder.

¿Qué sigue?

Ahora que hemos visto el funcionamiento de las LSTM bidireccionales por medio de un ejercicio de aplicación, podemos seguir aprendiendo sobre este amplio mundo de la tecnología y, en específico, del Big Data.

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

Artículos ms leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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