01
📖 Qu'est-ce que la recherche vectorielle ?
La recherche vectorielle (ou recherche sémantique) est une technique qui permet de trouver des documents par similarité de sens, et non par correspondance exacte de mots-clés. Elle repose sur les embeddings : des représentations vectorielles qui capturent la sémantique du texte.
💡 À retenir : Contrairement à la recherche par mots-clés, la recherche vectorielle trouve des résultats pertinents même si les mots exacts ne sont pas présents.
📊 Pipeline de recherche vectorielle :
[Document] → [Modèle d'embedding] → [Vecteur] → [Index FAISS]
[Question] → [Modèle d'embedding] → [Vecteur] → [Recherche] → [Résultats]
📝 Exemple :
Requête classique : "discours sur la liberté" → trouve les documents contenant "liberté"
Requête vectorielle : "discours sur la liberté" → trouve l'Appel du 18 juin (même sans le mot "liberté")
02
🧠 Principe de la recherche vectorielle
Étape 1 : Indexation
Chaque document est converti en vecteur (embedding) et stocké dans un index spécialisé.
# Indexation des discours
for discours in discours_list:
embedding = model.encode(discours.texte)
index.add(embedding)
metadata.append({
"id": discours.id,
"title": discours.titre,
"speaker": discours.orateur
})
Étape 2 : Requête
La question de l'utilisateur est convertie en vecteur.
# Conversion de la requête
requete = "discours sur la liberté"
requete_embedding = model.encode(requete)
Étape 3 : Recherche
On trouve les k vecteurs les plus similaires dans l'index.
# Recherche des plus proches voisins
scores, indices = index.search(requete_embedding, k=5)
# Récupération des métadonnées
for score, idx in zip(scores[0], indices[0]):
print(f"{metadata[idx]['title']} (score: {score:.3f})")
04
🚀 FAISS en détail
FAISS (Facebook AI Similarity Search) 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)
Types d'index FAISS
IndexFlatIP
Type : Exact (brute force)
Performance : Lente sur grands volumes
Précision : 100% 🏆
Usage : Petits volumes, validation
IndexIVFFlat
Type : Approximatif (clustering)
Performance : Rapide
Précision : 90-95%
Usage : Grands volumes, recherche
IndexHNSW
Type : Approximatif (graphe)
Performance : Très rapide 🏆
Précision : 95-99%
Usage : Production, haute performance
Exemple avec notre projet
import faiss
import numpy as np
# Index HNSW pour nos 100 discours
dimension = 384
index = faiss.IndexHNSWFlat(dimension, 32)
# Ajouter les embeddings des discours
index.add(discours_embeddings)
# Rechercher "discours sur la liberté"
requete_embedding = model.encode(["discours sur la liberté"])
scores, indices = index.search(requete_embedding, k=3)
# Résultats en <10ms
for score, idx in zip(scores[0], indices[0]):
print(f"{discours[idx]['titre']} (score: {score:.3f})")
05
⚡ Indexation et performance
Facteurs de performance
| Facteur | Impact |
| Nombre de vecteurs
| Plus il y a de vecteurs, plus la recherche est lente (sans index)
|
| Dimension des vecteurs
| 384-1536 dimensions. Plus c'est élevé, plus c'est lent
|
| Type d'index
| Flat (exact) vs IVF/HNSW (approximatif)
|
| Mémoire GPU/CPU
| Le GPU peut accélérer 10-100x
|
Benchmarks (100k vecteurs, dimension 384)
| Index | Temps de recherche | Précision@10 |
| Flat (brute force)
| 50 ms
| 100%
|
| IVF (256 clusters)
| 5 ms
| 95%
|
| HNSW (M=32)
| 2 ms
| 98%
|
💡 Bonne pratique : Pour des volumes < 10k vecteurs, utilisez IndexFlat (100% précis). Pour des millions de vecteurs, passez à HNSW.
06
🔗 Recherche hybride (vectorielle + keywords)
La recherche purement vectorielle peut manquer des correspondances exactes importantes. La recherche hybride combine les deux approches.
def hybrid_search(query, vector_weight=0.7, keyword_weight=0.3):
# Recherche vectorielle
vector_results = vector_search(query, k=20)
# Recherche par mots-clés (BM25 / Elasticsearch)
keyword_results = keyword_search(query, k=20)
# Fusion avec RRF (Reciprocal Rank Fusion)
final_results = reciprocal_rank_fusion(
vector_results,
keyword_results,
weights=[vector_weight, keyword_weight]
)
return final_results[:10]
📊 Avantages de l'approche hybride :
- ✅ Trouve les documents par similarité sémantique (vecteurs)
- ✅ Trouve les termes exacts (mots-clés)
- ✅ Meilleure précision globale que chaque approche seule
07
🎯 Cas d'usage de la recherche vectorielle
1. Moteur de recherche sémantique
Recherche documentaire d'entreprise, FAQ, base de connaissances.
2. RAG (Retrieval-Augmented Generation)
Récupérer les documents pertinents pour alimenter un LLM.
3. Détection de similarité / plagiat
Comparer des documents pour trouver des passages similaires.
4. Recommandation
"Les utilisateurs qui ont aimé ce discours ont aussi aimé..."
5. Clustering de documents
Grouper des documents par thèmes (classification non supervisée).
🚀 Chez Le Monde Sémantique
Nous utilisons FAISS avec des embeddings Sentence-BERT pour la recherche vectorielle sur nos 100+ discours. Latence < 10ms pour une recherche sur l'ensemble du corpus.
🎯 Tester notre démo interactive →