Vector Database

Les bases de données vectorielles : le moteur de recherche sémantique de l'IA moderne

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èleDimensionsCas 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étriqueFormuleUtilisation
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.
04

🏢 Solutions du marché

SolutionTypeLangageParticularité
FAISS (Meta) Bibliothèque open source Python/C++ Ultra-rapide, benchmarks records
Pinecone Cloud managé API REST Simple d'usage, scalable
Qdrant Open Source / Cloud Rust Performant, filtres avancés
Milvus Open Source C++/Python Complet, écosystème riche
Chroma Open Source Python Simple, intégration native avec LangChain
💡 Notre recommandation :
  • Prototypage : Chroma (simple, Python)
  • Production (performance) : FAISS (bibliothèque) ou Qdrant (serveur)
  • Cloud managé : Pinecone
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

IndexDescriptionPerformance
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