Démystifier RAG
Dense vs. Sparse Retrieval
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).
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.