Saltar al contenido principal

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étodoMejor paraCompromiso
SimilitudUso generalPuede tener resultados redundantes
UmbralFiltrado de calidadPuede devolver pocos resultados
MMRResultados diversosRelevancia ligeramente menor

Próximos pasos​

Continúe con Capítulo 2: Búsqueda híbrida.