Chapitre 1 : Recherche de Similarité
Introduction
La recherche de similarité est la base de la récupération dans les systèmes RAG. Elle trouve les documents dont les représentations vectorielles sont les plus proches du vecteur de requête.
Mesures de Distance
Similarité Cosinus
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Plage : -1 à 1 (1 = identique)
Distance Euclidienne
def euclidean_distance(a, b):
return np.linalg.norm(a - b)
# Plage : 0 à l'infini (0 = identique)
Produit Scalaire (Produit Point)
def inner_product(a, b):
return np.dot(a, b)
# Pour les vecteurs normalisés, équivalent au cosinus
Récupération Top-K
from langchain.vectorstores import Chroma
# Créer un récupérateur
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 5} # Retourner les 5 meilleurs résultats
)
# Récupérer
docs = retriever.get_relevant_documents("Qu'est-ce que RAG?")
Seuils de Score
Filtrer par similarité minimale :
retriever = vectorstore.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={
"score_threshold": 0.7, # Similarité minimale
"k": 10
}
)
Pertinence Marginale Maximale (MMR)
Équilibrer la pertinence avec la diversité :
retriever = vectorstore.as_retriever(
search_type="mmr",
search_kwargs={
"k": 5,
"fetch_k": 20, # Récupérer plus de candidats
"lambda_mult": 0.7 # 1=pertinence, 0=diversité
}
)
Comparaison
| Méthode | Meilleur Pour | Compromis |
|---|---|---|
| Similarité | Usage général | Peut avoir des résultats redondants |
| Seuil | Filtrage de qualité | Peut retourner peu de résultats |
| MMR | Résultats diversifiés | Pertinence légèrement inférieure |
Prochaines Étapes
Continuez vers Chapitre 2 : Recherche Hybride.