01
📖 Qu'est-ce qu'une Vector Database ?
Une base de données vectorielle (Vector Database) est un système spécialisé pour stocker, indexer et rechercher des vecteurs numériques (embeddings). Contrairement aux bases traditionnelles qui comparent des valeurs exactes, les Vector Databases comparent des similarités sémantiques.
💡 À retenir : Si les bases SQL comparent des nombres (42 = 42) et les graphes comparent des relations (A→B), les Vector Databases comparent des sens ("chat" ≈ "félins").
🔢 Visualisation simplifiée :
"Paris" → [0.12, 0.45, 0.78, 0.03, ...] (vecteur 384 dimensions)
"France" → [0.14, 0.42, 0.75, 0.05, ...] (vecteur proche)
"Pizza" → [0.89, 0.12, 0.23, 0.91, ...] (vecteur éloigné)
Fonctionnalités clés :
- ✅ Stockage de vecteurs à haute dimensionnalité (128 à 4096 dimensions)
- ✅ Indexation pour recherche rapide (HNSW, IVF, PQ)
- ✅ Recherche par similarité (cosinus, euclidienne, produit scalaire)
- ✅ Filtrage hybride (vecteurs + métadonnées)
- ✅ Support des architectures RAG (Retrieval-Augmented Generation)
02
🧠 Embeddings : le cœur de la vectorisation
Les embeddings sont des représentations vectorielles de données (texte, image, audio) générées par des modèles d'IA. Des mots similaires ont des vecteurs similaires.
Modèles d'embeddings courants
| Modèle | Dimensions | Cas d'usage |
| Sentence-BERT (SBERT)
| 384-768
| Textes, phrases, documents
|
| OpenAI Ada-002
| 1536
| Textes (API payante)
|
| Mistral embeddings
| 1024
| Textes (open source)
|
| CLIP
| 512
| Images + texte (multimodal)
|
Exemple d'embedding avec Sentence-BERT
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
# Générer des embeddings
phrases = ["Discours sur la liberté", "Appel à la résistance"]
embeddings = model.encode(phrases)
print(embeddings.shape) # (2, 384)
📝 Calcul de similarité :
"Liberté" et "Indépendance" → similarité ~0.85
"Liberté" et "Dictature" → similarité ~0.12
Le modèle a compris le sens !
03
🔍 Recherche vectorielle
La recherche vectorielle consiste à trouver les k vecteurs les plus similaires à un vecteur requête.
Mesures de similarité
| Métrique | Formule | Utilisation |
| Cosinus
| cos(θ) = (A·B)/(||A||·||B||)
| Textes (orientation, pas magnitude)
|
| Euclidienne
| distance = √Σ(Ai-Bi)²
| Vecteurs proches dans l'espace
|
| Produit scalaire
| similarité = A·B
| Vecteurs normalisés
|
Exemple de recherche avec FAISS
import faiss
import numpy as np
# Index FAISS
dimension = 384
index = faiss.IndexFlatIP(dimension) # Produit scalaire
# Ajouter des embeddings
index.add(embeddings)
# Rechercher les 5 plus similaires
requete = model.encode(["liberté"])
distances, indices = index.search(requete, k=5)
💡 Performances : FAISS peut rechercher dans 1 milliard de vecteurs en moins de 200ms avec les bons index.
05
🚀 FAISS (Facebook AI Similarity Search)
FAISS est la bibliothèque de référence pour la recherche vectorielle, développée par Meta. Elle est utilisée par des milliers d'entreprises et de projets open source.
Installation
pip install faiss-cpu # Version CPU
pip install faiss-gpu # Version GPU (si CUDA disponible)
Index FAISS courants
| Index | Description | Performance |
| IndexFlatIP
| Recherche exacte (brute force)
| Lente pour grands volumes, 100% précise
|
| IndexIVFFlat
| Recherche approximative (cluster)
| Rapide, légère perte de précision
|
| IndexHNSW
| Graphe hiérarchique
| Très rapide, bonne précision
|
Exemple avec notre projet
# Index des discours
dimension = 384
index = faiss.IndexHNSWFlat(dimension, 32)
# Ajouter les embeddings des discours
index.add(discours_embeddings)
# Rechercher "discours sur la liberté"
requete = model.encode(["discours sur la liberté"])
scores, indices = index.search(requete, k=3)
# Résultats : Appel du 18 juin, Discours de Bayeux...
🚀 Chez Le Monde Sémantique
Nous utilisons FAISS pour notre recherche vectorielle, avec des embeddings générés par Sentence-BERT. Recherche sémantique en moins de 10ms sur 100+ discours.
Tester notre recherche vectorielle →
06
🤖 RAG et Vector Database
Le RAG (Retrieval-Augmented Generation) est l'architecture IA qui combine recherche vectorielle et génération de texte par LLM.
📊 Architecture RAG :
[Question utilisateur] → [Embedding] → [Recherche Vectorielle] → [Contexte] → [LLM] → [Réponse sourcée]
↓
[Vector Database (FAISS)]
Exemple RAG simple
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.llms import OpenAI
# 1. Charger les documents et créer l'index
documents = ["Discours 1...", "Discours 2..."]
vectorstore = FAISS.from_texts(documents, embeddings)
# 2. Récupérer le contexte pertinent
query = "Que dit Charles de Gaulle sur la résistance ?"
context = vectorstore.similarity_search(query, k=3)
# 3. Générer la réponse avec contexte
prompt = f"Contexte: {context}\nQuestion: {query}\nRéponse:"
response = llm.invoke(prompt)
💡 RAG vs Fine-tuning :
- RAG : Ajoute du contexte à la volée, sans entraînement, toujours à jour
- Fine-tuning : Entraîne le modèle sur des données spécifiques, plus coûteux
07
🎯 Cas d'usage des Vector Databases
1. Recherche sémantique
Trouver des documents par concept, pas par mot-clé. "Discours sur la liberté" → trouve l'Appel du 18 juin.
2. RAG (IA générative)
Alimenter des LLM avec un contexte pertinent et à jour, sans hallucination.
3. Recommandation
"Les utilisateurs qui ont aimé ce discours ont aussi aimé..."
4. Détection de similarité / plagiat
Comparer des documents pour trouver des passages similaires.
5. Recherche multimodale
Trouver une image à partir d'une description textuelle (CLIP).
📊 Chez Le Monde Sémantique :
- Recherche vectorielle sur 100+ discours
- Embeddings générés par Sentence-BERT (multilingue)
- Index FAISS (HNSW) pour réponses < 10ms
- Intégration RAG en cours pour assistant IA