Volver al archivo
#ai#llm#glossary#aigen

Embedding de tokens

El ordenador recibe un número que representa un fragmento de texto. El número 17 por sí solo no le dice qué es ese fragmento ni cómo se relaciona con otros. Necesita una descripción numérica útil que pueda transformar durante los cálculos.

Token Embedding convierte el identificador de un token —un fragmento de texto del vocabulario— en un vector, es decir, una lista de números. En la solución típica, el número señala una fila de una tabla aprendida. Si el token tiene el número 17, leemos la correspondiente fila diecisiete en lugar de tratar el número 17 como una medida del significado.

Los valores de la tabla se ajustan durante el entrenamiento. Al principio, el mismo token recibe la misma descripción independientemente de la frase. Solo las capas posteriores pueden transformarla usando el contexto: «banco para sentarse» y «banco para guardar dinero» requieren entornos distintos.

Por tanto, el embedding no es una definición preparada de la palabra ni una prueba de comprensión del significado. Es una descripción de entrada sobre la que trabajan los mecanismos siguientes, como Self-attention.

Fuente del mecanismo: la capa Embedding de Keras.

Mecanismo y detalles

Del identificador al vector

Imaginemos un fragmento de una tabla con tres coordenadas:

IdentificadorVector
6[0,2; −0,1; 0,5]
9[−0,4; 0,3; 0,8]

Para la entrada [6, 9, 6] recuperamos, en orden, la primera, la segunda y de nuevo la primera de las filas mostradas. Los valores son inventados, y los puntos y coma separan las coordenadas. Un identificador repetido produce el mismo vector de la misma tabla, aunque aparezca en otro lugar de la frase.

El embedding de tokens todavía no contiene el resultado de analizar los tokens vecinos. La autoatención puede dar después representaciones distintas a dos apariciones, según su contexto. La codificación posicional aporta por separado la información sobre el lugar en la secuencia.

Laboratorio: del token al aprendizaje

A continuación puedes seguir la lectura de la tabla, renombrar los identificadores, cambiar una coordenada y realizar un paso de entrenamiento. Las cuatro partes utilizan la misma tabla. El ejemplo propio tiene seis tokens y seis coordenadas por token; tratamos las palabras como unidades indivisibles. Un tokenizador real puede dividir las palabras en fragmentos menores.

El laboratorio requiere JavaScript. La descripción del mecanismo y el ejemplo de un paso de entrenamiento también aparecen en el texto de abajo.

De dónde proceden los valores de los vectores

En el Transformer original, los embeddings se entrenaban junto con el modelo; no se exigía un entrenamiento previo con Word2Vec. Lo describe Attention Is All You Need, §3.4.

La tabla EE, de dimensiones V×dV \times d, almacena VdVd parámetros: VV es el número de tokens del vocabulario y dd la longitud de cada vector. Leer tres identificadores produce una matriz 3×d3 \times d. Renombrar los ID y reordenar a la vez las filas correspondientes conserva el resultado de la lectura. En cambio, modificar el contenido de una fila cambia el vector recuperado en cada aparición de ese token. La documentación de PyTorch Embedding también describe la forma de la tabla y su carácter entrenable.

En la parte sobre el aprendizaje, la entrada es «kamienny» y el siguiente token correcto es «zamek». El modelo solo tiene dos respuestas posibles: «zamek» y «klucz». Dos vectores de pesos fijos transforman el embedding de entrada en puntuaciones numéricas llamadas logits. Softmax las convierte en probabilidades. La entropía cruzada de esta muestra es L=−ln⁡p(zamek)L=-\ln p(\text{zamek}); es un caso particular de la pérdida descrita en la documentación de PyTorch.

El botón de entrenamiento calcula el gradiente de esta pérdida respecto a las seis coordenadas del vector de entrada y les resta el gradiente multiplicado por 0,4. Con la configuración inicial, el primer paso aumenta la probabilidad del objetivo de alrededor del 47,0% al 61,0% y reduce la pérdida de alrededor de 0,755 a 0,495. Cambia la fila «kamienny», porque era la entrada; «zamek» era la etiqueta objetivo. Estas cifras proceden de los cálculos del ejemplo.

En este experimento los pesos de salida están congelados y separados de la tabla de entrada, sin momentum [Polski] ni weight decay. Así se ve únicamente la actualización de una fila leída. En un modelo completo, la forma de entrenar y compartir pesos puede hacer que también cambien otros parámetros. Mejorar en una muestra demuestra el funcionamiento de la optimización, no la calidad del modelo de lenguaje.

Dónde aparece el contexto

«Oto kamienny zamek» y «oto metalowy zamek» utilizan en el laboratorio el mismo token «zamek» en la misma posición. Leer la tabla produce un vector idéntico. Añadir la misma codificación posicional también mantiene la igualdad de ambas entradas. Solo el cálculo de autoatención tiene en cuenta la diferencia entre los tokens anteriores.

La demostración calcula una cabeza de atención con proyecciones identidad para Q, K y V, y codificación posicional sinusoidal, según Attention Is All You Need, §3.2 y §3.5. Puedes leer todos los pesos de atención e igualar las frases para que los resultados vuelvan a ser idénticos. Es un modelo del efecto del contexto con pesos fijos, no un clasificador entrenado de los dos significados de «zamek».

El artículo sobre atención [Polski] explica con más detalle la transformación posterior de los vectores. Su expresión «updated embeddings» se refiere a las representaciones después de los cálculos, que hay que distinguir de la simple lectura de la tabla.

Fuentes