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