Modelos de secuencias-a-secuencias

En las arquitecturas Conditioned Generator el vector c puede tomar diversas formas y como bien mencionamos, este mismo vector puede ser la salida de otra red RNN. Este tipo de modelos se los conoce como modelos secuencias-a-secuencia o sequence2sequence y la arquitectura general se la conoce como Encoder-Decoder.

Encoder-Decoder

En esta configuración disponemos de una secuencia de entrada \(x _ {1:n}\) y estamos interesados en generar otra secuencia \(t _ {1:m}\), donde la secuencia \(x _ {1:n}\) es codificada en un vector de contexto c a traves de una función de codificación comunmente llamado encoder. Este encoder es en general una RNN. Luego, utilizando la ya conocida arquitectura Conditioned Generator, ahora llamada decoder, generamos la salida \(t _ {1:m}\) estando condicionados por el vector c.

Arquitectura de RNN de tipo encoder-decoder.

Arquitectura de RNN de tipo encoder-decoder.

Notemos aquí que las longitudes de las secuencias x, que es la entrada del encoder, y t, que es la salida del decoder, pueden ser distintas. Ambos el encoder como el decoder son entrenados al mismo tiempo, aunque la supervisión solo sucede en el decoder. Sin embargo, la propagación del gradiente se realiza en toda la red, incluyendo el encoder.

Advertencia

Es fácil ver que en esta configuración existe una gran presión sobre el decoder, quién tiene una tarea mucho más compleja que la del encoder. Este hecho se hará realidad durante las rutinas de entrenamiento donde deberemos ajustar la arquitectura para balancear la carga en los componentes.

En frameworks como TensorFlow y Keras, podemos consturir este tipo de redes de la sigueinte forma:

import tensorflow.keras as keras
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Embedding, LSTM, Dense, SpatialDropout1D

model = Sequential([
      Embedding(...),
      LSTM(hidden_state_size),
      RepeatVector(),
      LSTM(hidden_state_size, return_sequences=True)
      TimeDistributed(Dense(vocabulary_size, activation='softmax'))
  ])

Los modelos de secuencia-a-secuencia son ampliamente utilizado en la industria y en las organizaciones para resolver problemas concretos, ademas de formar parte del corazón de técnicas avanzadas de Modelos de lenguaje.