Bases de données vectorielles et systèmes de recherche d’embeddings
Les bases de données vectorielles sont des bases spécialisées, optimisées pour stocker et effectuer des recherches de similarité sur des vecteurs de haute dimension. Elles constituent l’élément fondamental des applications d’IA modernes, en particulier des systèmes RAG (Retrieval-Augmented Generation).
Qu’est-ce qu’une base de données vectorielle ?
Alors que les bases de données traditionnelles sont optimisées pour des recherches par correspondance exacte, les bases de données vectorielles se concentrent sur les recherches de voisins approximativement les plus proches (ANN).
Concepts clés
Embedding : Une représentation numérique vectorielle d’une donnée (texte, image, audio).
"Artificial intelligence" → [0.12, -0.45, 0.89, ..., 0.34] (e.g., 1536 dimensions)
Recherche de similarité : Trouver les vecteurs les plus proches d’un vecteur requête.
query_vector → Top-K most similar vectors
Métriques de distance :
- Similarité cosinus : Similarité directionnelle.
- Distance euclidienne (L2) : Distance géométrique.
- Produit scalaire : Produit interne des vecteurs.
Métriques de similarité : analyse détaillée
Similarité cosinus
cos(A, B) = (A · B) / (||A|| × ||B||)
Intervalle de valeurs : [-1, 1]
- 1 : Même direction (identique).
- 0 : Orthogonal (non lié).
- -1 : Direction opposée.
Cas d’usage : Similarité textuelle, recherche sémantique.
Distance euclidienne (L2)
d(A, B) = √(Σ(Aᵢ - Bᵢ)²)
Intervalle de valeurs : [0, ∞) Cas d’usage : Similarité d’images, clustering.
Produit scalaire
A · B = Σ(Aᵢ × Bᵢ)
Cas d’usage : Équivalent au cosinus pour des embeddings normalisés.
Algorithmes d’indexation
1. Force brute (Flat Index)
Comparer la requête à chaque vecteur de la base.
Complexité : O(n × d)
- n : Nombre de vecteurs.
- d : Dimension.
Avantage : Précision 100 %.
Inconvénient : Très lent pour de grands ensembles.
2. IVF (Inverted File Index)
Réduit l’espace de recherche en divisant les vecteurs en clusters.
Algorithme :
- Créer des centroïdes avec K-means.
- Assigner chaque vecteur à son centroïde le plus proche.
- Lors de la recherche, ne regarder que dans les clusters nprobe les plus proches.
1Parameters: 2- nlist: Number of clusters (typically √n) 3- nprobe: Number of clusters to search 4 5Trade-off: Higher nprobe → higher accuracy, lower speed.
3. HNSW (Hierarchical Navigable Small World)
Une approche basée sur un graphe, et la méthode la plus populaire aujourd’hui.
Structure :
1Layer 2: o-------o-------o (sparse) 2 | | | 3Layer 1: o-o-o---o-o-o---o-o-o (medium) 4 | | | | | | | | | 5Layer 0: o-o-o-o-o-o-o-o-o-o-o-o (dense)
Paramètres :
- M : Nombre maximum de connexions pour chaque nœud.
- ef_construction : Nombre de candidats lors de la construction.
- ef_search : Nombre de candidats lors de la recherche.
Avantages :
- Recherche extrêmement rapide : O(log n).
- Taux de rappel élevés.
- Supporte l’insertion/suppression dynamique.
4. Product Quantization (PQ)
Réduire l’utilisation mémoire en compressant les vecteurs.
Méthode :
- Diviser le vecteur en M sous-vecteurs.
- Mapper chaque sous-vecteur à un des K centroïdes.
- Stocker les IDs des centroïdes au lieu des composantes originales.
1Original: 1536 dim × 4 bytes = 6KB 2PQ (M=96, K=256): 96 × 1 byte = 96 bytes 3Compression: ~64x
5. Scalar Quantization (SQ)
Convertir les représentations Float32 en Int8.
1Original: 1536 × 4 bytes = 6KB 2SQ8: 1536 × 1 byte = 1.5KB 3Compression: 4x 4## Comparaison des bases de données vectorielles populaires 5 6### Pinecone 7 8**Fonctionnalités :** 9- Service cloud entièrement managé. 10- Scalabilité automatique. 11- Filtrage par métadonnées. 12- Isolation par espace de nom. 13 14**Utilisation :** 15```python 16import pinecone 17 18pinecone.init(api_key="xxx", environment="us-west1-gcp") 19index = pinecone.Index("my-index") 20 21# Upsert 22index.upsert(vectors=[ 23 {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "tech"}} 24]) 25 26# Query 27results = index.query(vector=[0.1, 0.2, ...], top_k=10, filter={"category": "tech"})
Weaviate
Fonctionnalités :
- Open source.
- Vectorisation intégrée.
- Prise en charge de l’API GraphQL.
- Recherche hybride (vecteur + mot-clé).
Qdrant
Fonctionnalités :
- Écrit en Rust pour des performances élevées.
- Options de filtrage avancées.
- Indexation de payload.
- Prise en charge du déploiement distribué.
Milvus
Fonctionnalités :
- Accélération GPU.
- Recherche multi-vecteurs.
- Time travel (versioning).
- Architecture native Kubernetes.
ChromaDB
Fonctionnalités :
- Convivial pour les développeurs et facile à configurer.
- Modes en mémoire + persistant.
- Approche orientée Python.
- Idéal pour le prototypage.
Tableau comparatif
| Fonctionnalité | Pinecone | Weaviate | Qdrant | Milvus |
|---|---|---|---|---|
| Hébergement | Cloud | Les deux | Les deux | Les deux |
| Scalabilité | Auto | Manuel | Manuel | Auto |
| Recherche hybride | ✓ | ✓ | ✓ | ✓ |
| Support GPU | - | - | ✓ | ✓ |
| Tarification | Par vecteur | Gratuit/Paid | Gratuit/Paid | Gratuit/Paid |
Filtrage et métadonnées
Pré-filtrage vs Post-filtrage
Pré-filtrage :
- Appliquer d’abord le filtre de métadonnées.
- Effectuer la recherche vectorielle dans l’ensemble filtré.
- Avantage : Plus rapide.
- Inconvénient : Perte potentielle de rappel.
Post-filtrage :
- Trouver Top-K × multiplicateur via la recherche vectorielle.
- Appliquer le filtre de métadonnées à ces résultats.
- Retourner les K résultats finaux.
- Avantage : Meilleur rappel.
- Inconvénient : Performances plus lentes.
Recherche hybride
Combinaison de la recherche par mot-clé (BM25) + recherche vectorielle :
final_score = α × vector_score + (1-α) × keyword_score
Optimisation des performances
Paramètres d’index
Paramètres HNSW optimaux :
1High Recall: M=32, ef=200 2High Speed: M=16, ef=50 3Balanced: M=24, ef=100
Traitement par lots
1# Mauvais : insertion unitaire 2for vec in vectors: 3 index.upsert([vec]) 4 5# Bon : insertion en lot 6index.upsert(vectors, batch_size=100)
Pool de connexions
1from pinecone import Pinecone 2 3pc = Pinecone( 4 api_key="xxx", 5 pool_threads=30 # Parallel connections 6)
Exemple d’architecture entreprise
1┌─────────────────────────────────────────────────────┐ 2│ Application │ 3└──────────────────────┬──────────────────────────────┘ 4 │ 5┌──────────────────────▼──────────────────────────────┐ 6│ Vector Search Service │ 7│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 8│ │ Query │ │ Reranker │ │ Cache │ │ 9│ │ Engine │ │ Service │ │ (Redis) │ │ 10│ └─────────────┘ └─────────────┘ └─────────────┘ │ 11└──────────────────────┬──────────────────────────────┘ 12 │ 13┌──────────────────────▼──────────────────────────────┐ 14│ Vector Database Cluster │ 15│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 16│ │ Shard 1 │ │ Shard 2 │ │ Shard 3 │ │ 17│ └─────────┘ └─────────┘ └─────────┘ │ 18└─────────────────────────────────────────────────────┘
Monitoring et observabilité
Métriques clés
- Latence des requêtes (p50, p95, p99)
- Taux de rappel
- QPS (Queries Per Second)
- Taille de l’index
- Utilisation mémoire
Seuils d’alerte
1alerts: 2 - name: high_latency 3 condition: p99_latency > 200ms 4 severity: warning 5 6 - name: low_recall 7 condition: recall < 0.9 8 severity: critical 9## Conclusion 10 11Les bases de données vectorielles sont des composants indispensables des applications d'IA modernes. Avec le bon choix de base de données, la bonne stratégie d'indexation et les bonnes optimisations, vous pouvez créer des systèmes de recherche sémantique haute performance. 12 13Chez Veni AI, nous proposons des solutions de recherche vectorielle pour les entreprises. Contactez-nous pour vos besoins.
