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.