Los modelos de lenguaje como ChatGPT, Gemini o Claude no leen el texto palabra a palabra de forma secuencial como lo hacemos los humanos. Procesan todo el texto a la vez, en paralelo, esto proporciona muchas ventajas, pero también plantea un problema: ¿cómo sabe el modelo el orden de las palabras? En este post exploramos la solución más adoptada por los modelos modernos: RoPE.
La importancia de la posición
En los modelos de lenguaje modernos, basados en la arquitectura transformer, el primer paso es un preprocesado del texto en el que este se pasa a una representación numérica, más apta para un modelo de deep learning. Este proceso consta de dos partes, por un lado el tokenizado, que divide el texto en fragmentos (tokens), y por otro lado el embedding, que crea representaciones vectoriales de estos tokens (embeddings).
Un embedding, por sí solo, captura el significado de un token. Sin embargo, el significado de un texto no depende solamente del contenido de este, sino también del orden. Por defecto, un LLM de arquitectura transformer recibe una secuencia de embeddings y los procesa en paralelo como un conjunto desordenado.
Es por este motivo que se necesita un mecanismo capaz de introducir la noción de orden en los embeddings de entrada.
Soluciones anteriores
La necesidad de codificar la posición de alguna forma no es un problema nuevo. Desde que se introdujo la arquitectura transformer en Attention Is All You Need se han propuesto distintas soluciones, cada una con sus ventajas e inconvenientes. Las dos más relevantes antes de RoPE fueron APE y ALiBi.
APE
La primera solución, introducida en el propio Attention Is All You Need, fue Absolute Positional Encoding (APE). Este mecanismo consiste en que antes de que el modelo procese el embedding de cada token, se calcula un vector fijo para cada posición de la secuencia y se suma directamente al embedding. De esta forma el embedding codifica información tanto semántico como posicional.
Cada una de las dimensiones de este vector posicional se calculan de la siguiente forma:
Donde:
- : posición del token en la secuencia
- : índice de la dimensión de la pareja (las dimensiones pares usan seno, las impares coseno)
- : dimensión total del embedding
- : garantizan valores siempre entre -1 y 1
- : constante que determina la velocidad de oscilación (seleccionada empíricamente)
Sin embargo, APE presenta dos importantes limitaciones. La primera, es que al codificar posiciones absolutas, el modelo tiene dificultades para capturar las distancias relativas entre tokens, lo cual a menudo suele ser más relevante en el lenguaje. Por poner un ejemplo, al modelo le resultara más fácil saber que un token está en la posición 5 que saber que está a 3 posiciones de otro token. La segunda limitación, es que al utilizar posiciones absolutas, el modelo no generaliza bien para secuencias más largas que las vistas en entrenamiento. Es decir, si entrenamos el modelo con secuencias de 512 tokens, no sabrá como interpretar tokens en las posiciones 513, 514, 515, etc.
Una solución más obvia hubiera sido simplemente numerar los tokens: asignar el valor 1 al primero, 2 al segundo, y así sucesivamente. El problema es que esos números crecen sin límite y tienen escalas muy distintas a los valores de los embeddings, que suelen ser números pequeños entre -1 y 1. Sumar un 500 a un vector de valores decimales distorsionaría completamente la información semántica. APE resuelve esto usando funciones de seno y coseno, que siempre producen valores entre -1 y 1 independientemente de la posición, manteniendo así la escala compatible con los embeddings.
El uso de ambas funciones de forma alternada no es arbitrario. El seno y el coseno están desfasados 90° entre sí, lo que los hace complementarios. Juntos describen completamente una oscilación a una frecuencia dada, garantizando que cada posición genere un vector único e inequívoco. Si se usara solo una de las dos funciones, posiciones distintas podrían producir valores idénticos en ciertas dimensiones, introduciendo ambigüedad.
ALiBi
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent nec tellus a velit feugiat tincidunt. Pellentesque a elit vitae justo dignissim pulvinar at gravida leo. Ut pretium ultricies arcu et elementum. Pellentesque a ultrices tellus, quis viverra purus. Proin massa nulla, pulvinar nec gravida non, fringilla ac dui. Duis accumsan maximus turpis, dapibus pharetra nisl blandit nec. Morbi ultrices ex a ante tristique bibendum. Donec gravida semper odio. Mauris eu vulputate felis. Pellentesque ultricies, diam ac ullamcorper varius, nisi justo bibendum quam, eu blandit massa enim eu massa. Nunc sit amet posuere metus. Mauris euismod nisi dolor, a iaculis erat aliquet a. Ut sed dapibus neque. Donec vehicula malesuada varius.
Codificando la posición como rotaciones
Referencias
- Attention is All You Need
- RoFormer: Enhanced Transformer with Rotary Position Embedding
- Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation