← Volver a Aprende con CDIA

¿Qué es la IA generativa?Embeddings

BásicoInteligencia Artificial7 min de lectura

Embeddings

Convertir texto en vectores donde la cercanía significa parecido: el puente entre el lenguaje y las matemáticas que hace posibles la búsqueda semántica y los sistemas RAG.

Un embedding es una lista de números (un vector) que representa el significado de una palabra, una frase o un documento. La magia es que cosas parecidas quedan cerca en ese espacio numérico: así una máquina, que solo entiende números, puede "medir" significados.

De palabras a vectores

Un computador no entiende "gato". Necesita números. La idea ingenua sería asignar un número a cada palabra (gato = 1, perro = 2...), pero eso no dice nada: ¿por qué "perro" estaría entre "gato" y algo con el número 3?

Un embedding hace algo mucho mejor: representa cada elemento con un vector de muchas dimensiones (por ejemplo 384 o 1536 números), aprendido de modo que la posición en ese espacio capture el significado.

Como vimos en la lección de IA generativa, este es justo el primer paso que da un LLM: convertir cada token en su embedding antes de procesarlo.

Un espacio con significado

En un buen espacio de embeddings, la cercanía equivale a parecido de significado. "Gato" y "felino" quedan casi encima; "gato" y "bolsa de valores", muy lejos.

Para medir esa cercanía no usamos la distancia común, sino la similitud coseno, que compara la dirección de dos vectores (ignorando su longitud):

Vale entre y :

  • : apuntan al mismo lado → muy parecidos.
  • : perpendiculares → sin relación.
  • : opuestos.

Lo asombroso es que el espacio captura relaciones. El ejemplo clásico:

Las direcciones dentro del espacio codifican conceptos como "género" o "plural".

¿Cómo se obtienen?

Los embeddings se aprenden, no se escriben a mano. Un modelo se entrena con enormes cantidades de texto bajo una premisa simple: una palabra se define por la compañía que tiene. Palabras que aparecen en contextos parecidos terminan con vectores parecidos.

Hoy se usan modelos de embeddings (muchos derivados de Transformers) que reciben una frase completa y devuelven un solo vector que resume su significado.

Para qué sirven

Los embeddings son la base de muchísimas aplicaciones modernas:

  • Búsqueda semántica: buscar por significado, no por palabras exactas. "¿Cómo bajo de peso?" encuentra un texto sobre "adelgazar" aunque no compartan palabras.
  • RAG (Retrieval-Augmented Generation): darle a un LLM los documentos más parecidos a la pregunta para que responda con información real.
  • Recomendación: sugerir productos o artículos cercanos a los que te gustaron.
  • Agrupamiento y clasificación: juntar textos por tema automáticamente.

En código

Con la librería sentence-transformers obtener embeddings y compararlos toma pocas líneas:

from sentence_transformers import SentenceTransformer
import numpy as np

modelo = SentenceTransformer("all-MiniLM-L6-v2")

frases = [
    "El gato duerme en el sofá",
    "Un felino descansa en el sillón",
    "La bolsa subió con fuerza hoy",
]
vecs = modelo.encode(frases)  # matriz de 3 x 384

def coseno(a, b):
    return a @ b / (np.linalg.norm(a) * np.linalg.norm(b))

print(coseno(vecs[0], vecs[1]))  # alto: significan casi lo mismo
print(coseno(vecs[0], vecs[2]))  # bajo: hablan de temas distintos

Una búsqueda semántica mínima es solo esto: convertir la consulta y los documentos a vectores y ordenar por similitud.

consulta = modelo.encode("mascota descansando")
sims = [coseno(consulta, v) for v in vecs]
print(np.argsort(sims)[::-1])  # índices de las frases más parecidas primero

Para llevar

Un embedding traduce texto a un vector donde la cercanía es sinónimo de significado parecido, medida con la similitud coseno. Es el puente entre el lenguaje y las matemáticas: la pieza que hace posibles la búsqueda semántica, los sistemas RAG y las recomendaciones. Todo LLM empieza convirtiendo sus tokens en embeddings antes de decidir la siguiente palabra.