Démystifier RAG

Dense vs. Sparse Retrieval

8 min de lecture
RAG Embeddings Vector DB

Introduction

Les grands modèles de langage (LLMs) comme GPT-4 ou Gemini possèdent une capacité remarquable à générer du texte cohérent et contextuellement pertinent. Cependant, ils souffrent d'une limitation fondamentale : leurs connaissances sont figées au moment de l'entraînement. Dès qu'une question porte sur des données postérieures à la date de coupure, ou sur des informations spécifiques à un domaine non couvert, le modèle « hallucine » — il produit des réponses plausibles mais factuellement incorrectes, avec une confiance trompeuse.

Le Retrieval-Augmented Generation (RAG) apporte une solution architecturale élégante à ce problème en créant un pont entre la connaissance paramétrique (encodée dans les poids du modèle) et la connaissance non-paramétrique (stockée dans des bases de données externes, documents d'entreprise, APIs). Au lieu de demander au LLM de « tout savoir », on lui fournit dynamiquement les extraits de documents les plus pertinents pour enrichir sa réponse. Ce paradigme transforme le modèle d'un oracle omniscient en un raisonneur augmenté capable de citer ses sources.

Cet article suppose quelques bases. Si vous découvrez le sujet, commencez plutôt par le guide illustré Comprendre le RAG pas à pas, qui reprend tout le pipeline sans prérequis, puis revenez ici pour l'approfondissement technique.

Le Pipeline d'Embedding

Le cœur d'un système RAG repose sur la transformation de documents textuels en représentations vectorielles denses, stockées dans une base de données vectorielle. Le processus se décompose en trois phases : le chunking (découpage du document en segments sémantiquement cohérents), l'embedding (projection de chaque chunk dans un espace vectoriel via un modèle encodeur), et le stockage indexé dans une base optimisée pour la recherche par similarité.

Le choix de la taille des chunks est critique : trop grands, ils diluent le signal sémantique ; trop petits, ils perdent le contexte nécessaire à la compréhension. Les stratégies avancées incluent le chunking par overlap (chevauchement partiel) et le chunking récursif basé sur la structure du document (titres, paragraphes, listes).

pipeline_embedding.py Python
from sentence_transformers import SentenceTransformer
import numpy as np

model = SentenceTransformer('all-MiniLM-L6-v2')
chunks = [
    "Les architectures RAG combinent retrieval et génération.",
    "La similarité cosinus mesure l'angle entre deux vecteurs.",
    "Les embeddings capturent le sens sémantique du texte."
]
embeddings = model.encode(chunks)
print(f"Shape: {embeddings.shape}")  # (3, 384)

Dans cet exemple, chaque chunk est projeté dans un espace à 384 dimensions par le modèle all-MiniLM-L6-v2. La matrice résultante de forme (3, 384) peut ensuite être indexée dans une base vectorielle pour une recherche par similarité en temps quasi-constant grâce aux algorithmes d'approximate nearest neighbor (ANN).

Dense vs. Sparse Retrieval

Il existe deux grandes familles de méthodes de retrieval. Le Dense Retrieval utilise des réseaux de neurones pour encoder les documents et les requêtes dans un espace vectoriel continu, où la pertinence est mesurée par la proximité géométrique (typiquement la similarité cosinus). Le Sparse Retrieval, quant à lui, s'appuie sur des représentations creuses basées sur la fréquence des termes, comme TF-IDF ou BM25 (la base de la recherche traditionnelle).

Critère Dense Retrieval Sparse Retrieval
Méthode Encodeurs neuronaux (bi-encoders) TF-IDF, BM25, SPLADE
Représentation Vecteurs denses (128–1536 dim.) Vecteurs creux (taille du vocabulaire)
Force Comprend la sémantique, synonymes, paraphrases Excellent pour la correspondance exacte de mots-clés
Faiblesse Coûteux en calcul, nécessite un GPU pour l'inférence Ne capture pas les relations sémantiques implicites
Cas d'usage Questions ouvertes, recherche conversationnelle Recherche de code, documentation technique, logs

En pratique, les systèmes les plus performants combinent les deux approches dans une stratégie Hybrid Retrieval. Un premier passage BM25 filtre rapidement les candidats, puis un re-ranker neuronal (cross-encoder) réordonne les résultats par pertinence sémantique fine. Cette combinaison offre à la fois la couverture lexicale du sparse et la compréhension contextuelle du dense.

Similarité Cosinus

La similarité cosinus est la métrique fondamentale du dense retrieval. Elle mesure l'angle entre deux vecteurs dans l'espace d'embedding, indépendamment de leur magnitude. Cela signifie que deux textes sémantiquement proches auront des vecteurs presque parallèles, quelle que soit leur longueur respective.

cos(θ) = (A · B) / (‖A‖ × ‖B‖)

Interprétation des valeurs :

  • 1 — Les vecteurs sont identiques (même direction). Similarité sémantique maximale.
  • 0 — Les vecteurs sont orthogonaux. Aucune relation sémantique détectée.
  • −1 — Les vecteurs sont diamétralement opposés. Sens contraires (rare en pratique avec des embeddings positifs).

Pour visualiser tout le pipeline en direct — de l'embedding de la requête jusqu'au prompt augmenté envoyé au LLM — essayez notre exercice pratique : Pipeline RAG Interactif →

Bases de Données Vectorielles

Une base vectorielle est un système de stockage optimisé pour indexer et rechercher des vecteurs de haute dimension. Contrairement aux bases relationnelles classiques qui excellent dans les requêtes par correspondance exacte, les bases vectorielles sont conçues pour répondre efficacement à la question : « Quels sont les k vecteurs les plus proches de ce vecteur requête ? » — le fameux problème du k-nearest neighbors (k-NN).

Solutions populaires

  • Qdrant — Base vectorielle open-source en Rust, optimisée pour la performance et le filtrage avancé. Support natif des payloads JSON et de la recherche hybride. Idéale pour les déploiements on-premise exigeants en latence.
  • ChromaDB — Solution légère et developer-friendly en Python. Parfaite pour le prototypage rapide et les projets de taille moyenne. Intégration native avec LangChain et LlamaIndex.
  • Pinecone — Service cloud managé offrant une scalabilité transparente. Indexation automatique, réplication multi-région et SLA de disponibilité. Recommandé pour les équipes ne souhaitant pas gérer l'infrastructure.
  • Weaviate — Base vectorielle avec vectorisation intégrée (module text2vec). Supporte le GraphQL et offre une classification automatique des objets.
  • FAISS (Meta) — Bibliothèque de recherche par similarité ultra-performante. Pas une base de données à proprement parler, mais un moteur d'indexation GPU-accelerated utilisé comme backend par de nombreuses solutions.

Pour aller plus loin

Le RAG est devenu un pilier incontournable des architectures LLM en production. Maîtriser les fondamentaux — embeddings, stratégies de chunking, similarité cosinus et bases vectorielles — est un prérequis pour construire des systèmes d'IA fiables et sourcés. Les tendances actuelles incluent le RAG agentique (où l'agent décide dynamiquement quoi retriever), le Graph RAG (augmentation par des graphes de connaissances) et le Self-RAG (auto-évaluation de la pertinence des documents récupérés).

Pour mettre en pratique ces concepts, explorez nos exercices interactifs ou approfondissez avec notre module sur le Model Context Protocol (MCP), qui montre comment les agents autonomes exploitent le RAG pour interagir avec des outils externes.