Aller au contenu principal

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éthodeMeilleur PourCompromis
SimilaritéUsage généralPeut avoir des résultats redondants
SeuilFiltrage de qualitéPeut retourner peu de résultats
MMRRésultats diversifiésPertinence légèrement inférieure

Prochaines Étapes​

Continuez vers Chapitre 2 : Recherche Hybride.