Módulo 3: Similaridad y Distancia
6. Métricas en Semantic Search
Descripción
Aquí ves cómo las métricas se usan en sistemas de semantic search reales: qué usan OpenAI, Pinecone, Weaviate, y por qué.
Stack típico de semantic search
1. Generar embeddings (OpenAI API)
→ Vectores 1536D
2. Normalizar (opcional pero recomendado)
→ Magnitud = 1
3. Guardar en vector database (Pinecone)
→ Índice optimizado
4. Query → embedding → buscar por coseno
→ Top-K resultados
Configuración en vector databases
Pinecone:
Métrica por defecto: "cosine"
Alternativas: "euclidean", "dotproduct"
Recomendación: Usa "cosine" para embeddings normalizados
Weaviate:
Métrica por defecto: "cosine"
Alternativas: "l2-squared" (euclidiana al cuadrado)
Recomendación: "cosine" para semantic search
Qdrant:
Métrica por defecto: "cosine"
Alternativas: "euclidean", "dot"
Recomendación: "cosine" con normalización
Por qué todos usan coseno
Razón 1: Embeddings pre-entrenados (OpenAI, BERT) funcionan mejor con coseno.
Razón 2: Normalización + coseno = producto punto simple (más eficiente).
Razón 3: Valores interpretables (0.95 = muy similar).
Normalización: ¿Siempre necesaria?
Con coseno: Opcional pero recomendada.
- Normalizar → Coseno = producto punto (más rápido)
- Sin normalizar → Funciona igual, pero cálculo más complejo
Con euclidiana: No normalizar (magnitud importa).
Best practice: Normaliza embeddings antes de guardar en vector database.
Ejemplo en producción
Setup típico:
# Ilustrativo (NO código real para esta guía)
import openai
import pinecone
# 1. Generar embedding
text = "animal doméstico"
embedding = openai.Embedding.create(
input=text,
model="text-embedding-3-small"
)["data"][0]["embedding"]
# 2. Normalizar (opcional)
normalized = normalize(embedding)
# 3. Buscar por coseno
results = pinecone.query(
vector=normalized,
top_k=5,
metric="cosine"
)
Interpretación de resultados
Resultado 1: score 0.95 → Muy relevante
Resultado 2: score 0.88 → Relevante
Resultado 3: score 0.72 → Moderadamente relevante
Resultado 4: score 0.45 → Poco relevante
Resultado 5: score 0.12 → No relevante
Umbral típico: > 0.7 para considerar relevante.
Próxima cápsula: 07-capstone-exercise-3.md — Calcular métricas, comparar, decidir.