Recherche de similarité évolutive et ultrarapide avec la base de données vectorielles Milvus
image de couverture
Introduction
Dans cet article, nous aborderons quelques aspects intéressants des bases de données vectorielles et de la recherche de similarités à grande échelle. Dans le monde d'aujourd'hui, qui évolue rapidement, nous voyons apparaître de nouvelles technologies, de nouvelles entreprises, de nouvelles sources de données et, par conséquent, nous devrons continuer à utiliser de nouvelles méthodes pour stocker, gérer et exploiter ces données afin d'en tirer des enseignements. Les données structurées et tabulaires sont stockées dans des bases de données relationnelles depuis des décennies, et la Business Intelligence se nourrit de l'analyse et de l'extraction d'informations à partir de ces données. Cependant, si l'on considère le paysage actuel des données, "plus de 80 à 90 % des données sont des informations non structurées telles que le texte, la vidéo, l'audio, les journaux de serveurs web, les médias sociaux, et bien plus encore". Les organisations ont tiré parti de la puissance de l'apprentissage automatique et de l'apprentissage profond pour tenter d'extraire des informations de ces données, car les méthodes traditionnelles basées sur les requêtes ne sont pas toujours suffisantes, voire impossibles à mettre en œuvre. Il existe un énorme potentiel inexploité pour extraire des informations précieuses de ces données et nous ne faisons que commencer !
"La plupart des données mondiales n'étant pas structurées, la possibilité de les analyser et d'agir sur elles représente une grande opportunité." - Mikey Shulman, responsable de la ML, Kensho
Les données non structurées, comme leur nom l'indique, n'ont pas de structure implicite, comme un tableau de lignes et de colonnes (d'où leur nom de données tabulaires ou structurées). Contrairement aux données structurées, il n'existe pas de moyen simple de stocker le contenu des données non structurées dans une base de données relationnelle. L'exploitation des données non structurées à des fins d'analyse est confrontée à trois grands défis :
- Le stockage : Les bases de données relationnelles classiques sont adaptées au stockage des données structurées. Bien que vous puissiez utiliser des bases de données NoSQL pour stocker ces données, le traitement de ces données pour en extraire les bonnes représentations afin d'alimenter les applications d'IA à grande échelle représente une charge supplémentaire.
- Représentation : Les ordinateurs ne comprennent pas le texte ou les images comme nous. Ils ne comprennent que les nombres et nous devons convertir les données non structurées en une représentation numérique utile, généralement des vecteurs ou des encastrements.
- Interrogation : Il n'est pas possible d'interroger des données non structurées directement sur la base d'instructions conditionnelles définies, comme le fait SQL pour les données structurées. Imaginez, par exemple, que vous essayiez de rechercher des chaussures similaires à partir d'une photo de votre paire de chaussures préférée ! Vous ne pouvez pas utiliser les valeurs brutes des pixels pour la recherche, ni représenter des caractéristiques structurées telles que la forme, la taille, le style, la couleur des chaussures, etc. Imaginez maintenant que vous deviez faire cela pour des millions de chaussures !
Par conséquent, pour que les ordinateurs puissent comprendre, traiter et représenter des données non structurées, nous les convertissons généralement en vecteurs denses, souvent appelés "embeddings".
figure 1
Il existe une variété de méthodologies tirant particulièrement parti de l'apprentissage profond, notamment les réseaux neuronaux convolutifs (CNN) pour les données visuelles telles que les images et les transformateurs pour les données textuelles, qui peuvent être utilisés pour transformer de telles données non structurées en embeddings. Zilliz a publié un excellent article couvrant les différentes techniques d'intégration!
Il ne suffit pas de stocker ces vecteurs d'intégration. Il faut également être en mesure d'interroger et de trouver des vecteurs similaires. Pourquoi ? Une majorité d'applications réelles sont alimentées par la recherche de similarités vectorielles pour les solutions basées sur l'IA. Il s'agit notamment de la recherche visuelle (image) dans Google, des systèmes de recommandation dans Netflix ou Amazon, des moteurs de recherche textuelle dans Google, de la recherche multimodale, de la déduplication des données et de bien d'autres choses encore !
Stocker, gérer et interroger des vecteurs à grande échelle n'est pas une tâche simple. Vous avez besoin d'outils spécialisés pour cela et les bases de données vectorielles sont l'outil le plus efficace pour ce travail ! Dans cet article, nous aborderons les aspects suivants :
- Vecteurs et recherche de similarité vectorielle
- Qu'est-ce qu'une base de données vectorielle ?
- Milvus - La base de données vectorielles la plus avancée au monde
- Effectuer une recherche visuelle d'images avec Milvus - Un exemple de cas d'utilisation
Commençons !
Vecteurs et recherche de similarité vectorielle
Plus tôt, nous avons établi la nécessité de représenter les données non structurées telles que les images et le texte sous forme de vecteurs, car les ordinateurs ne peuvent comprendre que des nombres. Nous utilisons généralement des modèles d'IA, plus précisément des modèles d'apprentissage profond, pour convertir les données non structurées en vecteurs numériques qui peuvent être lus par les machines. En règle générale, ces vecteurs sont une liste de nombres à virgule flottante qui représentent collectivement l'élément sous-jacent (image, texte, etc.).
Comprendre les vecteurs
Dans le domaine du traitement du langage naturel (NLP), nous disposons de nombreux modèles d'intégration de mots, tels que Word2Vec, GloVe et FastText, qui permettent de représenter les mots sous forme de vecteurs numériques. Avec le temps, nous avons vu apparaître des modèles de transformation tels que BERT, qui peuvent être exploités pour apprendre des vecteurs d'intégration contextuels et de meilleures représentations pour des phrases et des paragraphes entiers.
De même, dans le domaine de la vision par ordinateur, nous disposons de modèles tels que les réseaux neuronaux convolutifs (CNN) qui peuvent aider à apprendre des représentations à partir de données visuelles telles que des images et des vidéos. Avec l'essor des transformateurs, nous avons également des transformateurs de vision qui peuvent être plus performants que les CNN classiques.
figure 2
L'avantage de ces vecteurs est qu'ils peuvent être utilisés pour résoudre des problèmes réels tels que la recherche visuelle, où vous téléchargez généralement une photo et obtenez des résultats de recherche comprenant des images visuellement similaires. C'est une fonction très populaire du moteur de recherche de Google, comme le montre l'exemple suivant.
figure 3
Ces applications sont alimentées par des vecteurs de données et la recherche de similarités vectorielles. Si vous considérez deux points dans un espace de coordonnées cartésiennes X-Y, la distance entre ces deux points peut être calculée. La distance entre deux points peut être calculée comme une simple distance euclidienne décrite par l'équation suivante.
figure 4
Imaginons maintenant que chaque point de données soit un vecteur de dimension D. Vous pouvez toujours utiliser la distance euclidienne ou même d'autres mesures de distance telles que la distance de hamming ou la distance cosinus pour déterminer à quel point les deux points de données sont proches l'un de l'autre. Cela peut aider à construire une notion de proximité ou de similarité qui pourrait être utilisée comme une métrique quantifiable pour trouver des éléments similaires à partir d'un élément de référence en utilisant leurs vecteurs.
Comprendre la recherche de similarité vectorielle
La recherche de similarité vectorielle, souvent connue sous le nom de recherche du plus proche voisin (NN), consiste essentiellement à calculer la similarité par paire (ou les distances) entre un élément de référence (pour lequel nous voulons trouver des éléments similaires) et une collection d'éléments existants (généralement dans une base de données) et à renvoyer les "k" plus proches voisins qui sont les "k" éléments les plus similaires. L'élément clé pour calculer cette similarité est la métrique de similarité, qui peut être la distance euclidienne, le produit intérieur, la distance cosinus, la distance de Hamming, etc. Plus la distance est faible, plus les vecteurs sont similaires.
Le problème de la recherche exacte du plus proche voisin (NN) est l'extensibilité. Vous devez calculer N distances (en supposant qu'il y ait N éléments existants) à chaque fois pour obtenir des éléments similaires. Cela peut être très lent, surtout si vous ne stockez pas et n'indexez pas les données quelque part (comme une base de données vectorielle !). Pour accélérer le calcul, nous utilisons généralement la recherche approximative du plus proche voisin, souvent appelée recherche ANN, qui permet de stocker les vecteurs dans un index. L'index permet de stocker ces vecteurs de manière intelligente afin de pouvoir retrouver rapidement des voisins "approximativement" similaires pour un élément de référence. Les méthodologies typiques d'indexation ANN sont les suivantes
- Transformations vectorielles : Il s'agit d'ajouter des transformations supplémentaires aux vecteurs, telles que la réduction des dimensions (par exemple PCA \ t-SNE), la rotation, etc.
- Encodage des vecteurs : Il s'agit d'appliquer des techniques basées sur des structures de données telles que le hachage sensible à la localité (LSH), la quantification, les arbres, etc. qui peuvent aider à retrouver plus rapidement des éléments similaires.
- Méthodes de recherche non exhaustive : Elles sont principalement utilisées pour empêcher la recherche exhaustive et comprennent des méthodes telles que les graphes de voisinage, les indices inversés, etc.
Pour créer une application de recherche de similarités vectorielles, il faut donc une base de données capable de stocker, d'indexer et d'interroger (recherche) efficacement et à grande échelle. Voici les bases de données vectorielles !
Qu'est-ce qu'une base de données vectorielle ?
Étant donné que nous comprenons maintenant comment les vecteurs peuvent être utilisés pour représenter des données non structurées et comment fonctionne la recherche vectorielle, nous pouvons combiner ces deux concepts pour construire une base de données vectorielle.
Les bases de données vectorielles sont des plateformes de données évolutives permettant de stocker, d'indexer et d'interroger des vecteurs d'intégration générés à partir de données non structurées (images, textes, etc.) à l'aide de modèles d'apprentissage profond.
Le traitement d'un nombre massif de vecteurs pour la recherche de similarités (même avec des index) peut s'avérer très coûteux. Malgré cela, les bases de données vectorielles les meilleures et les plus avancées devraient vous permettre d'insérer, d'indexer et de rechercher des millions ou des milliards de vecteurs cibles, en plus de spécifier un algorithme d'indexation et une métrique de similarité de votre choix.
Les bases de données vectorielles doivent principalement répondre aux exigences clés suivantes pour un système de gestion de base de données robuste à utiliser dans l'entreprise :
- Évolutivité : Les bases de données vectorielles doivent être capables d'indexer et d'exécuter une recherche approximative du plus proche voisin pour des milliards de vecteurs d'intégration.
- Fiable : Les bases de données vectorielles doivent être capables de gérer les défaillances internes sans perte de données et avec un impact opérationnel minimal, c'est-à-dire qu'elles doivent être tolérantes aux défaillances.
- Rapides : Les vitesses d'interrogation et d'écriture sont importantes pour les bases de données vectorielles. Pour des plateformes telles que Snapchat et Instagram, qui peuvent avoir des centaines ou des milliers de nouvelles images téléchargées par seconde, la vitesse devient un facteur incroyablement important.
Les bases de données vectorielles ne se contentent pas de stocker des vecteurs de données. Elles sont également responsables de l'utilisation de structures de données efficaces pour indexer ces vecteurs en vue d'une récupération rapide et de la prise en charge des opérations CRUD (création, lecture, mise à jour et suppression). Idéalement, les bases de données vectorielles devraient également prendre en charge le filtrage d'attributs, c'est-à-dire le filtrage basé sur des champs de métadonnées qui sont généralement des champs scalaires. Un exemple simple serait de retrouver des chaussures similaires en se basant sur les vecteurs d'images d'une marque spécifique. La marque serait l'attribut sur lequel le filtrage serait effectué.
figure 5
La figure ci-dessus montre comment Milvus, la base de données vectorielles dont nous parlerons bientôt, utilise le filtrage par attributs. Milvus introduit le concept de masque de bits dans le mécanisme de filtrage afin de conserver les vecteurs similaires avec un masque de bits de 1 en fonction de la satisfaction de filtres d'attributs spécifiques. Plus de détails à ce sujet ici.
Milvus - La base de données vectorielles la plus avancée au monde
Milvus est une plateforme de gestion de base de données vectorielles open-source conçue spécifiquement pour les données vectorielles massives et la rationalisation des opérations d'apprentissage automatique (MLOps).
chiffre 6
Zilliz est l'organisation qui a créé Milvus, la base de données vectorielles la plus avancée au monde, afin d'accélérer le développement de la prochaine génération de tissus de données. Milvus est actuellement un projet de fin d'études à la LF AI & Data Foundation et se concentre sur la gestion d'énormes ensembles de données non structurées pour le stockage et la recherche. L'efficacité et la fiabilité de la plateforme simplifient le processus de déploiement de modèles d'IA et de MLOps à grande échelle. Milvus a de vastes applications couvrant la découverte de médicaments, la vision par ordinateur, les systèmes de recommandation, les chatbots, et bien plus encore.
Principales caractéristiques de Milvus
Milvus est doté de nombreuses fonctionnalités et capacités utiles, telles que :
- Des vitesses de recherche fulgurantes sur un trillion d'ensembles de données vectorielles : La latence moyenne de la recherche et de l'extraction vectorielles a été mesurée en millisecondes sur un trillion d'ensembles de données vectorielles.
- Gestion simplifiée des données non structurées : Milvus dispose d'API riches conçues pour les flux de travail de la science des données.
- Base de données vectorielles fiable et toujours active : Les fonctions intégrées de réplication et de basculement/failback de Milvus garantissent la continuité des données et des applications à tout moment.
- Hautement évolutive et élastique : L'évolutivité au niveau des composants permet d'augmenter ou de réduire la taille de la base de données à la demande.
- Recherche hybride : Outre les vecteurs, Milvus prend en charge des types de données tels que les booléens, les chaînes, les entiers, les nombres à virgule flottante, etc. Milvus associe le filtrage scalaire à une puissante recherche de similarité vectorielle (comme le montre l'exemple de similarité de chaussures présenté plus haut).
- Structure Lambda unifiée : Milvus combine le traitement en flux et le traitement par lots pour le stockage des données afin d'équilibrer la rapidité et l'efficacité.
- Voyage dans le temps: Milvus maintient une chronologie pour toutes les opérations d'insertion et de suppression de données. Il permet aux utilisateurs de spécifier des horodatages dans une recherche pour récupérer une vue de données à un moment précis.
- Soutenu par la communauté et reconnu par l'industrie : Avec plus de 1 000 entreprises utilisatrices, plus de 10,5K étoiles sur GitHub et une communauté open-source active, vous n'êtes pas seul lorsque vous utilisez Milvus. En tant que projet diplômé de la LF AI & Data Foundation, Milvus bénéficie d'un soutien institutionnel.
Approches existantes de la gestion et de la recherche de données vectorielles
Une façon courante de construire un système d'IA alimenté par la recherche de similarités vectorielles est de coupler des algorithmes comme Approximate Nearest Neighbor Search (ANNS) avec des bibliothèques open-source telles que :
- Facebook AI Similarity Search (FAISS): Ce cadre permet une recherche de similarité efficace et le regroupement de vecteurs denses. Il contient des algorithmes qui recherchent dans des ensembles de vecteurs de toute taille, jusqu'à ceux qui ne tiennent pas dans la mémoire vive. Il prend en charge des capacités d'indexation telles que le multi-index inversé et la quantification des produits.
- Spotify's Annoy (Approximate Nearest Neighbors Oh Yeah): Ce cadre utilise des projections aléatoires et construit un arbre pour permettre l'ANNS à l'échelle pour les vecteurs denses.
- ScaNN (Scalable Nearest Neighbors) de Google: Ce cadre effectue une recherche de similarité vectorielle efficace à l'échelle. Il se compose d'implémentations qui incluent l'élagage de l'espace de recherche et la quantification pour la recherche du produit intérieur maximal (MIPS).
Bien que chacune de ces bibliothèques soit utile à sa manière, en raison de plusieurs limitations, ces combinaisons algorithme-bibliothèque ne sont pas équivalentes à un système de gestion de données vectorielles à part entière comme Milvus. Nous allons maintenant examiner certaines de ces limitations.
Limites des approches existantes
Les approches existantes utilisées pour la gestion des données vectorielles, comme indiqué dans la section précédente, présentent les limites suivantes :
- Flexibilité : Les systèmes existants stockent généralement toutes les données dans la mémoire principale. Ils ne peuvent donc pas être exécutés facilement en mode distribué sur plusieurs machines et ne sont pas adaptés au traitement d'ensembles de données volumineux.
- Traitement dynamique des données : Les données sont souvent considérées comme statiques une fois introduites dans les systèmes existants, ce qui complique le traitement des données dynamiques et rend impossible la recherche en temps quasi réel.
- Traitement avancé des requêtes : La plupart des outils ne prennent pas en charge le traitement avancé des requêtes (par exemple, le filtrage des attributs, la recherche hybride et les requêtes multi-vectorielles), ce qui est essentiel pour construire des moteurs de recherche par similarité dans le monde réel prenant en charge le filtrage avancé.
- Optimisations informatiques hétérogènes : Peu de plateformes offrent des optimisations pour les architectures de systèmes hétérogènes à la fois sur les CPU et les GPU (à l'exception de FAISS), ce qui entraîne des pertes d'efficacité.
Milvus tente de surmonter toutes ces limitations et nous en discuterons en détail dans la section suivante.
L'avantage Milvus - Comprendre Knowhere
Milvus tente de s'attaquer et de résoudre avec succès les limites des systèmes existants basés sur des algorithmes inefficaces de gestion des données vectorielles et de recherche de similitudes de la manière suivante :
- Il améliore la flexibilité en offrant un support pour une variété d'interfaces d'application (y compris des SDK en Python, Java, Go, C++ et des API RESTful).
- Il prend en charge plusieurs types d'index vectoriels (par exemple, les index basés sur la quantification et les index basés sur les graphes), ainsi qu'un traitement avancé des requêtes.
- Milvus traite les données vectorielles dynamiques à l'aide d'un arbre de fusion log-structuré (arbre LSM), ce qui permet de conserver des insertions et des suppressions de données efficaces et des recherches en temps réel.
- Milvus fournit également des optimisations pour les architectures informatiques hétérogènes sur les CPU et GPU modernes, ce qui permet aux développeurs d'adapter les systèmes à des scénarios, des ensembles de données et des environnements d'application spécifiques.
Knowhere, le moteur d'exécution vectorielle de Milvus, est une interface d'exploitation permettant d'accéder aux services dans les couches supérieures du système et aux bibliothèques de recherche de similarités vectorielles telles que Faiss, Hnswlib, Annoy dans les couches inférieures du système. En outre, Knowhere est également responsable de l'informatique hétérogène. Knowhere contrôle sur quel matériel (par exemple, CPU ou GPU) sont exécutées les requêtes de construction d'index et de recherche. C'est ainsi que Knowhere tire son nom - savoir où exécuter les opérations. D'autres types de matériel, notamment les DPU et TPU, seront pris en charge dans les prochaines versions.
figure 7
Le calcul dans Milvus implique principalement des opérations vectorielles et scalaires. Knowhere ne gère que les opérations sur les vecteurs dans Milvus. La figure ci-dessus illustre l'architecture de Knowhere dans Milvus. La couche inférieure est le matériel du système. Les bibliothèques d'indexation tierces se trouvent au-dessus du matériel. Knowhere interagit ensuite avec le nœud d'index et le nœud de requête au sommet par l'intermédiaire de CGO. Knowhere ne se contente pas d'étendre les fonctions de Faiss, il optimise également les performances et présente plusieurs avantages, notamment la prise en charge de BitsetView, la prise en charge d'un plus grand nombre de mesures de similarité, la prise en charge du jeu d'instructions AVX512, la sélection automatique des instructions SIMD et d'autres optimisations des performances. Les détails sont disponibles ici.
Architecture de Milvus
La figure suivante présente l'architecture globale de la plate-forme Milvus. Milvus sépare le flux de données du flux de contrôle et est divisé en quatre couches indépendantes en termes d'évolutivité et de reprise après sinistre.
figure 8
- Couche d'accès : La couche d'accès est composée d'un groupe de proxies sans état et sert de couche frontale du système et de point final pour les utilisateurs.
- Service de coordination : Le service de coordination est responsable de la gestion des nœuds de la topologie de la grappe, de l'équilibrage de la charge, de la génération de l'horodatage, de la déclaration des données et de la gestion des données.
- Nœuds de travail : Le nœud de travailleur, ou nœud d'exécution, exécute les instructions émises par le service coordinateur et les commandes de langage de manipulation de données (DML) lancées par le proxy. Un nœud de travailleur dans Milvus est similaire à un nœud de données dans Hadoop ou à un serveur de région dans HBase.
- Stockage : Il s'agit de la pierre angulaire de Milvus, responsable de la persistance des données. La couche de stockage se compose d'un méta-magasin, d'un courtier de journaux et d'un stockage d'objets.
Pour plus de détails sur l'architecture , cliquez ici!
Effectuer une recherche d'images visuelles avec Milvus - Un exemple de cas d'utilisation
Les bases de données vectorielles open-source comme Milvus permettent à toute entreprise de créer son propre système de recherche d'images visuelles en un minimum d'étapes. Les développeurs peuvent utiliser des modèles d'IA pré-entraînés pour convertir leurs propres ensembles de données d'images en vecteurs, puis exploiter Milvus pour permettre la recherche de produits similaires par image. Examinons le schéma suivant qui montre comment concevoir et construire un tel système.
figure 9
Dans ce flux de travail, nous pouvons utiliser un framework open-source comme towhee pour exploiter un modèle pré-entraîné comme ResNet-50 et extraire des vecteurs à partir d'images, stocker et indexer ces vecteurs facilement dans Milvus et également stocker une correspondance entre les ID d'images et les images réelles dans une base de données MySQL. Une fois les données indexées, nous pouvons télécharger facilement toute nouvelle image et effectuer des recherches d'images à grande échelle à l'aide de Milvus. La figure suivante montre un exemple de recherche visuelle d'images.
figure 10
Consultez le tutoriel détaillé qui a été mis à disposition sur GitHub grâce à Milvus.
Conclusion
Nous avons abordé un grand nombre de sujets dans cet article. Nous avons commencé par les défis posés par la représentation des données non structurées, l'exploitation des vecteurs et la recherche de similarité vectorielle à l'échelle avec Milvus, une base de données vectorielle open-source. Nous avons discuté des détails de la structure de Milvus et des composants clés qui l'alimentent, ainsi que de la façon de résoudre un problème réel, la recherche d'images visuelles avec Milvus. Essayez-le et commencez à résoudre vos propres problèmes du monde réel avec Milvus!
Cet article vous a plu ? N'hésitez pas à me contacter pour en discuter davantage ou pour me faire part de vos commentaires !
À propos de l'auteur
Dipanjan (DJ) Sarkar est Data Science Lead, Google Developer Expert - Machine Learning, auteur, consultant et conseiller en IA. Connexion : http://bit.ly/djs_linkedin
- Introduction
- Vecteurs et recherche de similarité vectorielle
- Qu'est-ce qu'une base de données vectorielle ?
- Milvus - La base de données vectorielles la plus avancée au monde
- Effectuer une recherche d'images visuelles avec Milvus - Un exemple de cas d'utilisation
- Conclusion
- À propos de l'auteur
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