Définition de la base de données vectorielle

Une base de données vectorielle est une base de données qui stocke des informations sous forme de vecteurs, c'est-à-dire des représentations numériques d'objets de données, qu'on appelle aussi "plongements vectoriels". Elle tire parti de la puissance de ces plongements vectoriels pour indexer un ensemble volumineux de données non structurées et de données semi-structurées, comme les images, les textes ou les données de capteur, et pour y faire des recherches. Les bases de données vectorielles sont conçues pour gérer les plongements vectoriels, et ainsi offrir une solution complète pour la gestion des données non structurées et semi-structurées.

Une base de données vectorielle est différente d'une bibliothèque de recherche vectorielle ou d'un index vectoriel : il s'agit d'une solution de gestion des données qui permet de stocker les métadonnées et d'y appliquer un filtre. En outre, elle est scalable, elle permet d'apporter des changements aux données de manière dynamique, elle effectue des sauvegardes et elle offre des fonctionnalités de sécurité.

Une base de données vectorielle organise les données selon des vecteurs à haute dimensionnalité. Les vecteurs à haute dimensionnalité contiennent des centaines de dimensions, qui correspondent chacune à une fonctionnalité ou à une propriété spécifique de l'objet de données qu'elles représentent.

Que sont les plongements vectoriels ?

Les plongements vectoriels sont une représentation numérique d'un sujet, d'un mot, d'une image ou de tout autre élément de donnée. Les plongements vectoriels, ou plongements, sont générés par de grands modèles de langage et d'autres modèles d'IA.

C'est à partir de la distance qui sépare deux plongements vectoriels qu'une base de données vectorielle, ou moteur de recherche vectoriel, peut déterminer la similarité entre deux vecteurs. Les distances peuvent représenter plusieurs dimensions des objets de données, ce qui permet au Machine Learning et à l'IA de comprendre les schémas, les relations et les structures sous-jacentes.

Découvrir comment déployer les plongements textuels

Comment fonctionne une base de données vectorielle ?

Une base de données vectorielle se sert d'algorithmes pour indexer et interroger les plongements vectoriels. Les algorithmes permettent de rechercher le plus proche voisin approximatif (ANN) grâce au hachage, à la quantification ou à la recherche basée sur des graphes.

Pour récupérer des informations, une recherche d'ANN détermine le plus proche voisin vectoriel d'une requête. Même si la recherche du plus proche voisin approximatif demande moins de ressources de calcul qu'une recherche kNN (plus proche voisin connu, ou k plus proches voisins), elle est aussi moins précise. Toutefois, elle est efficace et fonctionne à grande échelle pour les ensembles de données volumineux de vecteurs à haute dimensionnalité.

Voici un exemple de pipeline d'une base de données vectorielle :

Diagram of how a vector search engine works using vector embeddings

  1. Indexation : à l'aide du hachage, de la quantification ou des techniques basées sur les graphes, une base de données vectorielle indexe les vecteurs en les mappant à une structure de données spécifique. La recherche s'en trouve ainsi accélérée.

    • Hachage : un algorithme de hachage, comme l'algorithme Locality-Sensitive Hashing (LSH), est celui qui convient le mieux dans le cadre d'une recherche du plus proche voisin approximatif, car il fournit des résultats approximatifs rapides. Le LSH s'appuie sur des tableaux de hachage pour mapper les plus proches voisins (un peu à la manière d'un sudoku). Une requête sera hachée en tableau, puis comparée à un ensemble de vecteurs dans le même tableau afin de déterminer la similarité.
    • Quantification : une technique de quantification, comme la quantification de produit (PQ), décomposera les vecteurs en plus petites pièces, qu'elle représentera avec du code, avant de les réassembler. Le résultat obtenu est une représentation sous forme de code d'un vecteur et de ses composants. L'ensemble de ces codes constitue ce qu'on appelle un livre de codes. Pour répondre à une requête qui lui est soumise, une base de données vectorielle qui applique la quantification décomposera cette requête en code, puis la confrontera au livre de codes pour déterminer le code le plus proche et ainsi générer des résultats.
    • Technique basée sur des graphes : un algorithme basé sur des graphes, comme l'algorithme Hierarchical Navigable Small World (HNSW), utilise des nœuds pour représenter les vecteurs. Il regroupe les nœuds et trace des lignes ou des bords entre les nœuds similaires, créant ainsi des graphes hiérarchiques. Lorsqu'une requête est lancée, l'algorithme accède à la hiérarchie des graphes pour déterminer les nœuds qui contiennent les vecteurs qui s'apparentent le plus à celui de la requête.

    Une base de données vectorielle indexera également les métadonnées d'un objet de données. C'est pourquoi une base de données vectorielle contiendra deux index : un index vectoriel et un index de métadonnées.

     

  2. Requête : lorsqu'une base de données vectorielle reçoit une requête, elle compare les vecteurs indexés à celui de la requête pour déterminer les plus proches voisins vectoriels. Pour cela, la base de données vectorielle s'appuie sur des méthodes mathématiques appelées mesures de similarité. Il existe différents types de mesures de similarité :

    • La similarité cosinus établit la similarité sur une plage allant de -1 à 1. En mesurant le cosinus de l'angle entre deux vecteurs dans un espace vectoriel, elle détermine les vecteurs qui sont diamétralement opposés (représentés par la valeur -1), orthogonaux (valeur 0) ou identiques (valeur 1).
    • La distance euclidienne détermine la similarité sur une plage allant de 0 à l'infini en mesurant la distance linéaire entre deux vecteurs. Des vecteurs identiques sont représentés par la valeur 0. Plus la distance linéaire est grande entre deux vecteurs, plus ils sont différents.
    • Les mesures de similarité par produit scalaire déterminent la similarité vectorielle sur une plage allant de moins l'infini à plus l'infini. En mesurant le produit de l'ampleur de deux vecteurs et le cosinus de l'angle entre eux, le produit scalaire attribue des valeurs négatives aux vecteurs qui pointent dans des directions différentes, une valeur nulle pour les vecteurs orthogonaux et des valeurs positives pour les vecteurs qui pointent dans la même direction.
  3. Post-traitement : l'étape finale dans un pipeline de base de données vectorielle est parfois le post-traitement, ou le post-filtrage, lors duquel la base de données vectorielle utilise une mesure de similarité différente pour reclasser les plus proches voisins. À ce stade, la base de données filtrera les plus proches voisins de la requête identifiés lors de la recherche d'après leurs métadonnées.

    Certaines bases de données vectorielles peuvent appliquer des filtres avant d'effectuer une recherche vectorielle. Dans ce cas, on parle de pré-traitement ou de pré-filtrage.

En quoi les bases de données vectorielles sont-elles importantes ?

Les bases de données vectorielles sont importantes car elles utilisent les plongements vectoriels et proposent différentes capacités, comme l'indexation, les indicateurs de distance et la recherche de similarité. En d'autres termes, les bases de données vectorielles sont très utiles pour la gestion des données non structurées et des données semi-structurées. Elles représentent donc un outil précieux dans le domaine du Machine Learning et de l'IA.

Principaux composants des bases de données vectorielles

Une base de données vectorielle peut avoir les principaux composants suivants :

  • Performances et tolérance aux pannes : grâce au partitionnement et à la réplication, une base de données vectorielle est performante et tolérante aux pannes. Le partitionnement implique de partitionner les données sur plusieurs nœuds, tandis que la réplication consiste à effectuer plusieurs copies des données sur différents nœuds. Cela permet de bénéficier d'une tolérance aux pannes et d'assurer la continuité des performances dans le cas où un nœud échoue.
  • Capacités de monitoring : pour assurer les performances et la tolérance aux pannes, une base de données vectorielle a besoin de monitorer l'utilisation des ressources, les performances des requêtes et l'intégrité générale du système.
  • Capacités de contrôle d'accès : les bases de données vectorielles nécessitent également une gestion de la sécurité des données. La réglementation en matière de contrôle d'accès assure la conformité, la responsabilisation et la capacité à vérifier l'utilisation de la base de données. Cela signifie également que les données sont protégées : elles sont consultées uniquement par les personnes qui disposent des autorisations requises. De plus, un enregistrement de l'activité des utilisateurs est conservé.
  • Scalabilité et faculté d'adaptation : de bonnes capacités de contrôle d'accès ont un impact sur la scalabilité et la faculté d'adaptation d'une base de données vectorielle. Avec l'augmentation du volume de données stockées, il est impératif de pouvoir scaler horizontalement. Les différents taux d'insertion et de requête, ainsi que les différences dans le matériel sous-jacent, ont une incidence sur les besoins des applications.
  • Multiplicité d'utilisateurs et isolation des données : en marge des capacités de scalabilité et de contrôle d'accès aux données, une base de données vectorielle doit pouvoir accueillir plusieurs utilisateurs ou plusieurs locataires. Dans cette optique, elle doit permettre d'isoler les données, afin que les activités d'un utilisateur (p. ex. insertions, suppressions, requêtes) restent confidentielles, sauf s'il est nécessaire de procéder autrement.
  • Sauvegardes : les bases de données vectorielles créent régulièrement des sauvegardes de données. Ces sauvegardes jouent un rôle clé en cas de dysfonctionnement d'un système. Par exemple, si des données sont perdues ou corrompues, les sauvegardes peuvent aider à restaurer les bases de données sur une version précédente. Cela permet de réduire les indisponibilités.
  • API et SDK : une base de données vectorielle se sert d'API pour proposer une interface utilisateur conviviale. Une API est une interface de programmation d'applications, ou un type de logiciel, qui permet aux applications de "discuter" les unes avec les autres par l'intermédiaire des requêtes et des réponses. Les couches d'API simplifient l'expérience de recherche vectorielle. Les SDK, ou kits de développement logiciel, englobent souvent les API. Ils constituent les langages de programmation dont la base de données se sert pour communiquer et pour gérer tout ce qu'il y a à gérer. Les SDK contribuent à rendre l'expérience des développeurs agréable lorsqu'ils utilisent les bases de données vectorielles, car ils n'ont pas besoin de s'occuper de la structure sous-jacente lorsqu'ils élaborent des cas d'utilisation spécifiques (recherche sémantique, systèmes de recommandation, etc.).

Quelle est la différence entre une base de données vectorielle et une base de données traditionnelle ?

Une base de données traditionnelle stocke les informations sous forme tabulaire. Elle indexe les données en attribuant une valeur aux points de données. Lorsqu'on interroge une base de données traditionnelle, celle-ci renvoie des résultats qui correspondent avec exactitude à la requête.

Une base de données vectorielle stocke des vecteurs sous la forme de plongements et permet d'effectuer une recherche vectorielle. Cette recherche renvoie des résultats qui se basent sur des indicateurs de similarité (et non des correspondances exactes). Une base de données vectorielle va plus loin qu'une base de données traditionnelle : elle est conçue pour opérer avec des plongements vectoriels.

Une base de données vectorielle est plus adaptée qu'une base de données traditionnelle dans certaines applications, comme la recherche de similarités, l'intelligence artificielle ou encore le Machine Learning. En effet, elle permet une recherche à haute dimensionnalité et une indexation personnalisée. Qui plus est, elle est scalable, flexible et efficace.

Applications des bases de données vectorielles

Les bases de données vectorielles sont utilisées dans les applications suivantes : IA, Machine Learning (ML), traitement du langage naturel (NLP) et reconnaissance d'images.

  • Applications pour l'IA et le ML : une base de données vectorielle peut améliorer les capacités de l'IA en matière de récupération des informations et de mémoire à long terme.
  • Applications pour le NLP : la recherche de similarité vectorielle, composante clé des bases de données vectorielles, est utile pour les applications de traitement du langage naturel. Une base de données vectorielle peut traiter les plongements textuels, ce qui permet à un ordinateur de "comprendre" le langage humain, ou naturel.
  • Applications pour la reconnaissance et la récupération d'images : les bases de données vectorielles transforment les images en plongements visuels. Avec la recherche de similarités, elles sont capables de récupérer des images similaires ou d'identifier les images correspondantes.

Les bases de données vectorielles peuvent également servir pour la détection des anomalies et la reconnaissance faciale.

La base de données vectorielle d'Elasticsearch

Elasticsearch inclut une base de données vectorielle pour permettre d'effectuer une recherche vectorielle. Grâce à Elasticsearch Relevance Engine (ESRE), les développeurs peuvent construire leurs propres moteurs de recherche vectorielle.

Avec les outils d'Elasticsearch, vous pouvez élaborer un moteur de recherche vectorielle capable de faire des recherches sur les données structurées et non structurées, d'appliquer des filtres et la recherche à facettes, d'effectuer une recherche hybride sur les données textuelles et vectorielles, ainsi que d'appliquer la sécurité au niveau des documents et des champs. De plus, vous pouvez exécuter ce moteur dans des environnements sur site, dans le cloud ou hybrides.

Découvrir la base de données vectorielle d'Elasticsearch

Notes

1 Gu, Huaping. "Unleashing the Power of Vectors: Embeddings and Vector Databases - Linkedin." LinkedIn, 2 avril 2023, www.linkedin.com/pulse/unleashing-power-vectors-embeddings-vector-databases-huaping-gu