Capítulo 1: Busca por Similaridade
Introdução
A busca por similaridade é a base da recuperação em sistemas RAG. Ela encontra documentos cujas representações vetoriais estão mais próximas do vetor da consulta.
Métricas de Distância
Similaridade Cosseno
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)
Distância Euclidiana
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
# Range: 0 to infinity (0 = identical)
Produto Interno (Produto Escalar)
def inner_product(a, b):
return np.dot(a, b)
# For normalized vectors, equivalent to cosine
Recuperação 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?")
Limiares de Score
Filtre por similaridade 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)
Equilibre relevância com diversidade:
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
}
)
Comparação
| Método | Melhor Para | Trade-off |
|---|---|---|
| Similaridade | Uso geral | Pode ter resultados redundantes |
| Limiar | Filtragem de qualidade | Pode retornar poucos resultados |
| MMR | Resultados diversos | Relevância ligeiramente menor |
Próximos Passos
Continue para Capítulo 2: Busca Híbrida.