Aller au contenu principal

Rechercher sur CooLWJ

选择搜索范围,输入关键词后按回车。

Langue

Qu’est-ce qu’une base de données vectorielle ?

I、Le cycle complet des applications métier des grands modèles

1.png

  1. Construction de clusters d’IA : infrastructures de calcul, de communication et de stockage

  2. Données pour grands modèles : jeux de données, traitement des données, bases de données vectorielles

  3. Algorithmes des grands modèles:du NLP traditionnel aux grands modèles de langage préentraînés(LLM)

  4. Entraînement des grands modèles : méthodes algorithmiques courantes et analyse de la stabilité de l’entraînement des grands modèles

  5. Parallélisme distribué : parallélisme de modèle, de données, d’optimiseur, etc.

  6. Ajustement fin des grands modèles : algorithmes d’ajustement de tous les paramètres, d’ajustement d’un nombre réduit de paramètres et d’ajustement sur instructions

  7. Inférence des grands modèles : compression par quantification, extension de l’inférence aux longues séquences, méthodes de cache

  8. Évaluation des grands modèles : tâches en aval en NLP, tâches en aval en CV, protocoles d’évaluation

  9. Agents fondés sur de grands modèles : processus RLHF, agents, apprentissage tout au long de la vie

II、Vecteurs

Les personnes qui connaissent bien les chiens peuvent rapidement distinguer leurs races. Nous y parvenons parce que nous observons leurs caractéristiques sous différents angles, comme leur taille.
2.pngSi nous utilisons un axe de coordonnées pour représenter leur taille, ces chiens se situeront à des positions différentes. Cependant, se fonder uniquement sur la taille ne suffit pas, car certains ont des gabarits très proches.
3.pngObservons ensuite leurs caractéristiques, par exemple la longueur du pelage, puis ajoutons un axe de coordonnées ; cela permet de distinguer une partie des chiens de même taille
4.pngMais une partie se chevauche encore ; il faut donc poursuivre l’observation sous d’autres angles, par exemple la longueur du nez.
5.pngNous pouvons aussi ajouter d’autres dimensions, comme la taille des yeux. Nous ne pouvons pas tracer de graphique dans un espace à quatre dimensions, mais c’est très facile à réaliser dans les valeurs des coordonnées : il suffit de continuer à ajouter des valeurs à la suite.
6.pngNous pouvons aussi observer les caractéristiques d’un chien sous davantage d’angles, ou de dimensions, comme l’épaisseur de ses pattes, les boucles de son pelage, voire sous des angles abstraits, comme son obéissance ou son utilité pratique. Plus nous utilisons de dimensions, plus nous sommes capables de distinguer les chiens. L’espace dans lequel se trouvent les points de coordonnées possède alors lui aussi davantage de dimensions.
7.pngCela ne concerne pas seulement les chiens : en réalité, presque toute chose peut être représentée ainsi. Il peut s’agir de choses concrètes, mais aussi de réalités abstraites : joie, colère, tristesse, bonheur, chagrins et retrouvailles, séparations et unions. Les choses présentent des caractéristiques, ou des valeurs, différentes selon les dimensions considérées ; chacune finit donc par correspondre à un point dans un espace de caractéristiques de grande dimension. Simplement, lorsque le champ considéré s’élargit, nous pouvons avoir besoin de davantage de dimensions pour bien distinguer les choses. Peut-être plusieurs centaines ou plusieurs milliers, voire des dizaines de milliers.
8.pngCependant, comme nous ne pouvons pas réaliser de graphiques au-delà de trois dimensions, nous utiliserons des coordonnées à deux dimensions pour l’explication.
9.pngNous constatons que les points correspondant à des concepts proches se regroupent davantage dans l’espace, tandis que ceux correspondant à des concepts très différents sont très éloignés. Allons plus loin : si l’on prend l’origine du repère comme point de départ et ces points comme extrémités, on obtient des vecteurs, dotés d’une direction et d’une norme.

Si l’on représente les images par des vecteurs, la recherche de vecteurs similaires permet de réaliser une recherche par image
En vectorisant les vidéos, on peut recommander des vidéos similaires en recherchant des vecteurs proches
En représentant les produits sous forme de vecteurs et en recherchant des vecteurs similaires, on peut proposer des recommandations pertinentes à partir du produit que l’utilisateur consulte actuellement
En vectorisant les textes, un système intelligent de questions-réponses peut retrouver, à partir de la question actuelle de l’utilisateur, des questions similaires déjà résolues afin de servir de référence

III、Bases de données vectorielles

Avec l’arrivée de l’IA, les vecteurs vont devenir une forme de données importante. Or les bases de données traditionnelles sont mal adaptées au stockage et à la recherche de données vectorielles ; une base spécialement conçue est donc nécessaire pour résoudre ces problèmes et pourrait devenir une infrastructure fondamentale de la gestion des données. Contrairement aux bases traditionnelles, qui stockent des tables et effectuent des recherches exactes à l’aide de requêtes, les bases vectorielles stockent des données vectorielles. La recherche consiste à y trouver les vecteurs les plus similaires au vecteur de requête, et comporte donc une certaine approximation.

Schéma de points de données vectorielles dans un espace à trois dimensions

1、Recherche vectorielle

L’un des principaux usages des données vectorielles consiste, à partir d’un vecteur de requête, à trouver parmi un grand nombre de vecteurs ceux qui lui ressemblent le plus. C’est ce qu’on appelle le problème des plus proches voisins, résolu par des algorithmes de recherche des plus proches voisins. L’une des méthodes les plus évidentes est sans doute la recherche exhaustive : comparer successivement la similarité de tous les vecteurs avec le vecteur de requête, puis sélectionner ceux dont la similarité est la plus élevée. Il existe de nombreuses méthodes pour mesurer la similarité entre deux vecteurs,La distance euclidienne et la similarité cosinus.
10.png

  • La distance euclidienne correspond à la distance en ligne droite entre deux vecteurs. Dans un repère à deux dimensions, pour deux vecteurs p et q, elle mesure la longueur du segment reliant p à q. Dans un repère à trois dimensions, chaque vecteur comporte trois coordonnées x, y et z, et une formule permet de calculer la distance entre deux points quelconques. Dans un repère à n dimensions, il y a 100 coordonnées, et la formule permet de calculer la distance entre deux points quelconques. Plus cette distance est courte, plus les deux vecteurs sont similaires selon certaines dimensions
    11.png

  • Une autre méthode est la similarité cosinus. Outre la distance, nous pouvons décrire la relation entre les vecteurs par l’angle qui les sépare. Dans un repère à deux dimensions, plus cet angle est petit, plus les deux vecteurs sont corrélés. Une formule permet de calculer la similarité cosinus entre deux vecteurs quelconques. Dans un repère à trois dimensions, le même principe permet également de calculer l’angle et la similarité cosinus entre deux vecteurs quelconques.
    12.png
    Si les données vectorielles sont trop nombreuses, cette méthode par force brute, dépourvue de toute sophistication technique, entraînera un temps de recherche extrêmement élevé. La qualité de cette recherche est toutefois parfaite, puisqu’elle compare réellement chaque vecteur. Ainsi, si la base contient peu de données et que le temps nécessaire pour parcourir tous les vecteurs reste acceptable, cette méthode constitue aussi une bonne solution. Cependant, dans les applications réelles, le volume de données est généralement loin d’être négligeable ; il faut donc trouver des moyens d’optimiser la recherche.

2、Index vectoriel

Nous avons présenté plus haut le principe de recherche des bases de données vectorielles. Mais en pratique, pour y effectuer une recherche par similarité, on ne peut pas se contenter d’appliquer directement la formule, car ces bases contiennent généralement beaucoup de données et des vecteurs de très grande dimension. Calculer par la formule la similarité entre deux vecteurs de dimension 1000 représente une charge de calcul importante et sollicite fortement le CPU. Avec cent millions de vecteurs, si l’on doit effectuer ce calcul pour chacun d’eux, le temps nécessaire et le coût de calcul augmentent encore davantage. C’est pourquoi nous introduisons ici la notion d’index vectoriel.
Les index vectoriels ressemblent aux index des bases de données relationnelles, à une différence près. Dans une base de données vectorielle, les résultats trouvés grâce à un index vectoriel sont approximatifs, et non exacts à 100%.Un index vectoriel décrit le degré de similarité, élevé ou faible. C’est pourquoi nous appelons cela la recherche approximative du plus proche voisin(ANS). Sans index vectoriel, rechercher la similarité d’un vecteur revient à peu près à effectuer un parcours complet de table dans une base de données relationnelle. Mais il faut ajouter une couche de calcul à ce parcours complet, ce qui rend cette opération beaucoup plus coûteuse que dans une base de données relationnelle.
Selon leur mode d’implémentation, les index vectoriels ANNS se répartissent en quatre grandes catégories :

  • Index fondé sur un arbre

  • Index fondé sur un graphe

  • Index fondé sur le hachage

  • Index fondés sur la quantification

1、Méthodes fondées sur les arbres

L’idée principale des méthodes fondées sur des arbres consiste à partitionner les données, à la manière d’un arbre binaire de recherche, pour réduire l’espace à explorer lors d’une recherche et ainsi accélérer la récupération des résultats. Ces méthodes ne conviennent toutefois pas aux espaces de grande dimension. Les principales méthodes de ce type sont KDTree(K-Dimensional Tree)et Annoy(Approximate Nearest Neighbors Oh Yeah).
1.1 KDTree
La construction d’un KDTree repose également sur un partitionnement récursif. On choisit d’abord la dimension dont la variance est la plus élevée, puis on utilise la médiane de toutes les données sur cette dimension comme point de séparation pour découper la région hyperrectangulaire en deux sous-régions. Les valeurs inférieures à la médiane sont placées à gauche, et celles inférieures à la médiane à droite. Les sous-arbres gauche et droit sont construits récursivement jusqu’à ce que toutes les données aient été réparties.
13.png

Procédure de recherche fondée sur KDTree :
1、Pour la donnée recherchée p et la dimension de partition d du nœud courant, comparer la coordonnée de p dans la dimension d à la valeur du nœud ; si elle est supérieure, aller au nœud enfant gauche, et si elle est inférieure, au nœud enfant droit ;
2、Poursuivre le parcours jusqu’à un nœud feuille, le marquer comme visité et calculer la distance jusqu’à cette feuille comme distance minimale ;
3、Effectuer un retour arrière au niveau des nœuds feuilles et, à chaque retour, vérifier la distance entre p et les branches encore inexplorées du nœud parent.
a)Si la distance entre ce nœud de branchement et p est supérieure à la distance minimale actuelle, continuer à remonter jusqu’au nœud racine ;
b)Si la distance entre ce nœud de branche et p est inférieure à la distance minimale actuelle, emprunter cette branche et suivre les étapes 1 et 2 jusqu’au nœud feuille, puis mettre à jour la distance minimale entre la feuille et Q.
14.png

1.2Annoy
Annoy utilise des hyperplans pour partitionner l’espace. Pour définir un hyperplan, il recherche deux centres de groupes à l’aide de KMeans(k=2). Le plan perpendiculaire au segment reliant ces centres sert d’hyperplan de partitionnement. Le processus est répété jusqu’à ce que le nombre de données dans chaque sous-espace soit inférieur au seuil spécifié.
 15.png16.png17.png

18.png

Pour rechercher n’importe quel point de cet espace, on peut parcourir l’arbre binaire à partir de la racine. Chaque nœud intermédiaire (les petits carrés de l’arbre ci-dessus) définit un hyperplan, qui permet de déterminer s’il faut poursuivre vers le fils gauche ou le fils droit. La recherche d’un point peut s’effectuer en temps logarithmique, correspondant à la hauteur de l’arbre.

Avantage : précision relativement élevée pour les données de faible dimension. Inconvénient : ne saisit pas pleinement la complexité des données, précision plus faible pour les données de grande dimension

2、Méthodes fondées sur les graphes

Les méthodes fondées sur les graphes utilisent principalement cette structure de données pour créer des voies rapides grâce aux connexions entre nœuds voisins. Elles transforment le problème en un parcours de graphe, ce qui réduit rapidement le périmètre de recherche et accélère la récupération. Toutefois, les graphes sont des structures complexes : pour obtenir une vitesse de recherche maximale, on charge généralement le graphe entier en mémoire, d’où une consommation de mémoire très élevée, mais aussi des recherches rapides et un taux de rappel élevé.

L’algorithme de recherche sur graphe couramment utilisé aujourd’hui est principalement HNSW (Hierarchical Navigating Small World). NSW (Navigating Small World), qui l’a précédé, mérite également d’être étudié.
2.1 NSW
NSW ajoute les règles suivantes à la construction naïve du graphe : chaque nœud doit avoir des voisins ; les nœuds voisins doivent être reliés par des arêtes ; le nombre de voisins constitue un hyperparamètre défini par l’utilisateur. Ces règles visent principalement à remédier à certaines limites de la méthode naïve de construction du graphe.
19.pngProcessus de construction du graphe NSW :
Lors de l’insertion d’un nouveau nœud, rechercher d’abord les m nœuds les plus proches, puis relier le nouveau nœud à ces m nœuds.
Processus de recherche NSW :
Pour la donnée de requête q, choisir au hasard dans le graphe un nœud d’entrée et ses voisins, calculer les distances entre le point d’entrée et p ainsi qu’entre ses voisins et p ; si un voisin est plus proche de p que ne l’est le point d’entrée, retenir le point de distance minimale, jusqu’à trouver un point dont tous les voisins sont plus éloignés de la requête que lui.
Comme le montre la figure ci-dessus, pour rechercher dans le graphe de voisinage construit le nœud le plus proche du nœud vert query, on part de points d’entrée choisis aléatoirement ; les liens longs rouges permettent d’abord d’atteindre rapidement les nœuds proches de query, puis les liens courts noirs permettent de trouver le point recherché.
NSW est également une méthode de calcul approximatif et ne garantit pas de trouver le véritable plus proche voisin. Les points insérés en premier possèdent davantage d’arêtes redondantes et sont plus susceptibles de former des autoroutes ; plus un point est inséré tard, moins il a de chances de disposer d’une autoroute.
2.1 HNSW
HNSW est une amélioration de NSW qui s’appuie principalement sur l’idée des listes à sauts et utilise une structure en couches. Chaque couche est un NSW, d’où son autre désignation possible de méthode NSW hiérarchique. Plus on monte, plus les nœuds sont rares et éloignés les uns des autres ; plus on descend, plus les nœuds et les connexions sont nombreux, et plus la distance moyenne diminue.
20.png

Avantage : permet de trouver des voisins proches similaires dans des données de grande dimension et d’améliorer ainsi les performances de recherche, inconvénient : la construction du graphe est complexe, ce qui affecte l’efficacité de l’utilisation de la mémoire.

3、Méthodes fondées sur le hachage

Les méthodes fondées sur le hachage exploitent principalement une propriété des fonctions de hachage : des données très similaires ont également des valeurs de hachage similaires. Ces fonctions peuvent convertir des données de grande dimension en données de dimension inférieure, ce qui améliore considérablement l’efficacité de la construction. Elles présentent toutefois une autre limite : des données dont les valeurs de hachage sont similaires ne sont pas nécessairement similaires, d’où un taux de rappel relativement faible. La principale méthode de ce type est le LSH (Locality-Sensitive Hashing, hachage sensible à la localité). On suppose que deux vecteurs similaires ont aussi des valeurs de hachage similaires. Une fonction de hachage permet de placer les vecteurs similaires dans un même compartiment. Lors d’une recherche, on trouve d’abord le compartiment le plus similaire au vecteur de requête, puis on effectue les calculs sur les données qu’il contient pour obtenir les topk les plus similaires.
21.pngLSH (hachage sensible à la localité) est également une méthode fondée sur le partitionnement de l’espace. Comme le montre la figure ci-dessous, on génère aléatoirement une droite qui distingue un côté positif et un côté négatif. Si un vecteur se trouve du côté positif, on lui attribue 1, et du côté négatif, 0. On génère ensuite une autre droite aléatoire, avec de nouveau 1 du côté positif et 0 du côté négatif ; en générant ainsi plusieurs droites, on calcule pour chaque vecteur 4 valeurs égales à 0 ou 1, obtenant ainsi pour chacun un code binaire de 4 bits. Observons maintenant le degré de similitude entre ces 4 codes binaires.
22.png23.png24.png25.png26.png27.png

Avantage : traitement très rapide lors du passage à de grands volumes de données, inconvénient : précision moyenne

5、Index fondés sur la quantification (Quantized)

5.1、Regroupement en clusters
Si l’on peut délimiter une zone approximative dans laquelle chercher pour un vecteur de requête, puis y effectuer la recherche, on peut considérablement accélérer celle-ci. On choisit d’abord le nombre de groupes souhaité, par exemple les 4 groupes de l’illustration ci-dessous, puis on génère aléatoirement 4 centres. Chaque vecteur est ensuite affecté au centre le plus proche. On calcule alors le vecteur moyen des vecteurs actuellement affectés à chaque groupe, on déplace le centre vers ce vecteur moyen, puis on détermine à nouveau le centre le plus proche de chaque vecteur pour refaire le classement. Ce processus répété s’appelle l’entraînement ; les centres finissent par se stabiliser, autrement dit par converger. Lors d’une recherche, il suffit de trouver le centre de regroupement le plus proche du vecteur de requête, puis de chercher parmi les vecteurs de ce groupe. On atteint ainsi l’objectif de réduire la zone de recherche
29.png29.png

5.2、Quantification (Quantization)
Mais avec des données vectorielles massives, la consommation de mémoire constitue aussi un défi considérable, au-delà de la vitesse de recherche. Dans les applications réelles, des vecteurs de plusieurs milliers de dimensions et des ensembles de centaines de millions de vecteurs n’ont rien d’exceptionnel ; la consommation de mémoire peut donc être très importante.
30.png

Le regroupement présenté ci-dessus nous a fait découvrir le point central, appelé en réalité centroïde. Pourrait-on utiliser ce centroïde pour représenter les points du groupe ? Cela devrait être possible ; en fait, cette méthode est un exemple typique de Compression avec perte ,si l’on prend une image comme exemple, cela donne ceci :
31.png32.png

Bien que cela fasse perdre une partie des valeurs vectorielles, la corrélation entre le centroïde d’un groupe et les vecteurs qui lui appartiennent permet de conserver une grande partie des informations d’origine. Les avantages obtenus sont considérables par rapport à la perte de certains détails due à cette compression avec perte. Le stockage peut suivre le schéma ci-dessous : pour utiliser un vecteur, on retrouve le centroïde correspondant dans le dictionnaire de codes à partir de son code, puis on reconstitue les valeurs précises de ce centroïde. Représenter les vecteurs par les codes des centroïdes constitue ce qu’on appelle la quantification vectorielle(Quantization)
33.png

5.3、quantification produit PQ (Product Quantization)
Après la quantification des vecteurs, un dictionnaire de codes supplémentaire apparaît. La mémoire occupée par les vecteurs eux-mêmes diminue certes, mais ce dictionnaire entraîne une nouvelle consommation de mémoire, et elle est considérable. Cela reste peu visible en faible dimension, mais dans les situations réelles, avec des vecteurs de plusieurs centaines ou milliers de dimensions, ce dictionnaire peut devenir effroyablement volumineux. À quantité constante, pour garantir la qualité de la quantification, plus les vecteurs sont dispersés, plus il faut de vecteurs de regroupement.
34.png35.png36.png37.png39.png39.png


Dans les applications réelles, où les vecteurs comptent des centaines ou des milliers de dimensions, les données sont très clairsemées. Pour garantir la qualité de la quantification dans ces espaces de grande dimension, il peut donc falloir un très grand nombre de groupes. Le schéma ci-dessous illustre un cas typique : un vecteur de 128 dimensions peut nécessiter 2 puissance 64 centres de groupes, ce qui rend le dictionnaire servant à enregistrer les codes des centroïdes extrêmement volumineux. La mémoire nécessaire à son stockage dépasse alors largement celle économisée par la quantification elle-même
40.pngPour résoudre ce problème, on commence par diviser les vecteurs de grande dimension en plusieurs sous-vecteurs de dimension réduite, puis on quantifie ces derniers indépendamment. Par exemple, on divise un vecteur de dimension 128 en 8 sous-vecteurs de 16 positions, puis on effectue un apprentissage par regroupement indépendant sur chacun des 8 sous-vecteurs de dimension 16.
42.png42.png

Chaque vecteur peut ainsi utiliser les résultats de l’entraînement de 8 sous-espaces pour quantifier les 8 sous-vecteurs qui lui correspondent. Chaque sous-vecteur ayant une dimension de 16, ce qui est assez faible, il suffit de 256 groupes dans chaque sous-espace de dimension 16 pour obtenir une quantification assez satisfaisante. La valeur du code de chaque sous-vecteur se situe donc dans l’intervalle 0-255. En réunissant les codes de quantification des 8 sous-vecteurs, on obtient le code de quantification final du vecteur d’origine. Autrement dit, un vecteur est désormais quantifié en 8 valeurs de code. Chaque sous-espace construit également son propre sous-dictionnaire de codes. Lors de l’utilisation, les 8 valeurs de code permettent de retrouver dans les sous-dictionnaires 8 sous-vecteurs de dimension 16, puis de les réunir pour reconstituer un vecteur de dimension 128
45.png45.png45.png46.png


Commentaires

Envoi en cours

Choisissez votre thème

Le thème s’applique à tout le site.