Le RAG (Retrieval-Augmented Generation) est une technique révolutionnaire qui combine la récupération d'informations et la génération de texte pour améliorer la précision des modèles de langage (LLM). Les embeddings jouent un rôle central dans le RAG en permettant de représenter les mots, phrases et documents sous forme de vecteurs numériques. Cela permet aux modèles d'IA de comprendre le sens et les relations entre les concepts.
Pourquoi cet article ?
⭐ Difficulté : ★★★☆☆ (3/5)
✅ Pédagogique : Analogies visuelles, exemples concrets, et schémas explicites.
⚠️ Technique : Concepts avancés (embeddings, similarité cosinus, bases vectorielles) et manipulation de bibliothèques Python (Sentence Transformers, FAISS, LangChain).
🔍 Vocabulaire : Termes comme *chunking*, *vector store*, *retriever*, *similarité cosinus*, ou *fine-tuning* nécessitent des bases en IA et en traitement des données.
📚 Prérequis recommandés
📊 Statistiques/NLP : Notions de vecteurs, distances, et traitement du langage naturel.
💻 Python intermédiaire : Manipulation de bibliothèques (LangChain, FAISS, Hugging Face).
🗃️ Gestion de données : Prétraitement de texte, segmentation, et stockage vectoriel.
🖥️ Environnement technique : Accès à un LLM (local ou API), Ollama installé, GPU recommandé.
Un embedding est une technique qui permet de représenter des mots, des phrases ou des documents sous forme de vecteurs numériques. Ces vecteurs capturent le sens et les relations entre les éléments qu'ils représentent.
Imaginez que chaque mot est une étoile dans l'espace. Les embeddings sont comme des coordonnées qui placent chaque étoile (mot) de manière à ce que :
Exemple :
Les ordinateurs ne comprennent pas les mots directement. Ils ont besoin de nombres pour traiter l'information. Les embeddings permettent de :
Voici un exemple de mots et leurs embeddings (simplifiés en 2D) :
| Mot | Embedding (x, y) |
|---|---|
| roi | (0.2, 0.8) |
| reine | (0.3, 0.7) |
| homme | (0.25, 0.75) |
| femme | (0.35, 0.65) |
| pomme | (-0.1, 0.1) |
| banane | (-0.2, 0.2) |
Observations :
reine (0.3, 0.7)
/
/
roi (0.2, 0.8)
\
\
homme (0.25, 0.75)
pomme (-0.1, 0.1) ------------------- banane (-0.2, 0.2)
Chaque mot est d'abord représenté par un identifiant unique (ex. : un nombre). Par exemple :
Mais cette représentation ne capture aucun sens !
Les embeddings transforment chaque mot en un vecteur (une liste de nombres). Par exemple :
Ces vecteurs sont appris par des modèles d'IA (comme Word2Vec, GloVe, ou BERT) de manière à ce que :
On peut visualiser ces vecteurs dans un espace à 2 ou 3 dimensions (même si en réalité, ils ont souvent 50 à 300 dimensions).
Exemple visuel :
reine (0.3, 0.7)
/
/
roi (0.2, 0.8)
\
\
homme (0.25, 0.75)
pomme (-0.1, 0.1) ------------------- banane (-0.2, 0.2)
Le RAG est une technique qui combine :
Pourquoi le RAG ?
Exemple :
[0.12, 0.45, -0.23, 0.67, ...]
(vecteur numérique).
Schéma :
+---------------------+ +---------------------+ +---------------------+
| Documents | ----> | Découpage en | ----> | Embeddings |
| (ex: PDF, texte) | | chunks | |(vecteurs numériques)|
+---------------------+ +---------------------+ +---------------------+
|
v
+---------------------+
| Base de données |
| vectorielle |
+---------------------+
Exemple :
[0.15, 0.40, -0.25, 0.70, ...]
Schéma :
+---------------------+ +---------------------+ +---------------------+
| Requête | ----> | Embedding de la | ----> | Recherche des |
| (ex: "Qu'est-ce | | requête | | chunks similaires |
| que le RAG ?") | | | | |
+---------------------+ +---------------------+ +---------------------+
|
v
+---------------------+
| Chunks pertinents |
| (ex: 3 chunks) |
+---------------------+
Exemple de prompt :
Réponds à la question en utilisant uniquement les informations suivantes : --- Chunk 1 : "Le RAG est une technique qui combine la récupération d'informations..." Chunk 2 : "Il utilise des embeddings pour représenter les documents..." Chunk 3 : "Le RAG améliore la précision des modèles de langage..." --- Question : Qu'est-ce que le RAG ?
Schéma :
+---------------------+ +---------------------+ +---------------------+ | Chunks pertinents | ----> | Prompt pour le LLM | ----> | Réponse générée | | | |(incluant les chunks)| | | +---------------------+ +---------------------+ +---------------------+
Les embeddings permettent de :
Exemple concret :
[0.15, 0.40, -0.25, 0.70, ...]
[0.12, 0.45, -0.23, 0.67, ...]
[0.14, 0.38, -0.27, 0.72, ...]
Voici un exemple complet en Python pour illustrer le lien entre RAG et embeddings :
pip install sentence-transformers faiss-cpu langchain openai
from sentence_transformers import SentenceTransformer from langchain.vectorstores import FAISS from langchain.text_splitter import CharacterTextSplitter from langchain.document_loaders import TextLoader # Charger les documents loader = TextLoader("document.txt") documents = loader.load() # Découper les documents en chunks text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200) docs = text_splitter.split_documents(documents) # Générer les embeddings et créer la base vectorielle model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode([doc.page_content for doc in docs]) vector_store = FAISS.from_documents(docs, embeddings)
from langchain.llms import OpenAI from langchain.chains import RetrievalQA # Configurer le LLM llm = OpenAI(temperature=0) # Créer la chaîne RAG qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=vector_store.as_retriever() ) # Poser une question query = "Qu'est-ce que le RAG ?" response = qa_chain.run(query) print("Réponse :", response)
Pré-requis : Ollama doit être acti sur votre machine. Si celui-ci n'est pas installé reportez vous aux articles :
Pour vérifier si Ollama est un service actif :
systemctl status Ollama
Installez dans Mozilla Firefox l'extension Page Assist
Intégrer un modèle multilingue en allant sur le site Ollama : Modèles LLM - Embeding
Choisir bge-m3
Puisque l'on utilise Page Assis, il nous suffit de cliquer sur le lien de téléchargement comme indiquer ci-dessous :
| Avantage | Description |
|---|---|
| Précision | Les réponses sont basées sur des informations pertinentes et à jour. |
| Flexibilité | Les documents peuvent être mis à jour sans réentraîner le modèle de langage. |
| Transparence | Les sources des réponses peuvent être tracées et vérifiées. |
| Efficacité | La recherche vectorielle est rapide et scalable. |
| Outil/Bibliothèque | Description | Lien |
|---|---|---|
| LangChain | Framework pour développer des applications RAG. | LangChain |
| FAISS | Bibliothèque pour la recherche de similarité dans des bases de données vectorielles. | FAISS |
| Chroma | Base de données vectorielle open-source. | Chroma |
| Weaviate | Base de données vectorielle avec des fonctionnalités avancées. | Weaviate |
| Sentence Transformers | Modèles pré-entraînés pour générer des embeddings de phrases. | Sentence Transformers |
| Hugging Face | Plateforme pour les modèles de langage et les embeddings. | Hugging Face |
Les embeddings sont au cœur du RAG :