TICS-579-Deep Learning

Clase 10: Mecanismos de Atención

Alfonso Tobar-Arancibia

Datos de Texto

Los datos de texto corresponden a un caso particular de datos secuenciales. En este caso, dependiendo del idioma, las dependencias pueden venir tanto del pasado como del futuro. Consideramos texto libre como una secuencia de Strings, el cuál es inteligible para seres humanos pero no necesariamente para un computador.

Es probablemente el tipo de dato más abundante, aunque también uno de los más sensible al ruido (variabilidad, idioma, tono, formalidad, etc.).

El problema

Los computadores, y por ende los modelos, no pueden entender strings. El computador sólo puede entender datos numéricos.

Para poder manipular texto dentro de un modelo será necesario un pre-procesamiento que permita transformar el texto en datos numéricos que un modelo pueda entender.

La disciplina encargada de desarrollar modelos asociado a lenguaje/texto es conocida como Procesamiento de Lenguaje Natural (NLP en inglés).

Tareas asociadas a NLP

Proceso de Tokenización y Embedding

Tokenización

El proceso de Tokenización permite transformar texto en datos numéricos. Cada dato numérico se mapea con un “trozo de texto”. Normalmente los modelos van asociados a la tokenización con la que fueron entrenados. Cambiar la tokenización puede generar gran degradación.

Embedding

Corresponde el proceso en el que los Tokens se transforman en vectores densos en las cuales la distancia entre ellos representa una noción de similaridad.

  • En este caso la frase “Frog on a log” es separada en Tokens (en este caso cada token es una palabra).
  • Luego cada Token es mapeado a un Token id proveniente de un vocabulario. ¿Qué es un vocabulario?
  • Los embeddings en este caso representan una secuencia de largo 7 con 3 dimensiones.

Embeddings

¿Por qué es tan importante el uso de Embeddings?

  • Primero porque son entrenables. Es decir la red puede aprender cuál es la mejor manera de representar palabras.
  • Existen embeddings pre-entrenados, es decir, se puede hacer transfer learning de embeddings.
  • La red puede aprender relaciones semánticas entre palabras, algo imposible utilizando otras representaciones.

Problema de las RNN

A pesar de las habilidades de las RNN, estas no son suficientes para distintas tareas de NLP.

Las RNN inicialmente toman cada elemento de una secuencia y generan un output para cada entrada. Esto potencialmente genera ciertas limitantes. Una de ellas es el proceso llamado Machine Translation.

Este es un ejemplo de Modelamiento seq2seq en el que se utiliza una secuencia de entrada pero se espera también una secuencia de salida.

Machine Translation: Ejemplo del Inglés

Supongamos que necesitamos hacer la siguiente traducción:

Inglés

Hi, my name is Alfonso

Español

Hola, mi nombre es Alfonso

Este tipo de traducción es uno a uno. Cada input puede tener asociado una salida de manera directa puede realizarse de manera directa con una RNN.

Machine Translation: Ejemplo del Inglés

Inglés

Would you help me prepare something for tomorrow?

Español

¿Me ayudarías a preparar algo para mañana?

Problemas

  • La traducción no es uno. De hecho en inglés se utilizan 8 palabras y 1 signo de puntuación. En español se traduce en 7 palabras y 2 signos de puntuación.
  • “Would” no tiene equivalente en español.
  • “a” no tiene equivalente en el inglés.
  • “Me” se traduce como “me” en inglés pero en vez de ir al inicio, va al final de “help”.
  • ¿” no existe en inglés.
  • Otros idiomas como el Alemán o el Ruso, tienen fusión de palabras o declinaciones que hacen la traducción mucho más difícil.
  • Es por ello que se requiere una cierta libertad entre los tokens de entradas y los tokens de salida.

Soluciones: Redes Convolucionales

Una potencial solución se puede dar por medio de Redes Convolucionales de 1D. En este caso las redes convolucionales tienen la ventaja de poder mirar tanto al pasado como al futuro de manera móvil.

Ventajas

  • Pueden tomar contexto desde el inicio y desde el final.

Desventajas

  • Su campo receptivo es mucho más acotado y depende del número de capas y el largo del Kernel lo cual repercute directamente en el número de parámetros del modelo.
  • No tienen estado latente (o memoria) que almacena contexto.
  • No es útil para modelos de generación (ya que ve contexto desde el futuro).

Soluciones: Arquitecturas Encoder-Decoder

Encoder
Corresponde a una arquitectura que permitirá tomar datos de entrada y codificarlos en una representación numérica (normalmente como hidden states o como embeddings).
Decoder
Corresponde a una arquitectura que toma una representación codificada de datos (normalmente generado por un encoder) y la transforma nuevamente en una salida con un formato comprensible y no solamente una “simple etiqueta”.

Este tipo de arquitecturas son quizás las más populares hoy en día y tienen aplicaciones en distintos dominios.

Soluciones: Arquitecturas Encoder-Decoder

Una arquitectura Encoder-Decoder convolucional permite devolver una imagen como salida. Este ejemplo se conoce como Segmentación Semántica.

Soluciones: Arquitecturas Encoder-Decoder

Una arquitectura recurrente permite devolver una secuencia como salida. La cual puede utilizarse para generación o traducción de texto.

Ventajas

  • Permite “desligarse” de la predicción uno a uno.
  • La salida de este tipo de modelos depende principalmente del contexto almacenado en el Hidden State/Bottleneck.

Desventajas

  • Dado los problemas de Vanishing/Exploding Gradients es ingenuo pensar que todo el contexto de una frase vive en el último hidden state.

Soluciones: Arquitecturas Encoder-Decoder

Ojo

El último Hidden State del Encoder se utilizará como Hidden State inicial del Decoder.

Entrenamiento de una Arquitectura Encoder-Decoder

Arquitectura

  • RNN Bidireccional
  • Con un Encoder (colores pastel) y un Decoder independientes (colores más oscuros).
  • Tenemos dos frases una en inglés (input) y una en español (output). Ambas frases son claramente de tamaños distintos.
  • Tenemos el token especial <eos> (end of sentence) que separa el input del output.
  • Los últimos Hidden States del Encoder son los Hidden States iniciales del Decoder. Estos también se conocen como Context Vectors.

Entrenamiento

Al momento de entrenarse, las salidas \(y1\) e \(y2\) pueden ser distintas al valor esperado y deben ir ajustándose epoch a epoch.

Inferencia de una Arquitectura Encoder-Decoder

Predicción

  • La predicción se va realizando de manera autoregresiva. Es decir, la predicción del primer step corresponde a la entrada del segundo step y así sucesivamente.
  • La primera entrada siempre será el token especial <eos> (otros modelos pueden utilizar otros tokens especiales).
  • El modelo irá prediciendo de manera autoregresiva hasta predecir el token <eos>.

Problema

  • Pensar que todo el contexto se puede almacenar en el último hidden state es un poco ingenuo.
  • El último hidden state tiene más influencia de las palabras más cercanas y menos de las palabras iniciales (debido al problema de vanishing/exploding gradients).

Mecanismo de Atención (Bahdanau et al, (2015))

Atención
Se refiere a cualquier mecanismo en el que los hidden states se ponderan y combinan para poder utilizarlos como contexto. En otras palabras, el mecanismo busca a qué inputs iniciales debe poner más “atención” para poder generar la predicción.

\[c_i = \sum_{t=1}^T a_{i,t} \cdot h_t\]

Donde \(c_i\) corresponde al contexto para la predicción del output \(i\) y \(a_{i,t}\) (que van entre 0 y 1) corresponden a cuánta atención le presta el output \(i\) al token \(t\).

Ojo

En el paper original, se interpreta \(a_{i,t}\) como cuánto se “alínea” o se parece el estado \(h_t\) con \(S_{t-1}\).

Atención de Bahdanau

\[a_{i,t} = align(h_t, S_{i-1})\]

\[[a_{i,1},...,a_{i,T}] = Softmax([\tilde{a_{i,1}},...\tilde{a_{i,T}}])\]

Otras formas de Atención

1. Proyecciones Lineales

\[k_t = W_k \cdot h_t\] \[q_{i-1} = W_q \cdot S_{i-1}\]

2. Similaridad: Producto Punto es equivalente al Cosine Similarity

\[\tilde{a}_{i,t} = k_t^T \cdot q_{i-1}\]

3. Normalización:

\[[a_{i,1},...,a_{i,T}] = Softmax([\tilde{a}_{i,1},...\tilde{a}_{i,T}])\]

Transformers: Arquitectura

Transformer
Corresponde a la Arquitectura más avanzada que tenemos hoy en día. Está basada en distintos mecanismos de atención.

Detalles de la Arquitectura

  • Corresponde a un Encoder + un Decoder.
  • Cada uno contiene una capa de Embeddings.
  • Además posee un Positional Encoding para entender el orden de la secuencia.
  • El decoder funciona de manera autoregresiva.
  • Posee 4 tipos de atención.

Transformers: Self y Multihead Attention

Detalles

  • El self-attention pone atención (aprendiendo la relación) existente entre datos de una misma secuencia. La gran ventaja es que permite la paralelización de cálculos.
  • El Multihead Attention corresponde a la concatenación de varios Self-Attention. Esto permite no “sesgarse” con sólo una forma de poner atención, permitiendo aprender relaciones en distintas direcciones.

Transformers: Causal Self Attention

Detalles

  • Corresponde a un tipo particular de Self Attention, en el cuál sólo se puede poner atención a valores de secuencia previa (no puede ver al futuro). Esto es particularmente necesario para tareas de generación autoregresiva.

Transformers: Cross Attention

Detalles

  • Corresponde a la atención que relaciona información proveniente tanto del Encoder como del Decoder. Muy similar al concepto original de Atención.

Y… estamos por hoy