Una red neuronal solo entiende números, así que el primer paso de cualquier sistema de procesamiento de lenguaje natural (NLP) es convertir texto en una secuencia de números: la tokenización. Un token puede ser una palabra completa, una parte de una palabra (subpalabra) o incluso un carácter, según el esquema que use el modelo. Por ejemplo, la frase "los transformers son poderosos" podría tokenizarse como ["los", "transform", "##ers", "son", "poderos", "##os"]: dividir palabras poco frecuentes en subpalabras permite representar cualquier texto con un vocabulario de tamaño manejable, incluso palabras que el modelo nunca vio completas durante el entrenamiento.
Cada token se asigna a un identificador numérico (su posición en el vocabulario), pero un identificador arbitrario no dice nada sobre el significado de la palabra: "rey" y "reina" podrían tener ids muy distintos aunque estén relacionados. Ahí entran los embeddings.
Embeddings: vectores que capturan significado
Un embedding es un vector de números reales (típicamente de cientos de dimensiones) que representa un token, aprendido de forma que palabras con significados o usos similares queden cerca en ese espacio vectorial. Es una tabla que la red aprende igual que aprende cualquier otro peso: al entrenar con enormes cantidades de texto, palabras que aparecen en contextos parecidos ("perro" y "gato", o "rey" y "reina") terminan con vectores parecidos, mientras que palabras sin relación ("perro" y "álgebra") terminan con vectores alejados entre sí. Esta representación es la entrada real que reciben las capas siguientes del modelo — sustituye por completo a los ids arbitrarios de la tokenización.
Medir el parecido: similitud coseno
Para comparar dos embeddings a y b no basta con restarlos: lo que importa es la dirección en la que apuntan, no su magnitud. La métrica estándar es la similitud coseno, el coseno del ángulo θ entre los dos vectores:
sim(a,b)=cos(θ)=∥a∥∥b∥a⋅b
El numerador es el producto punto (lección 2) y el denominador normaliza por la longitud de cada vector. El resultado va de −1 (direcciones opuestas) a 1 (misma dirección): valores cercanos a 1 indican palabras con significado o uso muy similar, valores cercanos a 0 indican que no hay relación clara, y valores negativos son poco frecuentes entre embeddings de palabras pero indican relación opuesta.
El pipeline completo, desde el texto crudo hasta la salida del modelo: