Comparaison des bases de données vectorielles, des bibliothèques de recherche vectorielle et des plugins de recherche vectorielle
Bonjour à tous - bienvenue dans ce cours sur les bases de données vectorielles !
L'essor de ChatGPT et d'autres grands modèles de langage (LLM) a favorisé la croissance des technologies de recherche vectorielle, avec des bases de données vectorielles spécialisées comme Milvus et Zilliz Cloud, des bibliothèques comme FAISS et des plugins de recherche vectorielle intégrés dans les bases de données conventionnelles.
Dans notre précédente série d'articles, nous avons examiné les principes fondamentaux des bases de données vectorielles. Dans cet article, nous continuerons à explorer le domaine complexe de la recherche vectorielle, en comparant les bases de données vectorielles, les plugins de recherche vectorielle et les bibliothèques de recherche vectorielle.
Qu'est-ce que la recherche vectorielle ?
Larecherche vectorielle, également connue sous le nom de recherche de similarité vectorielle, est une technique permettant d'extraire les k premiers résultats les plus similaires ou sémantiquement liés à un vecteur de requête donné parmi une vaste collection de données vectorielles denses. Avant d'effectuer des recherches de similarité, nous utilisons des réseaux neuronaux pour transformer des données non structurées, telles que du texte, des images, des vidéos et des sons, en vecteurs numériques à haute dimension appelés vecteurs d'intégration. Après avoir généré des vecteurs d'intégration, les moteurs de recherche vectorielle comparent la distance spatiale entre le vecteur d'entrée de la requête et les vecteurs dans les magasins de vecteurs. Plus ils sont proches dans l'espace, plus ils sont similaires.
De nombreuses technologies de recherche vectorielle sont disponibles sur le marché, notamment des bibliothèques d'apprentissage automatique comme NumPy de Python, des bibliothèques de recherche vectorielle comme FAISS, des plugins de recherche vectorielle construits sur des bases de données traditionnelles et des bases de données vectorielles spécialisées comme Milvus et Zilliz Cloud.
Bases de données vectorielles et bibliothèques de recherche vectorielle
Lesbases de données vectorielles spécialisées ne sont pas la seule solution pour les recherches de similarité. Avant l'avènement des bases de données vectorielles, de nombreuses bibliothèques de recherche vectorielle, telles que FAISS, ScaNN et HNSW, étaient utilisées pour la recherche vectorielle.
Les bibliothèques de recherche vectorielle peuvent vous aider à construire rapidement un prototype de système de recherche vectorielle très performant. FAISS, par exemple, est un logiciel libre développé par Meta pour la recherche efficace de similarités et le regroupement de vecteurs denses. FAISS peut traiter des collections de vecteurs de toute taille, même celles qui ne peuvent pas être entièrement chargées en mémoire. En outre, FAISS offre des outils d'évaluation et de réglage des paramètres. Bien qu'écrit en C++, FAISS fournit une interface Python/NumPy.
Cependant, les bibliothèques de recherche vectorielle sont simplement des bibliothèques ANN légères plutôt que des solutions gérées, et leurs fonctionnalités sont limitées. Si votre jeu de données est petit et limité, ces bibliothèques peuvent être suffisantes pour le traitement des données non structurées, même pour les systèmes fonctionnant en production. Cependant, à mesure que la taille des ensembles de données augmente et que le nombre d'utilisateurs augmente, le problème de l'échelle devient de plus en plus difficile à résoudre. En outre, elles ne permettent pas de modifier leurs données d'index et ne peuvent pas être interrogées lors de l'importation de données.
En revanche, les bases de données vectorielles constituent une solution plus optimale pour le stockage et la recherche de données non structurées. Elles peuvent stocker et interroger des millions, voire des milliards de vecteurs, tout en fournissant simultanément des réponses en temps réel ; elles sont hautement évolutives pour répondre aux besoins croissants des utilisateurs.
En outre, les bases de données vectorielles telles que Milvus présentent des caractéristiques beaucoup plus conviviales pour les données structurées/semi-structurées : nébulosité, multi-tenance, évolutivité, etc. Ces caractéristiques apparaîtront clairement lorsque nous approfondirons ce tutoriel.
Elles opèrent également dans une couche d'abstraction totalement différente des bibliothèques de recherche vectorielle - les bases de données vectorielles sont des services à part entière, tandis que les bibliothèques ANN sont destinées à être intégrées dans l'application que vous êtes en train de développer. En ce sens, les bibliothèques ANN sont l'un des nombreux composants sur lesquels les bases de données vectorielles sont construites, de la même manière qu'Elasticsearch est construit sur Apache Lucene.
Pour illustrer l'importance de cette abstraction, examinons l'insertion d'un nouvel élément de données non structurées dans une base de données vectorielle. C'est très facile avec Milvus :
from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)
C'est aussi simple que cela - 3 lignes de code. Avec une bibliothèque telle que FAISS ou ScaNN, il n'y a malheureusement pas de moyen facile de le faire sans recréer manuellement l'index entier à certains points de contrôle. Même si c'était possible, les bibliothèques de recherche vectorielle manquent encore d'évolutivité et de multi-location, deux des caractéristiques les plus importantes des bases de données vectorielles.
Bases de données vectorielles et plugins de recherche vectorielle pour les bases de données traditionnelles
Maintenant que nous avons établi la différence entre les bibliothèques de recherche vectorielle et les bases de données vectorielles, voyons en quoi les bases de données vectorielles diffèrent des plugins de recherche vectorielle.
Un nombre croissant de bases de données relationnelles traditionnelles et de systèmes de recherche tels que Clickhouse et Elasticsearch intègrent des plugins de recherche vectorielle. Elasticsearch 8.0, par exemple, inclut des fonctionnalités d'insertion de vecteurs et de recherche ANN qui peuvent être appelées via des points d'extrémité d'API reposantes. Le problème des plugins de recherche vectorielle devrait être clair comme le jour et la nuit - ces solutions n'adoptent pas une approche complète de la gestion de l'intégration et de la recherche vectorielle. Au lieu de cela, ces plugins sont conçus pour être des améliorations au-dessus des architectures existantes, ce qui les rend limités et non optimisés. Développer une application de données non structurées au-dessus d'une base de données traditionnelle reviendrait à essayer d'intégrer des batteries au lithium et des moteurs électriques dans le châssis d'une voiture à essence - ce n'est pas une bonne idée !
Pour illustrer cette situation, revenons à la liste des fonctionnalités qu'une base de données vectorielle devrait mettre en œuvre (voir la première section). Les plugins de recherche vectorielle sont dépourvus de deux de ces caractéristiques - la possibilité de réglage et des API/SDK conviviaux. Je vais continuer à utiliser le moteur ANN d'Elasticsearch comme exemple ; les autres plugins de recherche vectorielle fonctionnent de manière très similaire, je ne vais donc pas aller trop loin dans les détails. Elasticsearch prend en charge le stockage vectoriel via le type de champ de données dense_vector
et permet d'effectuer des requêtes via le type de champ de données knnsearch endpoint
:
PUT index
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"index": true,
"similarity": "l2_norm"
}
}
}
}
PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
"field": "image-vector",
"query_vector": [-0.5, 9.4, ...],
"k": 10,
"num_candidates": 100
}
}
Le plugin ANN d'Elasticsearch ne prend en charge qu'un seul algorithme d'indexation : Hierarchical Navigable Small Worlds, également connu sous le nom de HNSW (j'aime à penser que le créateur était en avance sur Marvel lorsqu'il s'agissait de populariser le multivers). De plus, seule la distance L2/Euclidienne est supportée comme métrique de distance. C'est un bon début, mais comparons-le à Milvus, une base de données vectorielle à part entière. Utilisation de pymilvus
:
>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 1024},
"metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
'data': vector,
'anns_field': 'embedding',
'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
'limit': 10,
'expr': 'id_field > 0'
}
>>> results = collection.search(**search_param)
Bien qu'Elasticsearch et Milvus disposent tous deux de méthodes pour créer des index, insérer des vecteurs d'intégration et effectuer des recherches sur le plus proche voisin, ces exemples montrent clairement que Milvus dispose d'une API de recherche vectorielle plus intuitive (meilleure API pour l'utilisateur) et d'une prise en charge plus large des index vectoriels et des métriques de distance (meilleure adaptabilité). Milvus prévoit également de prendre en charge davantage d'indices vectoriels et de permettre l'interrogation via des instructions de type SQL à l'avenir, ce qui améliorera encore l'adaptabilité et la facilité d'utilisation.
Nous venons de passer en revue une bonne partie du contenu. Cette section était certes assez longue, mais pour ceux qui l'ont survolée, voici un résumé rapide : Milvus est meilleur que les plugins de recherche vectorielle car Milvus a été conçu dès le départ comme une base de données vectorielle, ce qui lui permet d'offrir un ensemble de fonctionnalités plus riche et une architecture mieux adaptée aux données non structurées.
Comment choisir parmi les différentes technologies de recherche vectorielle ?
Toutes les bases de données vectorielles ne se valent pas ; chacune possède des caractéristiques uniques qui répondent à des applications spécifiques. Les bibliothèques et les plugins de recherche vectorielle sont conviviaux et idéaux pour gérer des environnements de production à petite échelle avec des millions de vecteurs. Si la taille de vos données est faible et que vous n'avez besoin que d'une fonctionnalité de recherche vectorielle de base, ces technologies sont suffisantes pour votre entreprise.
Cependant, une base de données vectorielle spécialisée devrait être votre premier choix pour les entreprises à forte intensité de données traitant des centaines de millions de vecteurs et exigeant des réponses en temps réel. Milvus, par exemple, gère sans effort des milliards de vecteurs, offrant des vitesses d'interrogation fulgurantes et de riches fonctionnalités. En outre, les solutions entièrement gérées comme Zilliz s'avèrent encore plus avantageuses, car elles vous libèrent des défis opérationnels et vous permettent de vous concentrer exclusivement sur vos activités principales.
Jetez un coup d'œil aux cours Vector Database 101
- Introduction aux données non structurées
- Qu'est-ce qu'une base de données vectorielle ?
- Comparaison des bases de données vectorielles, des bibliothèques de recherche vectorielle et des plugins de recherche vectorielle
- Introduction à Milvus
- Démarrage rapide de Milvus
- Introduction à la recherche par similarité vectorielle
- Notions de base sur l'index vectoriel et l'index de fichiers inversé
- Quantification scalaire et quantification par produit
- Petits mondes hiérarchiques navigables (HNSW)
- Voisins les plus proches approximatifs Oh Yeah (ANNOY)
- Choisir le bon index vectoriel pour votre projet
- DiskANN et l'algorithme de Vamana
- Qu'est-ce que la recherche vectorielle ?
- Bases de données vectorielles et bibliothèques de recherche vectorielle
- Bases de données vectorielles et plugins de recherche vectorielle pour les bases de données traditionnelles
- Comment choisir parmi les différentes technologies de recherche vectorielle ?
- Jetez un coup d'œil aux cours Vector Database 101
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word