À retenir
- À mesure que vos données grandissent, vous aurez besoin d’une base de données capable d’évoluer avec elles.
- Vous avez besoin d’un flux constant de données à haute vitesse, ce qui exige beaucoup de matériel, tandis que votre ami en a beaucoup moins besoin.
- Je vous invite à consulter notre cours pratique sur le RAG pour obtenir plus d’observations et apprendre davantage.
Comment Netflix ou Spotify peuvent-ils nous recommander la meilleure série à regarder ou une chanson à écouter alors qu’il est difficile de trouver ce que nous voulons dans une simple feuille Excel ? Les tableurs sont assez simples, mais des plateformes comme Netflix connaissent vos intérêts et les stockent efficacement dans leurs bases de données. Et il ne s’agit pas seulement d’une tonne de feuilles Excel. Un tableur ressemble à une base de données traditionnelle, tandis que les bases de données vectorielles propulsent les systèmes de recommandation actuels. Dans cet article, nous verrons précisément ce qu’est une base de données vectorielle, comment elle stocke et recherche les données, la différence entre l’indexation et une base de données et les tendances les plus récentes dans ce domaine. Tous ces concepts sont vraiment utiles aux ingénieurs en IA qui travaillent aujourd’hui avec des LLMs. Plongeons directement dans le sujet.
Comme je l’ai mentionné, une base de données traditionnelle ressemble à un tableur. Vous avez des lignes et des colonnes, et vos recherches renvoient des correspondances exactes. Une base de données vectorielle essaie plutôt de comprendre le contexte et vous fournit des éléments ou des données selon leur similarité. Au départ, tous les éléments sont stockés dans un index vectoriel.
Ici, un index, ou l’indexation, consiste à stocker efficacement des embeddings vectoriels, soit des représentations numériques de données comme nos images ou nos textes, selon leurs similarités. Les données sont ensuite récupérées en fonction de leur ressemblance avec la question ou le vecteur d’input.
Supposons que vous possédez une base de données d’images d’animaux. Tous les animaux sont regroupés selon leur similarité. Deux photos d’un chat seraient par exemple plus proches que l’image d’un chat et celle d’un zèbre. Imaginez maintenant que vous voulez trouver quelque chose de semblable à un tigre, mais que la base de données ne contient aucune image de tigre. Vous pourriez alors obtenir des photos d’un chat, parce qu’elles sont les plus similaires. Ce processus qui consiste à regrouper, rechercher et récupérer des éléments selon leur similarité s’appelle l’indexation. Notre index vectoriel représente simplement nos vecteurs après ce processus, ce qui signifie qu’ils sont maintenant correctement indexés.
Lorsqu’un utilisateur envoie une question à votre LLM, autrement dit lorsque vous lui fournissez une nouvelle question, l’index vectoriel parcourt efficacement le contenu et renvoie les éléments les plus similaires. Mais comme nous l’avons vu, il pourrait ne contenir aucune image de tigre. Pire encore, nous pourrions trouver des images de chats très similaires et supposer qu’il s’agit de tigres. Différentes méthodes ont donc été introduites pour améliorer la recherche dans ces bases de données en combinant l’approche de l’index vectoriel avec des méthodes traditionnelles, comme le filtrage par mots-clés. Nous filtrons essentiellement notre base de données selon ses métadonnées afin de réduire le nombre de vecteurs à examiner et à comparer. Le filtrage peut être effectué avant ou après la recherche vectorielle elle-même.
- Si vous choisissez de filtrer avant la recherche, nous parlons de préfiltrage. Cette méthode peut réduire l’espace de recherche, mais aussi amener le système à ignorer des résultats pertinents qui ne correspondent pas aux critères du filtre de métadonnées. Un filtrage approfondi des métadonnées peut également ralentir le traitement en ajoutant des calculs.
- Si vous choisissez de filtrer après la recherche vectorielle, nous parlons de postfiltrage. Cette méthode assure que tous les résultats pertinents sont d’abord considérés selon le contexte des données elles-mêmes. Elle peut toutefois aussi ajouter des calculs et ralentir le traitement, puisque les résultats non pertinents doivent être retirés une fois la recherche terminée.
En termes simples, un index vectoriel est un mécanisme de recherche utilisé pour filtrer une base de données. Mais les bases de données vectorielles font plus que chercher. Elles gèrent aussi différemment plusieurs tâches de gestion des bases de données.
D’abord, elles offrent un meilleur contrôle des accès, une fonction essentielle à toute base de données. Dans une entreprise, différents utilisateurs doivent accéder à de l’information précise. Nous gérons généralement cette situation avec le filtrage des métadonnées. Ce processus est simple dans une base de données ordinaire. Dans une base de données vectorielle, le filtrage des métadonnées survient toutefois avant la recherche vectorielle. Cette séquence assure que les utilisateurs accèdent seulement à l’information qu’ils sont autorisés à consulter.
Un autre élément essentiel consiste à s’assurer que le système continue de fonctionner lorsqu’un problème survient. C’est ce qu’on appelle la tolérance aux pannes. Dans une base de données vectorielle, les données sont réparties entre plusieurs nœuds. Imaginez des unités de stockage qui gèrent chacune une partie des données. Pour assurer le bon fonctionnement du système, ces nœuds possèdent généralement des sauvegardes. Si une partie de la base de données tombe en panne, le système peut donc facilement passer à une sauvegarde et poursuivre son travail sans interruption.
Lorsque vous travaillez avec un grand dataset et voulez assurer la fluidité du système, les bases de données vectorielles utilisent une technique appelée fragmentation, ou sharding. Essentiellement, les données sont divisées en plus petites parties appelées fragments. Lorsque vous exécutez une requête, chaque fragment la traite, puis les résultats sont rassemblés. La récupération des données reste ainsi rapide et efficace.
Les bases de données vectorielles sont aussi conçues dans un souci de fiabilité et de facilité d’utilisation. Elles prennent en charge des sauvegardes régulières pour éviter la perte de données et proposent des API et des SDK qui facilitent la construction et l’intégration des solutions par les développeurs. Tout vise donc à assurer la fluidité du système et la simplicité du travail.
Maintenant que nous comprenons le fonctionnement des bases de données vectorielles, comment choisissons-nous la bonne ?
Commencez par examiner ses performances. Vérifiez le nombre de questions que la base de données peut traiter par seconde, la vitesse à laquelle elle renvoie les résultats, aussi appelée sa latence, et la rapidité avec laquelle de nouvelles données peuvent être ajoutées. Considérez ensuite le type d’indexation utilisé par la base de données vectorielle. Différentes bases utilisent différentes méthodes en arrière-plan. Certaines peuvent être plus rapides pour certains types de requêtes, tandis que d’autres utilisent la mémoire plus efficacement. C’est comme choisir le bon outil pour le travail. Chacun possède ses forces selon vos besoins. La convivialité de l’API représente un autre facteur important qui peut faire une grande différence pour les développeurs. À mesure que vos données grandissent, vous aurez besoin d’une base de données capable d’évoluer avec elles. Il existe deux méthodes de mise à l’échelle : la méthode verticale, qui consiste à ajouter du matériel plus puissant, et la méthode horizontale, qui ajoute des nœuds au système. Examinez sa capacité de mise à l’échelle et les options qu’elle propose. Et, bien sûr, nous ne pouvons pas oublier la tarification. En considérant tous ces éléments, vous serez mieux préparé à choisir la base de données qui convient à votre tâche. Une recherche rapide sur Google permet facilement de trouver une tonne de bases de données vectorielles, et nous présentons nos préférées dans le cours.
Maintenant que vous savez choisir la bonne base de données vectorielle, il est temps de l’implémenter ! Passons en revue quelques bonnes pratiques d’implémentation.
Commencez par vérifier si votre base de données vectorielle propose des fonctions intégrées pour prétraiter les données. Assurez-vous que vos données sont propres, qu’elles ne contiennent aucune valeur manquante et que vous les normalisez. La normalisation place vos données dans une plage commune afin que chaque caractéristique contribue également au calcul des distances. Elle peut améliorer considérablement l’exactitude des recherches par similarité.
Optimisez ensuite les questions de vos utilisateurs. Plutôt que de les traiter une par une, regroupez plusieurs questions dans un batch. Appliquez le filtrage des métadonnées avant la recherche vectorielle. Vous réduisez ainsi le nombre de vecteurs à parcourir et accélérez la récupération. Exploitez les capacités de traitement en parallèle de votre base de données vectorielle en distribuant les requêtes des utilisateurs entre plusieurs processeurs ou nœuds afin d’améliorer le temps de réponse. Si vous recevez souvent des questions semblables, vous pouvez les placer en cache pour éviter de répéter les mêmes calculs. Toutes ces pratiques peuvent améliorer les performances de votre base de données vectorielle avec le temps, et nous les approfondirons dans le cours.
Enfin, surveillez régulièrement votre base de données vectorielle avec différentes métriques afin de vérifier l’absence de problèmes. Des métriques essentielles comme la latence des requêtes, qui mesure le temps nécessaire pour récupérer les résultats, et le débit, ****qui indique le nombre de requêtes que le système peut traiter par seconde, vous aident à déterminer si la base de données gère efficacement un grand volume de demandes. L’analyse de ces métriques vous permet d’ajuster la configuration de la base de données pour améliorer sa facilité d’utilisation et l’expérience utilisateur.
La prochaine grande tendance du domaine est celle des bases de données vectorielles serverless. Les premières bases de données vectorielles rencontrent d’importants obstacles. L’un des principaux problèmes vient du lien étroit entre le stockage et le calcul, qui augmente les coûts d’exécution. Les bases de données serverless corrigent ce problème en séparant les deux avec une méthode appelée partitionnement géométrique. Celle-ci divise l’index en plus petites parties. Les recherches deviennent donc plus ciblées, et les ressources de calcul sont utilisées seulement lorsqu’elles sont nécessaires, ce qui réduit les coûts. Cette méthode peut toutefois parfois augmenter le temps de réponse.
Le partage du même matériel entre plusieurs utilisateurs sans gaspiller les ressources représente un autre défi. Imaginez la situation suivante : vous et votre ami utilisez Netflix. Vous regardez des films en HD chaque soir, tandis que votre ami en regarde seulement un par mois. Vous avez besoin d’un flux constant de données à haute vitesse, ce qui exige beaucoup de matériel, tandis que votre ami en a beaucoup moins besoin. Si vous receviez tous les deux la même quantité de matériel, les ressources attribuées à votre ami pourraient être gaspillées afin de répondre à vos besoins élevés. Pour résoudre ce problème, le système regroupe les utilisateurs aux habitudes semblables et assure que chacun obtient les ressources nécessaires sans nuire aux autres.
Il peut aussi être difficile de garder les données à jour et prêtes pour des recherches rapides dans les premières bases de données, particulièrement lorsque leur volume est élevé. Lorsque vous ajoutez des données à une base vectorielle, vous voulez qu’elles deviennent immédiatement accessibles à la recherche. Leur ajout à l’index principal peut toutefois prendre du temps et ralentir le système. Certaines solutions utilisent donc une couche pour les données récentes, semblable à un cache temporaire pour les nouvelles données. Elle permet d’effectuer des requêtes rapides pendant l’intégration progressive des données à l’index principal.
Ces fonctionnalités montrent que les bases de données vectorielles serverless offrent des solutions flexibles, économiques et évolutives qui produisent des recherches plus exactes et plus approfondies. Elles représentent une option très intéressante pour la plupart des startups !
Que vous construisiez un système de recommandation comme Netflix ou Spotify ou toute autre application propulsée par l’IA, les bases de données vectorielles fournissent les performances, la capacité de mise à l’échelle et la flexibilité nécessaires pour traiter de grands datasets complexes.
Je sais que cet article contenait une tonne de conseils et d’observations, peut-être même un peu trop. Heureusement, nous détaillerons toutes ces approches dans le cours avec des exemples de code clairs et concrets. Je vous invite à consulter notre cours pratique sur le RAG pour obtenir plus d’observations et apprendre davantage.
Merci d’avoir lu jusqu’au bout. J’espère que cet article vous a été utile !
FAQ
Qu’est-ce qu’une base de données vectorielle ?
Elle stocke des vecteurs d’embedding et récupère les éléments dont les représentations numériques sont proches du vecteur d’une requête.
Pourquoi les vecteurs sont-ils utiles à la recherche ?
Les embeddings peuvent rapprocher du texte, des images ou des produits liés sur le plan sémantique, même sans correspondance exacte entre les mots-clés.
Comment utilise-t-on une base de données vectorielle dans le RAG ?
Elle récupère les segments de documents liés à une question afin de fournir au modèle de langage un contexte externe pertinent.
Qu’est-ce qui doit évoluer lorsque la collection grandit ?
L’indexation, la mémoire, le débit des mises à jour, les filtres, la réplication et la latence des requêtes deviennent tous des enjeux opérationnels.
Les nouveaux vecteurs peuvent-ils être recherchés immédiatement ?
Certains systèmes maintiennent un chemin de mise à jour rapide tout en fusionnant progressivement les nouvelles données dans l’index principal optimisé.
Quelle est la différence entre un index vectoriel et une base de données vectorielle ?
L’index organise les embeddings pour la recherche par similarité, tandis que la base de données ajoute le stockage, les mises à jour, les sauvegardes, les API, le filtrage et la mise à l’échelle autour de cet index.


