Saltar al contenido principal

Capítulo 1: ¿Qué son los Embeddings?

Introducción​

Los embeddings son representaciones vectoriales densas de texto que capturan el significado semántico. Permiten que las computadoras comprendan y comparen el significado del texto, no solo las palabras.

El concepto​

Piense en los embeddings como coordenadas en un "espacio de significado":

"happy" → [0.2, 0.8, -0.1, 0.5, ...]
"joyful" → [0.21, 0.79, -0.12, 0.48, ...] // ¡Similar!
"sad" → [-0.3, 0.1, 0.7, -0.4, ...] // ¡Diferente!

Significados similares = Vectores similares = Cercanos en el espacio

¿Cómo funcionan los Embeddings?​

1. Texto a vector​

from openai import OpenAI

client = OpenAI()

# El texto se convierte en un vector
text = "Machine learning is fascinating"
response = client.embeddings.create(
input=text,
model="text-embedding-3-small"
)

embedding = response.data[0].embedding
# Resultado: [0.023, -0.891, 0.156, ..., 0.342]
# 1536 dimensiones

2. Cálculo de similitud​

import numpy as np

def cosine_similarity(vec1, vec2):
"""Calculate cosine similarity between two vectors"""
dot_product = np.dot(vec1, vec2)
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
return dot_product / (norm1 * norm2)

# Ejemplo
similarity = cosine_similarity(
embed("What is RAG?"),
embed("Explain Retrieval Augmented Generation")
)
# Resultado: ~0.92 (¡muy similar!)

similarity = cosine_similarity(
embed("What is RAG?"),
embed("How to cook pasta")
)
# Resultado: ~0.15 (no similar)

Dimensiones de los Embeddings​

ModeloDimensionesTamaño del vector
text-embedding-3-small15366KB
text-embedding-3-large307212KB
Cohere embed-v310244KB
BGE-small3841.5KB
BGE-large10244KB

Por qué importan las dimensiones​

  • Más dimensiones = Representaciones más matizadas
  • Menos dimensiones = Búsqueda más rápida, menor almacenamiento
  • Equilibrio entre calidad y eficiencia

Métricas de similitud​

Similitud coseno​

La más común para embeddings de texto:

# Rango: -1 a 1
# 1 = dirección idéntica
# 0 = ortogonal (no relacionado)
# -1 = dirección opuesta

cosine_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

Distancia euclidiana​

Mide la distancia en línea recta:

# Menor = más similar
euclidean_dist = np.linalg.norm(a - b)

Producto punto​

Cuando los vectores están normalizados:

# Para vectores normalizados, igual que la similitud coseno
dot_product = np.dot(a, b)

Visualización de embeddings​

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# Reducir a 2D para visualización
texts = ["cat", "dog", "car", "truck", "happy", "sad"]
embeddings = [embed(t) for t in texts]

tsne = TSNE(n_components=2, random_state=42)
reduced = tsne.fit_transform(embeddings)

plt.scatter(reduced[:, 0], reduced[:, 1])
for i, text in enumerate(texts):
plt.annotate(text, (reduced[i, 0], reduced[i, 1]))
plt.show()

Agrupamientos esperados:

  • "cat", "dog" → Agrupamiento de animales
  • "car", "truck" → Agrupamiento de vehículos
  • "happy", "sad" → Agrupamiento de emociones

Propiedades clave de buenos embeddings​

PropiedadDescripción
Similitud semánticaSignificados similares → Vectores cercanos
ComposicionalidadFrases codificadas de manera significativa
Cross-lingualEl mismo concepto es similar entre idiomas
DensoTodas las dimensiones tienen significado

Embeddings en RAG​

Resumen​

  • Los embeddings convierten texto en vectores numéricos
  • Significados similares producen vectores similares
  • La similitud coseno es la métrica estándar
  • Las dimensiones afectan la calidad frente a la eficiencia
  • Los embeddings permiten la búsqueda semántica en RAG

Próximos pasos​

Continúe a Capítulo 2: Modelos de Embeddings para explorar las opciones disponibles.