Seq2Seq: de secuencia a secuencia

Rubén Rodríguez Abril

Las técnicas de Seq2Seq son muy utilizadas en algoritmos de traducción. Como veremos, estos modelos juegan con redes que se retroalimentan, es decir, que reciben como entrada los resultados que el propio algoritmo genera en momentos previos. 

Seq2Seq

Los algoritmos seq2seq son aquellos que, como su propio nombre indica (“sequence to sequence”, “secuencia a secuencia”) transforman cadenas de texto en otras. Como el lector podrá quizá averiguar, son de amplia utilización en disciplinas como la traducción a máquina.

En este artículo presentaremos dos algoritmos. El primero de ellos (Cho et al.), utiliza redes neuronales recurrentes en el marco de un modelo de descodificador-codificador. El segundo de ellos (Sutskever et al.) emplea LSTM

Codificador-Decodificar basados en RNN

Cho et. al. presentaron en su artículo un sistema de traducción a máquina estadística (Statistical Machine Translation, SMT) desde el inglés al francés. El sistema era capaz de preservar no sólo la significación del texto sino también su estructura sintáctica.

El modelo hace uso de Redes Neuronales Recurrentes (RNN en las siglas en inglés). Podéis revisar cómo funcionan estas redes en nuestro artículo.

El sistema consta de dos de estas RNNs, una codificadora, que transforma las frases en inglés en un vector denominado sumario, y otra descodificadora, que vuelve a transformar este sumario en una cadena de texto en lengua francesa.

Modelo Codificador-Descodificador utilizado para tareas Seq2seq.

Red codificadora

La red codificadora toma por entrada una cadena de texto arbitraria, que es transformada en un vector de longitud fija, el sumario (c). La red se compone de tres capas: la primera capa (entrada, x) contiene la codificación 1-a-N de la palabra que en ese momento se este leyendo. La segunda capa es la capa interna (h_{t}), que toma información de la capa anterior (x_{t}) así como de su propio estado interno en el momento inmediatamente anterior (h_{t-1}), como es usual en las Redes Neuronales Recurrentes:

h_{t} = f(h_{t-1},x)

La última capa es la de salida (c), cuyas neuronas, dotadas de una función de activación sigmoide, marcan los valores del vector sumario. En todos los casos, las capas están densamente conectadas con la anterior.

Red decodificadora

La red descodificadora tiene una capa interna (h_{t}) y otra de salida (y). La capa de salida está dotada de una función softmax, y señala la probabilidad de que aparezca una determinada palabra en una posición de la cadena de texto. La capa interna (h_{t}) toma como entrada su estado inmediatamente anterior (h_{t-1}), el vector de contexto (c) así como el vector 1-a-N de la palabra inmediatamente anterior (y_{t-1}):

h_{t} = f(h_{t-1},y_{t-1},c)

La traducción transcurre del modo siguiente: El codificador va leyendo, una a una, las palabras de la cadena de entrada, hasta que se topa con el símbolo <FIN>, de fin de cadena. En ese momento, el descodificador es encendido, y se le alimenta del vector de contexto, el cual, gracias a la recurrencia de la red, contiene información de la cadena al completo. Paso a paso, va haciendo una estimación probabilística de cada una las palabras de la cadena de salida, que termina cuando el descodificador imprime el símbolo <FIN>.

Unidades GRU

Los autores, además, sugieren optimizar el algoritmo seq2seq sustituyendo cada neurona de la capa interna por unidades especiales denominadas GRU (Gated Recurrent Unit). Cada unidad se compone de tres neuronas: una puerta de actualización (update gate, z), otra puerta de reinicio (reset gate, r) y una neurona de estado candidato (c_{t}). La salida de esta última neurona señala si la unidad modifica su estado actual o no. La neurona de estado candidato (c_{t}) mezcla la información del estado interno anterior con la información procedente de la capa de entrada (x_{t}), siendo la puerta de reinicio la que señala cuánto contribuye cada una de ellas.

Funcionamiento de GRU

El valor de activación de la neurona de estado candidato es utilizado para calcular el nuevo valor de la GRU (h_{t}).

h_{t} = zc_{t} + (1-z)h_{t-1}

donde x es el vector de activaciones de la capa anterior, W su correspondiente matriz de pesos sinápticos, h_{t-1} el vector de estado interno de la propia capa en el momento inmediatamente anterior, y U la matriz de pesos sináptica correspondiente al mismo. Las variables z y r representan las puertas de actualización y reinicio, respectivamente y h_{t}, el nuevo vector de estado de la capa interna.

Unidad Recurrente con puertas (GRU) propia de las Redes Neuronales Recurrentes

Imagen de una GRU. La puerta de estado candidato c es la principal (área naranja). Cuánto influye la respuesta del estado previo en ella se encuentra determinado por la puerta r (área amarilla). Cuánto influye ese estado previo en su respuesta está bajo el control de la puerta z (área roja).

Un valor de reinicio r cercano a cero fuerza a la unidad interna a librarse de su información anterior, y a que la neurona candidata tome la nueva información exclusivamente de las neuronas de la capa anterior. Un valor de actualización z cercano a cero provoca que el estado interno anterior no influya en absoluto en el estado interno actual. Para que la unidad olvide del todo, hemos de poner, pues, ambas puertas a cero. Si queremos que su estado permanezca inalterado, la puerta de actualización debe de tomar un valor de 1

Resultados

Los autores del trabajo utilizaron 1.000 unidades GRU tanto en el codificador como en el descodificador. Para entrenar el sistema seq2seq fueron utilizados, como base de datos, los diarios de sesiones del Parlamento Europeo, que tienen una versión tanto en inglés como en francés. El número de palabras básicas a reconocer por el sistema se redujo a 15.000 en ambas lenguas. Con ello, el tamaño efectivo de la base de datos se redujo al 93%.

Modelos Seq2seq basados en LSTM

El segundo algoritmo seq2seq a analizar es el presentado por Sutskever et al en un artículo suyo del año 2014. Está basado en el uso de unidades de LSTM (Long Short-Term Memory), que son conjuntos de neuronas capaces de recordar u olvidar selectivamente información. A las mismas se dedicó una sección en nuestro artículo sobre Redes Neuronales Recurrentes que mencionamos antes.

Neurona Long Short-Term Memory (LSTM)

Estructura del modelo

El sistema, utilizado para traducir frases del inglés al francés, consta de dos partes: La primera de ellas, compuesta por varias capas de unidades LSTM, transforma la secuencia de de entrada en un vector multidimensional. La segunda parte transforma este mismo vector en una secuencia de salida.

Al igual que sucede en el esquema presentado por Cho et al., la frase a traducir debe ser tokenizada (dividida en palabras) previamente, y a cada una de las palabras se le asignará un vector 1-a-N (one-hot). Entonces, la primera LSTM leerá la cadena de entrada, palabra por palabra, hasta que encuentra la señal de fin de frase (End Of Sentence, EOS). Seguidamente, la segunda LSTM producirá, a partir de este vector, una segunda cadena de salida. La traducción concluirá cuando se imprima el carácter de fin de frase.

Se utilizó como base de datos el corpus WMT’14 de traducción a máquina. En total, fue seleccionado un subconjunto de 12 millones de frases, compuestas de 348 millones palabras francesas y 304 millones palabras inglesas. Como vocabulario, únicamente se usaron las 160.000 palabras más frecuentes en inglés y las 80.000 más usadas en francés. Las palabras más raras fueron sustituidas por la marca <UNK>.

Haz de cadenas

La traducción es probabilística y emplea un algoritmo de búsqueda de haz (beam search algorithm), que explora las posibles cadenas de salida y atribuye una probabilidad a cada una de ellas. Las cadenas se van formando agregando las palabras una a una. En cada paso el algoritmo calcula la probabilidad de aparición, en esa posición, de cada una de las palabras del vocabulario inglés. Esta probabilidad se multiplica por la cadena anterior. Dado que el número de posibles cadenas aumenta exponencialmente conforme se agregan palabras, es necesario poner un límite, que se denomina tamaño del haz (beam size). Sólo las B cadenas con mayor probabilidad son preservadas. Cuando sólo la cadena con mayor probabilidad es preservada (es decir, B=1), se dice que el algoritmo es voraz (greedy algorithm).

Ejemplo de Algoritmo de Búsqueda de Haz con k=1 en Seq2Seq.

Ejemplo de Algoritmo de Búsqueda de Haz con B = 1, solo se selecciona una única ruta en la formación de la cadena. Notad como el logaritmo de la probabilidad condicional es siempre negativo y como la probabilidad de la frase final es igual a la suma de todas las probabilidades condicionales.

En el algoritmo de Sutskever et al, B=2, y por lo tanto, sólo las dos cadenas con mayor probabilidad condicional son preservadas en cada paso. La probabilidad condicional de una cadena es obtenida multiplicando las probabilidades de cada palabra en cada paso (t). Si una cadena alcanza el símbolo <EOS> es retirada del haz, y B disminuye en un número. Cuando B es igual a 0 el algoritmo concluye su funcionamiento.

Entrenamiento del modelo Seq2seq

Durante los entrenamientos, el algoritmo tiene como referencia una frase objetivo, que es equivalente a la traducción correcta de la cadena de entrada. Se debe calcular la probabilidad que la segunda red atribuye dicha traducción, tomando por base a cada paso los valores de la función softmax. Para cada frase, la función de pérdida es el logaritmo neperiano de dicha probabilidad:

L = log P(T \mid  S)

donde P(T \mid  S) es la probabilidad que la red atribuye a la traducción correcta T para la cadena de origen S. La función de pérdida, que siempre es negativa, debe ser maximizada.

Cada LSTM se compone en cuatro capas dotadas de 1.000 unidades cada una. El vocabulario de entrada es de 160.000 palabras y el de salida, de 80.000. Durante el entrenamiento, que duró 7,5 épocas, los lotes se componían de 128 cadenas cada uno. Los autores encontraron que invirtiendo el orden la cadena de entrada los resultados de las traducciones eran mejores.

Conclusión

Los trabajos de Cho et al y de Sutskever et al., entre otros, demostraron que las redes dotadas de mecanismos de retroalimentación y de memoria eran capaces de realizar tareas de incrustación léxica y traducción a máquina con mucha mayor eficiencia que las redes orientadas hacia adelante. En el siguiente artículo analizaremos un nuevo rasgo que potenció aún más los mecanismos de traducción a máquina y en general el procesamiento de lenguaje natural: el mecanismo de atención.