Capítulo 1: Búsqueda por similitud
Introducción
La búsqueda por similitud es la base de la recuperación en sistemas RAG. Encuentra los documentos cuyas representaciones vectoriales están más cercanas al vector de la consulta.
Métricas de distancia
Similitud coseno
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Range: -1 to 1 (1 = identical)
Distancia euclidiana
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
# Range: 0 to infinity (0 = identical)
Producto interno (producto punto)
def inner_product(a, b):
return np.dot(a, b)
# For normalized vectors, equivalent to cosine
Recuperación Top-K
from langchain.vectorstores import Chroma
# Create retriever
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 5} # Return top 5 results
)
# Retrieve
docs = retriever.get_relevant_documents("What is RAG?")
Umbrales de puntuación
Filtrar por similitud mínima:
retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={
"score_threshold": 0.7, # Minimum similarity
"k": 10
}
)
Maximum Marginal Relevance (MMR)
Equilibra relevancia con diversidad:
retriever = vectorstore.as_retriever(
search_type="mmr",
search_kwargs={
"k": 5,
"fetch_k": 20, # Fetch more candidates
"lambda_mult": 0.7 # 1=relevance, 0=diversity
}
)
Comparación
| Método | Mejor para | Compromiso |
|---|---|---|
| Similitud | Uso general | Puede tener resultados redundantes |
| Umbral | Filtrado de calidad | Puede devolver pocos resultados |
| MMR | Resultados diversos | Relevancia ligeramente menor |
Próximos pasos
Continúe con Capítulo 2: Búsqueda híbrida.