1 points par GN⁺ 2024-01-13 | 1 commentaires | Partager sur WhatsApp
  • Alors que les applications d’IA traitent des données non structurées et de grande dimension, les bases de données vectorielles gagnent en importance en tant que systèmes spécialisés pour stocker et rechercher des données sous forme de tableaux de nombres
  • Le principe central consiste à relier les enregistrements selon la similarité entre les attributs des données, plutôt que selon des lignes, des colonnes ou des relations explicites, afin d’exploiter le sens implicite
  • En encodant les relations sémantiques sous forme de vecteurs multidimensionnels, il devient possible d’exécuter plus rapidement des tâches d’analyse comme la recherche par similarité, le clustering et la classification
  • Dans l’IA générative, elles servent à gérer de grands volumes de données de grande dimension et à améliorer la vitesse de l’apprentissage et de l’inférence, ainsi que la personnalisation des résultats, grâce à la recherche de vecteurs similaires
  • L’indexation avancée réduit l’espace de recherche à des sous-ensembles très pertinents, diminue le temps de recherche et permet des requêtes complexes combinant similarité et autres conditions

Types de données traités par les bases de données vectorielles

  • Une base de données vectorielle est une base de données spécialisée conçue pour stocker, gérer et traiter des vecteurs, qui sont des représentations de données de grande dimension
  • Contrairement aux bases de données traditionnelles, qui stockent les données dans des lignes et des colonnes, les bases de données vectorielles stockent les données sous forme de vecteurs dans un espace multidimensionnel
  • Chaque vecteur est un tableau de nombres représentant les caractéristiques ou attributs d’un point de données

Connexions fondées sur le sens et la similarité

  • Les bases de données traditionnelles établissent les relations entre éléments à partir de liens explicites ou de hiérarchies
  • Les bases de données vectorielles relient algorithmiquement les enregistrements selon la similarité des attributs des données
  • Cette approche permet de créer des connexions plus intuitives, fondées sur le sens implicite contenu dans les éléments de la base de données

Une structure adaptée aux requêtes analytiques

  • Lorsque les données sont encodées sous forme de vecteurs multidimensionnels — autrement dit de tableaux de nombres — reflétant les relations sémantiques, des tâches d’analyse avancées peuvent être exécutées rapidement
  • Les opérations prises en charge incluent la recherche par similarité, le clustering et la classification
  • Le modèle de calcul convient à la détection de motifs, à l’analyse prédictive et aux applications ayant de fortes exigences analytiques

Usages dans l’IA et l’IA générative

  • L’essor de l’IA et du machine learning est l’un des principaux facteurs de la demande croissante en bases de données vectorielles
  • Dans le domaine de l’IA générative, les bases de données vectorielles sont conçues pour stocker et gérer efficacement de grands volumes de données de grande dimension
  • Elles permettent de rechercher et de récupérer rapidement des vecteurs similaires, ce qui peut accélérer considérablement les processus d’apprentissage et d’inférence des modèles d’IA générative
  • Elles sont aussi utilisées pour aider les systèmes d’IA générative à fournir aux utilisateurs des contenus plus personnalisés et plus pertinents

Indexation et critères de recherche complexes

  • Les bases de données vectorielles utilisent des techniques d’indexation avancées pour consulter et rechercher rapidement des vecteurs similaires
  • Les index réduisent fortement le temps de recherche en limitant l’espace de recherche à des sous-ensembles de vecteurs plus petits et plus pertinents
  • Elles peuvent également traiter des requêtes complexes combinant des conditions de similarité avec d’autres critères de recherche
  • Cette flexibilité est importante pour les applications d’IA avancées qui nécessitent des fonctions de recherche sophistiquées

1 commentaires

 
GN⁺ 2024-01-13
Avis sur Hacker News
  • Quelques ressources supplémentaires :
    A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge : https://arxiv.org/abs/2310.11703
    Survey of Vector Database Management Systems : https://arxiv.org/abs/2310.14021
    What are Embeddings : https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
    Attribution : https://twitter.com/eatonphil/status/1745524630624862314 et https://twitter.com/ChristophMolnar/status/17457316026829826...
  • La diapo a-t-on besoin d’une base de données vectorielle dédiée est assez intéressante, mais elle ne répond pas vraiment à la question
    C’est aussi un point qui m’intéressait, donc j’aimerais bien avoir des critères ou des règles empiriques
    J’ai récemment manipulé des embeddings avec l’excellent outil llm de Simon Willison, et son approche est la plus simple qui soit : stocker les embeddings dans SQLite, avec quelques UDF pour calculer les distances
    Cette simplicité est séduisante, mais au-delà d’un certain niveau de trafic et de volume de données, il faudra sans doute une base de données plus spécialisée ; j’aimerais savoir à peu près où se situe cette limite
    • Il y a quelques années, j’ai créé un index vectoriel utilisant LSH
      Pour la recherche, je faisais le plus simple possible : tout parcourir et comparer avec la distance de Hamming (xor et popcount) ; sur un seul cœur d’un MBP de 2011, je pouvais scanner 200 000 hachages en moins de 10 ms pour trouver l’élément le plus proche
    • J’ai déjà fait évoluer jusqu’à des dizaines de millions de vecteurs le moteur rapide et bricolé qui fait tourner findsight.ai, avec plus de détails dans cette présentation : https://youtu.be/elNrRU12xRc?t=1556
      Il faisait environ 1 000 lignes de code, donc au final nous n’avions pas besoin d’une base de données vectorielle externe
    • Honnêtement, pour environ 100 000 vecteurs, tout charger en mémoire, ou utiliser SQLite ou pgvector, convient parfaitement
      Mais au-delà, les options utilisables comme Pinecone deviennent complexes, lentes et absurdement chères
      À ma connaissance, le meilleur choix est turbopuffer.com : environ 100 fois moins cher que Pinecone, et il semble réellement passer à l’échelle
      Comme il ne figure pas dans la liste des bases vectorielles recommandées dans les slides, je le mentionne comme une bonne recommandation
    • Cela dépend sans doute des cas, mais cet article publié il y a quelques semaines nous a beaucoup aidés à nous concentrer sur la façon de penser ce dont nous avions réellement besoin : au bout du compte, ce qu’il nous fallait était un moteur de recherche
      https://news.ycombinator.com/item?id=38703943
  • Il y a quelques mois, j’ai donné un cours sur les bases de données vectorielles pour un client privé de TGE Data, puis nous avons décidé de l’enregistrer sous forme de courte conférence pour un public plus large
    Ce cours mélange théorie et démos autour des concepts de base des vecteurs, des bases de données vectorielles, des index et de la recherche de similarité, et se termine par des démonstrations des bases Pinecone et Weaviate
    • Super. Il y a donc aussi une vidéo ?
  • C’est une bonne introduction, mais j’ai l’impression que ce type de présentation passe trop vite sur la question de la sélection des caractéristiques
    À cette étape, le jugement humain intervient de façon très subtile, parfois presque imperceptible, alors que l’ensemble donne en surface l’impression d’un système très automatisé, « juste des maths »
    Prenons l’audio : quelles caractéristiques extraire pour construire un vecteur à N dimensions ? La réponse facile pourrait être « autant que possible »
    Mais d’abord, même des caractéristiques faciles à nommer peuvent ne pas être accessibles dans les données de caractérisation
    Ensuite, sans une connaissance approfondie du domaine, on peut même ignorer l’existence de caractéristiques latentes qu’il faudrait utiliser
    Enfin, même avec une connaissance approfondie du domaine, on peut encore ignorer quelles caractéristiques latentes il faudrait exploiter
    Supposons par exemple que l’on soit fan de musique minimaliste à déphasage à la Reich. On interroge indirectement une base de données vectorielle pour trouver de la musique similaire à une œuvre emblématique du genre, par exemple Piano Phase
    La base utilise diverses caractéristiques audio et musicales : fréquences dominantes, intervalles entre attaques de notes, volume, caractéristiques de timbre fondées sur la distribution des fréquences, fondamentale apparente et gamme, etc.

Mais si l’ensemble de caractéristiques de la base de données ne contient pas « l’intervalle entre les notes reste constant dans le temps », la requête pourra trouver des choses similaires en timbre, harmonie, mélodie ou rythme, mais trouver des morceaux qui partagent la caractéristique essentielle — le fait que la phase relative des deux lignes mélodiques change de manière régulière — relèvera entièrement de la chance
Il n’est pas difficile de construire des exemples similaires avec n’importe quel type de données : visuelles, textuelles, numériques, etc.
Bien sûr, cela ne veut pas dire que les bases de données vectorielles et la classification de caractéristiques sont inutiles
Quand on trouve, ou ne trouve pas, un motif correspondant dans un jeu de données donné, l’une des premières questions à se poser est de savoir si l’exhaustivité de l’ensemble de caractéristiques est fortement garantie, et sinon, comment l’étendre

  • Les bases de données vectorielles sont orientées recherche et récupération des résultats
    En général, la façon de produire les vecteurs consiste à affiner un grand modèle préentraîné et à en extraire les représentations internes
    Comme le jeu de données contient des requêtes réussies et les résultats récupérés, il suffit d’utiliser les entrées brutes pour optimiser une fonction de perte en fonction de l’objectif de similarité pris en charge par la base vectorielle
    Pour les modalités courantes comme les tableaux, le texte, les images ou l’audio, le choix des caractéristiques fait très peu intervenir le jugement humain : il suffit d’appliquer de l’attention
    À noter que les modèles texte-vers-vecteur récents comme E5-Mistral ne nécessitent même pas de curation humaine du jeu de données

  • C’est un bon point sur le fait qu’on « ne sait pas ce qu’on ne sait pas »
    Content de croiser un autre amateur de Steve Reich, et je serais curieux d’avoir des recommandations de morceaux proches de mon Music for 18 Musicians préféré

  • C’est un excellent aperçu, mais la dernière section n’aborde pas la question évidente du choix entre un stockage vectoriel comme Postgres+pgvector et une base de données vectorielle comme Pinecone
    J’aimerais voir davantage de présentations discutant des différents compromis — vitesse des requêtes, vitesse d’insertion et de construction des index, facilité d’utilisation, etc. — pour aider à choisir selon chaque application

    • J’avais commencé à rassembler des comparaisons de différents outils de recherche vectorielle : http://vectorsearch.dev/
      Les PR sont toujours les bienvenues
    • J’appellerais plutôt le premier une extension vectorielle
      Une base de données, c’est un stockage auquel on a ajouté toutes sortes de fonctionnalités
  • digitaloceanspaces.com étant un fournisseur d’hébergement de style S3, ce serait bien que Hacker News le traite spécialement et affiche quelque chose comme tge-data-web.nyc3.digitaloceanspaces.com au lieu de simplifier le domaine en digitaloceanspaces.com
    Cela dit, S3 semble avoir le même problème : https://news.ycombinator.com/item?id=38876761
    Il existe des précédents ailleurs. Les sites en sous-domaine x.github.io sont traités spécialement ici : https://news.ycombinator.com/from?site=lfranke.github.io

  • Ce document me paraît assez dangereux comme point de départ pour un ingénieur
    Les formulations selon lesquelles les données seraient regroupées par sémantique, ou optimisées pour l’analytique, me semblent discutables
    Le clustering dépend des embeddings que l’on a calculés. Si l’on croit que les embeddings approchent bien le sens des données, on peut éventuellement raisonner ainsi
    Mais il est facile d’imaginer des embeddings qui cassent cette idée. Par exemple, si l’on fait passer un fichier audio et un fichier texte ayant le même sens dans le même processus d’embedding, s’il n’est pas multimodal, ils risquent fort d’être éloignés dans l’espace des vecteurs d’embedding
    À l’avenir, je pense qu’on verra certainement apparaître des embeddings qui placent les éléments proches dans l’espace vectoriel non pas selon leur similarité sémantique, mais selon leur mode d’utilisation
    Si vous construisez un système de recommandation, vous ne voulez pas forcément regrouper de près plusieurs variantes d’un achat ponctuel
    Par exemple, les vols les plus proches sémantiquement seraient d’autres vols vers la même destination à des horaires différents, ou vers des aéroports proches, mais en pratique vous pourriez vouloir les regrouper avec les hôtels que les personnes ayant acheté ces vols achètent souvent aussi
    Une base de données vectorielle peut aussi intégrer dans les données des dimensions supplémentaires, comme la prise en compte du temps. Rien n’oblige à utiliser des vecteurs qui encodent le sens
    Les bases de données vectorielles sont donc optimisées pour la consultation ou la recherche à partir de vecteurs d’entrée, et ne ressemblent pas aux requêtes OLAP
    Elles sont plus proches d’Elasticsearch que de Snowflake. Si vous utilisez une base de données vectorielle en espérant faire du reporting ou de l’analyse à grande échelle sur l’espace vectoriel, à ma connaissance il n’existe pas aujourd’hui de produit vraiment utilisable pour cela

    • Le calcul des embeddings reste encore un mystère pour moi
      Je comprends qu’on passe d’une photo de pomme à un vecteur représentant son « caractère de pomme », puis qu’on compare ce vecteur à d’autres avec des mathématiques classiques
      Ce que je ne comprends pas, c’est qui ou quoi prend l’image en entrée et produit le vecteur en sortie
      Même chose pour les documents. Si je veux ajouter une dimension en ajoutant simplement un nombre de plus au tableau, quelle partie de la base de données vectorielle dois-je modifier pour que cette dimension soit incluse dans le calcul vectoriel ?
      Ou bien le processus qui transforme documents, images ou autre en représentation vectorielle se fait-il d’une autre manière, en dehors de la base de données ?
      Modification : le calcul des embeddings ressemble à une tâche pour un algorithme de machine learning, mais alors cet algorithme doit lui aussi être entraîné au préalable. On finit donc par une chaîne d’entraînement sans fin
  • Je ne comprends pas pourquoi PQ est listé comme « stratégie d’indexation »
    PQ est une technique de compression et de quantification des vecteurs, pas un moyen de partitionner l’espace de recherche
    On peut encoder les vecteurs avec PQ dans une recherche exhaustive / un index plat, un index IVF ou HNSW, et Faiss les fournit respectivement sous les noms IndexPQ, IndexIVFPQ et IndexHNSWPQ
    Si on le souhaite, on peut aussi l’utiliser avec un arbre k-D ou ANNOY
    L’affirmation selon laquelle « quand la vitesse des requêtes est plus importante que la précision, utilisez HNSW ou Annoy pour les très grands jeux de données » pose également problème
    Les méthodes fondées sur des graphes ont un surcoût mémoire et un coût de construction élevés, et ne sont pas pratiques pour des jeux de données à l’échelle du milliard
    Elles sont généralement plus précises et plus rapides que les méthodes IVF, mais c’est parce qu’IVF doit visiter de nombreuses cellules pour obtenir une précision comparable
    En revanche, contrairement à d’autres techniques, IVF peut monter jusqu’à des bases de données à l’échelle du billion sans gros surcoût, tout en offrant un compromis raisonnable entre vitesse et précision
    Je dirais plutôt : « à utiliser pour des jeux de données de taille intermédiaire où la vitesse des requêtes est importante, où l’on veut aussi une grande précision, et où un index plat/exhaustif est irréaliste »

    • Il s’agit de transformer un espace continu en espace discret
      On applique d’abord PQ, puis on effectue KNN sur les nouveaux vecteurs discrets
      Cela permet de compresser l’espace de vocabulaire à une taille fixe
  • Dans le tableau de la diapositive 15, les cases Indexing & Search Efficiency de Traditional Databases et Vector Databases semblent avoir été interverties

    • Moi aussi, la dernière ligne me donne l’impression qu’elles ont été interverties
  • Existe-t-il des recommandations pour une base de données d’embeddings embarquée, comme SQLite ?
    Ce serait pour de petits problèmes, mais ce serait bien que ce soit plus pratique que LMDB + FAISS

    • Vous pouvez regarder txtai (https://github.com/neuml/txtai)
      Il peut s’exécuter dans un processus Python, stocke le contenu dans SQLite et prend en charge le stockage des vecteurs d’embedding dans des formats d’index vectoriel locaux (Faiss, HNSW, Annoy)
      Pour info, je suis l’auteur principal de txtai
    • Je viens de terminer une preuve de concept de recherche de similarité dans les commentaires HN avec DuckDB
      https://github.com/patricktrainer/hackernews-comment-search
    • Pour info, l’outil llm de Simon Willison n’utilise que SQLite et quelques UDF
      Cette simplicité est séduisante, mais je ne vois pas bien quand ni pourquoi cela cesse d’être suffisant
    • En Python, il me semble que Chroma [1] peut être utilisé en mode embarqué
      Pour Go, j’ai récemment commencé à créer chromem-go, inspiré de l’interface de Chroma : https://github.com/philippgille/chromem-go
      Il n’a pas encore de fonctionnalités avancées et n’est pas destiné aux usages à grande échelle, mais les démos RAG fonctionnent
      [1] https://github.com/chroma-core/chroma
    • https://github.com/asg017/sqlite-vss