Les Bases de Données Vectorielles en IA

Regardez la vidéo!

Comment Netflix ou Spotify peuvent-ils recommander les meilleures séries à regarder ou une chanson à écouter, alors qu’il est difficile de trouver ce qu’on veut dans un simple tableau Excel ? Bien que les tableurs soient assez simples, des plateformes comme Netflix connaissent vos intérêts et les stockent efficacement dans leurs bases de données. Et ce n’est pas juste une tas de feuilles Excel. Le tableur Excel est comme une base de données traditionnelle, tandis que les systèmes de recommandations d’aujourd’hui utilisent des bases de données vectorielles. 

Dans ce blogue, on explore précisément ce qu’est une base de données vectorielle, comment elle stocke et recherche des données, la différence entre l’indexation et une base de données, ainsi que les tendances les plus récentes en matière de bases de données vectorielles. Ce sont des concepts très utiles pour un ingénieur en IA qui travaille aujourd’hui avec des modèles de langage. Plongeons directement dans le sujet.

Une base de données traditionnelle, comme je l’ai mentionné, ressemble à des tableurs. On a des lignes et des colonnes, et lorsqu’on cherche quelque chose, on obtient des correspondances exactes. Une base de données vectorielle, en revanche, essaie de comprendre le contexte et fournit des éléments ou des données basés sur la similarité. Au départ, tous les éléments sont stockés sous forme d’un index vectoriel.

Un index, ou l’indexation, consiste à stocker efficacement les vecteurs qu’on a, qui sont des représentations numériques de données comme des images ou du texte, en fonction de leur similarité entre eux. Les données sont ensuite récupérées en fonction de leur ressemblance avec la question ou le vecteur d’entrée.

Imaginons qu’on ait une base de données d’images d’animaux. Tous les animaux sont regroupés en fonction de leur similarité. Par exemple, deux photos d’un chat seraient plus proches l’une de l’autre qu’une image d’un chat et une d’un zèbre. Si on veut trouver quelque chose de similaire à un tigre, mais qu’il n’y a pas d’images de tigre dans la base de données, on pourrait obtenir des photos de chats, car ils sont les plus proches en termes de similarité. Ce processus de regroupement, de recherche et de récupération basée sur la similarité s’appelle l’indexation. Un index vectoriel, c’est simplement l’ensemble de vecteurs après ce processus d’indexation, ce qui signifie que les vecteurs sont maintenant correctement indexés.

Quand on envoie une question à son grand modèle de langage (notre LLM), ou lorsqu’on pose une nouvelle question, l’index vectoriel recherche efficacement dans le contenu et retourne les éléments les plus similaires. Mais, comme on l’a dit, il peut ne pas y avoir d’images de tigres. Pire encore, on peut trouver des images très similaires de chats qu’on pourrait prendre pour des tigres. Pour cette raison, on introduit diverses méthodes pour améliorer la recherche dans ces bases de données en combinant l’approche des index vectoriels avec des approches traditionnelles, comme le filtrage par mots-clés. Ici, on filtre essentiellement la base de données en fonction de leurs métadonnées afin d’avoir moins de vecteurs à examiner et comparer. Ce filtrage peut être effectué soit avant, soit après la recherche vectorielle.

  • Si on choisit de faire ce filtrage avant, on l’appelle pré-filtrage. Bien que cela puisse réduire l’espace de recherche, cela risque aussi de faire passer à côté de résultats pertinents qui ne correspondent pas aux critères du filtre de métadonnées. Un filtrage excessif peut aussi ralentir le traitement à cause de la surcharge informatique ajoutée.

  • Si on choisit de filtrer après la recherche vectorielle, on parle de post-filtrage. Cela garantit que tous les résultats pertinents sont d’abord considérés en fonction du contexte des données elles-mêmes. Mais cela peut aussi introduire une surcharge supplémentaire et ralentir le traitement, car les résultats non pertinents doivent être filtrés après la recherche.

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 différentes tâches de gestion de bases de données de manière unique.

D’abord, elles offrent un meilleur contrôle d’accès, ce qui est essentiel dans toute base de données. Dans une entreprise, différents utilisateurs ont besoin d’accéder à des informations spécifiques. Typiquement, on gère cela avec un filtrage par métadonnées. Dans une base de données classique, c’est assez simple. Cependant, dans une base de données vectorielle, le filtrage par métadonnées se fait d’abord, suivi par la recherche vectorielle. Cette séquence garantit que les utilisateurs n’accèdent qu’aux informations qu’ils sont autorisés à voir.

Un autre point clé est de s’assurer que le système continue de fonctionner même en cas de problème, ce qu’on appelle la tolérance aux pannes. Dans une base de données vectorielle, les données sont réparties sur plusieurs nœuds — on peut les voir comme des unités de stockage qui gèrent chacune une partie des données. Pour que tout fonctionne bien, ces nœuds disposent généralement de sauvegardes. Ainsi, si une partie de la base de données tombe en panne, le système peut facilement passer à une sauvegarde et continuer sans interruption.

Quand on travaille avec un grand ensemble de données et qu’on veut que tout reste fluide, les bases de données vectorielles utilisent une technique appelée fragmentation. En gros, les données sont divisées en petites parties appelées fragments. Quand on exécute une requête, chaque fragment la traite, et les résultats sont rassemblés, ce qui rend la récupération des données rapide et efficace.

Les bases de données vectorielles sont aussi conçues pour être fiables et faciles à utiliser. Elles supportent des sauvegardes régulières pour protéger contre la perte de données et proposent des API et SDK qui simplifient le travail des développeurs. Tout est pensé pour que tout soit fluide et facile à utiliser.

Maintenant qu’on comprend comment fonctionnent les bases de données vectorielles, comment choisir la bonne ?

D’abord, il faut regarder ses performances. Combien de questions la base peut-elle traiter par seconde, avec quelle rapidité elle retourne les résultats (ce qu’on appelle la latence), et à quelle vitesse on peut y ajouter de nouvelles données. Ensuite, il faut considérer le type d’indexation utilisé par la base vectorielle. Différentes bases utilisent des méthodes différentes sous le capot. Certaines peuvent être plus rapides pour certains types de requêtes, tandis que d’autres sont plus efficaces en termes d’utilisation de la mémoire. C’est comme choisir le bon outil pour le bon travail : chaque méthode a ses forces selon les besoins. Un autre facteur important est la facilité d’utilisation de l’API. Ça peut vraiment faire la différence pour les développeurs. À mesure que les données grandissent, il faut une base qui peut évoluer avec. Il y a deux façons d’évoluer : verticalement, ce qui signifie ajouter du matériel plus puissant, et horizontalement, ce qui signifie ajouter plus de nœuds à son système. Il faut voir comment elle évolue et les options qu’elle propose. Et, bien sûr, on ne peut pas oublier le coût. En prenant en compte ces aspects, on sera mieux équipé pour choisir la base de données qui convient le mieux à la tâche. Avec une recherche rapide sur Google, on peut trouver plein d’options de bases vectorielles, et on montre nos préférées dans le cours.

Maintenant qu’on sait comment choisir la bonne base vectorielle, il est temps de la mettre en œuvre ! Passons en revue quelques meilleures pratiques pour implémenter les bases vectorielles.

Tout d'abord, vérifiez si votre base de données vectorielle offre des fonctions intégrées pour prétraiter les données. Assurez-vous que vos données sont propres, sans valeurs manquantes, et que vous normalisez vos données. La normalisation met les données à une échelle commune, garantissant que chaque caractéristique contribue de manière égale aux calculs de distance. Cela peut améliorer de manière significative la précision des recherches de similarité.

Ensuite, appliquez un filtrage basé sur les métadonnées avant d'effectuer une recherche vectorielle. Cela réduit le nombre de vecteurs à rechercher, accélérant ainsi la récupération des résultats. Exploitez les capacités de traitement parallèle de votre base de données vectorielle en distribuant les requêtes utilisateur sur plusieurs processeurs ou nœuds pour améliorer les temps de réponse. Si vous avez des questions similaires fréquentes, elles peuvent être mises en cache pour éviter des calculs redondants. Toutes ces pratiques peuvent aider à améliorer les performances de votre base de données vectorielle au fil du temps, et nous les approfondirons dans le cours.

Enfin, surveillez régulièrement votre base de données vectorielle à l'aide de différents indicateurs pour vous assurer qu'il n'y a pas de problèmes. Des métriques clés 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 combien de requêtes le système peut gérer par seconde, vous aident à comprendre si la base de données peut efficacement gérer un volume élevé de requêtes. L'analyse de ces métriques vous permet d'affiner les configurations de la base de données pour une meilleure utilisabilité et une expérience utilisateur optimale.

La prochaine grande tendance dans les bases de données vectorielles sont les bases de données sans serveur. Les premières bases de données vectorielles posaient des défis majeurs. Un problème important est que le stockage et le calcul sont étroitement liés, ce qui les rend coûteux à utiliser. Les bases de données sans serveur résolvent ce problème en les séparant grâce à un procédé appelé le “partitionnement géométrique”. Cela divise l'index en plus petites parties, ce qui rend les recherches plus ciblées et les ressources de calcul sont utilisées uniquement lorsque nécessaire, réduisant ainsi les coûts. Cependant, cela peut parfois augmenter le temps nécessaire pour obtenir une réponse.

Un autre défi est de gérer plusieurs utilisateurs sur le même matériel sans gaspiller de ressources. Imaginez que vous et votre ami utilisez Netflix. Vous diffusez des films HD chaque soir, tandis que votre ami ne regarde qu'un film une fois par mois. Vous avez besoin de données rapides et constantes, nécessitant beaucoup de matériel, tandis que votre ami n’a pas les mêmes besoins. Si vous receviez tous les deux la même quantité de ressources matérielles, elles pourraient être gaspillées dans le cas de votre ami pour répondre à vos besoins élevés. Pour résoudre ce problème, le système regroupe les utilisateurs ayant des modèles d'utilisation similaires, garantissant que chacun obtient les ressources dont il a besoin sans impacter les autres.

De plus, garder les données fraîches et prêtes pour des recherches rapides peut être un défi pour les premières bases de données, en particulier avec de grands volumes de données. Lorsque vous ajoutez de nouvelles données à une base de données vectorielle, vous souhaitez qu'elles soient immédiatement disponibles pour les recherches. Cependant, les intégrer à l'index principal peut prendre du temps, ce qui peut ralentir les performances. Pour résoudre cela, certains systèmes utilisent un cache temporaire pour les nouvelles données. Cela permet des requêtes rapides tandis que les données sont progressivement intégrées dans l'index principal.

Ces fonctionnalités montrent que les bases de données vectorielles sans serveur offrent des solutions flexibles, économiques et évolutives, permettant des recherches plus précises et approfondies. Elles représentent une option très intéressante pour la plupart des startups !

Que vous construisiez des systèmes de recommandation comme Netflix, Spotify ou toute application pilotée par l'IA, les bases de données vectorielles fournissent la performance, la scalabilité et la flexibilité nécessaires pour gérer de grands ensembles de données complexes.

Je sais que ce blogue était riche en conseils et en informations, peut-être 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 lié ci-dessous pour plus d’informations et d’apprentissages! Beaucoup d’autres blogues s’en viennent et j’ai bien hâte de les partager avec vous!

Merci d’avoir lu jusqu’à la fin et j’espère que ce blogue vous a été utile !

Louis-François Bouchard

Hello! Je suis Louis-François Bouchard, de Montréal, Canada, aussi connu sous le nom de 'What's AI' et j'essaie de partager et de vulgariser tout ce qui est en lien avec l'intelligence artificielle. Mon objectif est de démystifier la «boîte noire» de l'IA pour tous et de sensibiliser les gens aux risques de son utilisation.

https://www.youtube.com/channel/UCIUgms0TE2WhQijbU-IMYyw
Précédent
Précédent

Utiliser un LLM ou ne pas l'utiliser ?

Suivant
Suivant

Méthodes Avancées de Recherche RAG (Hybride, Embedding, Filtrage et plus...)