Módulo 6: Embedding Operations

Arithmetic Operations: Álgebra de Embeddings

Addition & Subtraction

import numpy as np
from openai import OpenAI

client = OpenAI()

def get_emb(text):
    return np.array(client.embeddings.create(
        model="text-embedding-3-small",
        input=text
    ).data[0].embedding)

# Arithmetic
emb_king = get_emb("king")
emb_man = get_emb("man")
emb_woman = get_emb("woman")

# Analogía
result = emb_king - emb_man + emb_woman

# Buscar palabra más cercana
candidates = ["queen", "princess", "prince", "king"]
for word in candidates:
    emb = get_emb(word)
    sim = np.dot(result, emb) / (np.linalg.norm(result) * np.linalg.norm(emb))
    print(f"{word}: {sim:.4f}")

Output:

queen: 0.92    ← Más cercano!
princess: 0.85
prince: 0.78
king: 0.75

Analogías clásicas

# Paris : France = Berlin : ?
emb_paris = get_emb("Paris")
emb_france = get_emb("France")
emb_berlin = get_emb("Berlin")

result = emb_berlin + emb_france - emb_paris
# Resultado cercano a "Germany"

Query Expansion

def expand_query(query, expansion_terms, alpha=0.7):
    """Expandir query con términos relacionados"""
    query_emb = get_emb(query)
    
    # Promedio de expansion terms
    expansion_embs = [get_emb(term) for term in expansion_terms]
    expansion_avg = np.mean(expansion_embs, axis=0)
    
    # Blend
    expanded = alpha * query_emb + (1 - alpha) * expansion_avg
    
    return expanded

# Ejemplo
query = "Python"
expansions = ["programming", "language", "code"]
expanded_emb = expand_query(query, expansions, alpha=0.7)

# Search con expanded_emb (mejor recall)

Resumen

  • Addition/Subtraction: Analogías semánticas
  • Query expansion: Mejora recall
  • Classic: king - man + woman = queen

Módulo 6 - Cápsula 02