Comment les bases de données vectorielles révolutionnent la recherche de données non structurées dans les applications d’IA
Les bases de données vectorielles sont devenues essentielles pour révolutionner la recherche de données non structurées au sein des applications d’IA. L’un de leurs rôles largement reconnus est la génération augmentée par récupération (RAG), un processus qui relie des documents pertinents aux LLMs. Cependant, leurs applications et leurs capacités vont bien au-delà de la RAG ; elles sont plus largement applicables à une variété de différents types de données non structurées, c.-à-d. tout type de données qui ne se conforme pas à un modèle de données prédéfini, comme le texte, les images, l’audio, les molécules et les graphes.
Lors du récent Brazil Unstructured Data Meetup, Frank Liu, responsable de l’intelligence artificielle et du machine learning chez Zilliz, a expliqué comment les bases de données vectorielles transforment le paysage de la recherche de données non structurées dans les applications d’IA. Ses analyses ont mis en lumière les capacités vastes et percutantes de ces bases de données.
Regardez la rediffusion de la présentation de Frank lors du meetup Suivez la démo
Que sont les vecteurs ?
Avant d’aborder les bases de données vectorielles et leur rôle dans les applications d’IA, il est important de comprendre ce que sont les vecteurs, car ils sont les éléments constitutifs des bases de données vectorielles. Un vecteur est une liste de nombres qui encode des informations d’une manière que les ordinateurs peuvent traiter. Imaginez que vous ayez une image, comme celle présentée ci-dessous :
Fig 1- Une image représentée au format vectoriel
Pour vous, c’est une belle fleur, mais pour un ordinateur, cette image doit être convertie dans un format qu’il peut comprendre. C’est là que les embeddings vectoriels entrent en jeu.
L’image de la fleur ci-dessus est transformée en un embedding vectoriel — un tableau structuré de nombres. Chaque nombre dans le vecteur représente une caractéristique particulière de l’image, comme la couleur, la texture ou la forme. La combinaison de ces nombres fournit une représentation compacte et efficace de l’image que l’ordinateur peut utiliser pour diverses tâches, comme rechercher des images similaires, catégoriser des objets, ou même générer de nouvelles images. Voici une visualisation de la façon dont les embeddings vectoriels sont générés et stockés dans une base de données vectorielle comme Milvus.
Fig 2- Processus de génération et de stockage des embeddings vectoriels
Le processus commence par une base de connaissances contenant différents types de données. Les données sont ensuite traitées par des modèles d’embedding, qui les convertissent en vecteurs. Enfin, les vecteurs sont stockés dans une base de données vectorielle comme Milvus, prêts à être récupérés.
L’embedding de données ne se limite pas aux images. Le texte, l’audio et même des types de données plus complexes comme les molécules et les graphes peuvent être transformés en embeddings vectoriels. En représentant les données sous forme de vecteurs, nous pouvons exploiter la puissance des bases de données vectorielles pour effectuer des recherches efficaces et précises.
Voyons comment les bases de données vectorielles sont utilisées dans différents domaines.
Différents cas d’utilisation propulsés par les bases de données vectorielles
Les bases de données vectorielles transforment la façon dont nous gérons et recherchons les données non structurées dans une multitude d’applications. Qu’il s’agisse d’améliorer les capacités des systèmes d’IA ou de formuler des recommandations plus efficaces, les possibilités sont vastes et percutantes. Passons à quelques cas d’utilisation spécifiques propulsés par les bases de données vectorielles.
Génération augmentée par récupération (RAG)
Les bases de données vectorielles transforment la RAG en permettant une récupération plus efficace et sémantiquement significative des informations pertinentes. Les méthodes de recherche traditionnelles basées sur les mots-clés montrent souvent leurs limites lorsqu’il s’agit de traiter des requêtes complexes ou des contextes nuancés. Les bases de données vectorielles répondent à cette limitation en stockant et en recherchant les données en fonction de la similarité sémantique plutôt que de correspondances exactes.
Dans le RAG, les documents sont convertis en vecteurs de grande dimension qui capturent leur signification sémantique. Lorsqu’une requête est reçue, elle est également convertie en vecteur, et la base de données vectorielle trouve rapidement les documents les plus similaires sur le plan sémantique. Cette approche permet une récupération d’informations plus nuancée et sensible au contexte, ce qui est essentiel pour générer des réponses précises et pertinentes.
Prenons l’exemple d’un chatbot de support client pour une entreprise technologique. Lorsqu’un utilisateur demande : « Comment dépanner mon appareil qui ne s’allume pas ? », la base de données vectorielle peut récupérer des documents pertinents même s’ils ne contiennent pas exactement ces mots. Elle peut extraire des informations sur les problèmes d’alimentation, les problèmes de batterie et les étapes générales de dépannage. Le LLM utilise ensuite ces informations récupérées pour générer une réponse complète et contextuellement pertinente, améliorant considérablement la qualité du support client.
Système de recommandation
Les bases de données vectorielles révolutionnent les systèmes de recommandation en permettant des calculs de similarité plus sophistiqués et plus efficaces. Les systèmes de recommandation traditionnels rencontrent souvent des difficultés avec le problème du « cold start » et peuvent être coûteux en calcul lorsqu’ils traitent de grands ensembles de données. Les bases de données vectorielles résolvent ces problèmes en permettant des recherches approximatives du plus proche voisin rapides dans des espaces de grande dimension.
Dans un système de recommandation alimenté par une base de données vectorielle, les utilisateurs et les éléments sont tous deux représentés sous forme de vecteurs dans un espace d’embedding partagé. Ces embeddings capturent des caractéristiques et des préférences complexes, permettant des recommandations plus nuancées. La base de données vectorielle peut trouver rapidement des utilisateurs ou des éléments similaires, permettant une personnalisation en temps réel même avec des ensembles de données massifs.
Par exemple, un service de streaming musical comme Spotify utilise des bases de données vectorielles pour alimenter son moteur de recommandation. Chaque chanson est représentée sous forme de vecteur, capturant divers attributs comme le genre, le tempo, l’ambiance et les habitudes d’écoute. Les préférences des utilisateurs sont également encodées sous forme de vecteurs. Lorsqu’un utilisateur écoute une nouvelle chanson, le système peut trouver rapidement des chansons similaires dans l’espace vectoriel, permettant la découverte de nouvelles musiques qui correspondent aux goûts de l’utilisateur, même si elles proviennent d’un artiste ou d’un genre inconnu.
Recherche de similarité moléculaire
Les bases de données vectorielles transforment la recherche de similarité moléculaire dans la découverte de médicaments en permettant une identification plus efficace et plus précise de composés similaires. Les méthodes traditionnelles reposent souvent sur la similarité de structure 2D, ce qui peut manquer d’importantes similarités conformationnelles 3D ou des relations entre groupes fonctionnels.
Avec les bases de données vectorielles, les images de molécules sont représentées sous forme de vecteurs de grande dimension qui capturent des propriétés structurelles et chimiques complexes. Cela permet aux chercheurs de rechercher des molécules présentant des propriétés similaires ou des activités biologiques potentielles, même si leurs structures 2D semblent différentes. La rapidité des bases de données vectorielles permet également un criblage rapide de vastes bibliothèques chimiques.
Prenons l’exemple d’une entreprise pharmaceutique à la recherche de nouveaux candidats antibiotiques. Elle dispose d’une molécule antibiotique connue qui fonctionne bien mais présente des effets secondaires graves. À l’aide d’une base de données vectorielle, elle peut rechercher rapidement parmi des millions de composés afin de trouver des molécules ayant des propriétés antibactériennes similaires mais potentiellement des profils d’effets secondaires différents. La représentation vectorielle peut capturer des caractéristiques telles que la distribution de charge, les sites de liaison potentiels et la forme 3D, permettant la découverte de molécules structurellement diverses mais fonctionnellement similaires que les recherches de similarité 2D traditionnelles pourraient manquer.
Recherche de similarité multimodale
Les bases de données vectorielles révolutionnent la recherche multimodale en offrant un moyen unifié de représenter et de rechercher différents types de données (texte, images, audio, etc.). Les systèmes de recherche traditionnels ont souvent du mal avec les requêtes intermodales ou avec l’identification de relations entre différents types de données.
Dans un système multimodal alimenté par une base de données vectorielle, tous les types de données sont projetés dans un espace partagé de grande dimension où les similarités peuvent être calculées indépendamment du type de données d’origine. Cela permet des capacités de recherche plus flexibles et plus puissantes, nous permettant de trouver du contenu connexe à travers différentes modalités.
Par exemple, une plateforme d’e-commerce met en œuvre un système de recherche multimodal utilisant des bases de données vectorielles. Un utilisateur peut téléverser l’image d’un meuble qu’il aime et fournir une description textuelle de la couleur et du matériau souhaités. Le système convertit à la fois l’image et le texte en vecteurs dans un espace partagé. Il recherche ensuite dans la base de données vectorielle afin de trouver des produits qui correspondent à la fois au style visuel de l’image et aux attributs spécifiques de la description textuelle. Cela permet aux utilisateurs de trouver exactement ce qu’ils recherchent, même s’ils ne peuvent pas l’exprimer entièrement avec des mots seuls, ce qui améliore considérablement l’expérience d’achat.
Ce ne sont là que quelques cas d’utilisation qui sont révolutionnés par les bases de données vectorielles. Frank a partagé la diapositive suivante avec encore plus de cas d’utilisation.
Fig 3- Cas d’utilisation des bases de données vectorielles
La liste ci-dessus n’est pas exhaustive. Elle n’est qu’une représentation de ce qui est possible lorsqu’il s’agit d’améliorer la recherche de données dans les applications d’IA grâce aux bases de données vectorielles.
Puisque vous comprenez maintenant l’importance des bases de données vectorielles dans divers domaines. Mettons en œuvre l’un des cas d’utilisation afin que vous puissiez les voir en action. Nous utiliserons Milvus, car c’est la base de données vectorielle la plus populaire en termes d’étoiles GitHub.
Mise en œuvre d’un système de recherche de similarité multimodal à l’aide de Milvus, Radient, ImageBind et Meta-Chameleon-7b
Pour mettre en œuvre un système de recherche de similarité multimodal à l’aide des outils ci-dessus. Vous devez les installer dans votre environnement et les importer.
Configuration de votre environnement
Commencez par installer les bibliothèques requises et télécharger les modèles nécessaires.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Voici ce que fait chacune des bibliothèques ci-dessus :
Radient : Crée et exécute des workflows pour traiter et analyser des données multimodales, en intégrant diverses étapes de traitement des données.
yt-dlp : Un outil en ligne de commande pour télécharger des vidéos depuis YouTube. Dans cet article, nous utiliserons cette vidéo du pré-show de Google.
PyMilvus : Le SDK Python permettant d’interagir avec la base de données vectorielle Milvus et Milvus lite, offrant une recherche de similarité efficace et la récupération de données à grande échelle.
Chameleon : Un modèle vision-langage développé par Meta AI, capable de comprendre et de générer du texte à partir d’entrées visuelles, utile pour intégrer des entrées de données multimodales.
Meta-Chameleon-7b : Un modèle spécifique de la série Chameleon, conçu pour des tâches vision-langage avancées, fournissant des réponses tenant compte du contexte en intégrant des données visuelles et textuelles.
ImageBind : Un modèle d’embedding multimodal.
Après avoir installé les bibliothèques, nous devons les importer dans votre code afin de pouvoir utiliser leurs fonctions.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Remarquez que nous importons seulement radient. Cela s’explique par le fait que Radient gère l’intégration et l’utilisation du modèle d’embedding et de PyMilvus au sein de ses workflows. Par conséquent, nous n’avons pas besoin de les importer manuellement.
La fonction make_operator nous permet de créer divers opérateurs qui formeront les éléments constitutifs de notre workflow. La classe Workflow enchaînera ces opérateurs dans une séquence logique.
Après les importations, vous êtes prêt à mettre en œuvre le système de recherche de similarité multimodal.
Création des opérateurs
Commencez par spécifier les tâches spécifiques que le workflow effectuera.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Décomposons chaque opérateur en détail :
read: Il s’agit d’un opérateursourcequi lit le fichier vidéo local. Il prend le chemin du fichier comme paramètre et est responsable du chargement des données vidéo dans notre workflow.demux: Il s’agit d’un opérateurtransformqui démuxe (sépare) la vidéo en images à des intervalles de 5,8 secondes. Cette étape est essentielle pour décomposer le flux vidéo continu en images distinctes pouvant être traitées individuellement.vectorize: Cet opérateur utilise le modèleImageBindpour créer des plongements vectoriels pour des données multimodales. ImageBind est un modèle puissant capable de créer des plongements unifiés pour différentes modalités (comme les images, le texte et l’audio), ce qui nous permet de représenter nos images vidéo dans un espace vectoriel de grande dimension.store: Il s’agit d’un opérateur sink qui insère les données vectorisées dans Milvus lite. Une version légère de Milvus
Après avoir créé les opérateurs, l’étape suivante consiste à créer un workflow à l’aide de ceux-ci.
Construction du workflow d’insertion
Ensuite, nous construisons un workflow pour insérer nos données vidéo traitées dans la base de données Milvus :
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Ce workflow commence par lire le fichier vidéo, puis le démuxe en images individuelles. Chaque image est ensuite vectorisée à l’aide du modèle ImageBind. Les vecteurs obtenus sont stockés dans la base de données Milvus.
Si tout se déroule correctement, vous devriez voir une sortie similaire à celle ci-dessous :
Fig 4- Résultats de l’opération d’insertion
La sortie affiche une confirmation indiquant que votre vidéo a été traitée et insérée dans Milvus. Elle montre le résultat de l’opération d’insertion, indiquant le nombre d’enregistrements insérés, leurs ID et le coût de calcul.
Configuration du workflow de recherche
Après avoir inséré nos données, nous devons configurer un workflow de recherche. Ce workflow nous permettra de trouver des images vidéo pertinentes à partir de requêtes textuelles :
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Ce workflow de recherche comprend deux étapes principales :
L’opérateur
vectorizeprend une entrée textuelle et la convertit en un plongement vectoriel à l’aide d’ImageBind. Cela nous permet de représenter notre requête textuelle dans le même espace vectoriel que nos images vidéo.L’opérateur
searchutilise ensuite ce vecteur pour effectuer une recherche de similarité dans la base de données Milvus, afin de trouver les images vidéo les plus similaires à notre requête.
Puisque nous avons le workflow de recherche, effectuons une recherche.
Exécution d’une recherche multimodale
Il s’agit d’une recherche multimodale, car nous utilisons du texte pour rechercher dans une vidéo. Pour être précis, nous recherchons les images de la vidéo.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Ici, nous définissons une invite de recherche portant sur une tasse à café inhabituelle. Le dictionnaire search_vars spécifie que nous voulons le premier résultat et tous les champs de sortie.
Nous exécutons ensuite le workflow de recherche avec ces entrées. Le workflow vectorise notre invite textuelle, recherche des vecteurs similaires dans Milvus et renvoie les résultats. L’indexation imbriquée [0][0][0] accède au premier (et dans ce cas, unique) résultat de recherche, et ["entity"]["data"] récupère les données réelles associées à ce résultat.
Le code ci-dessus renvoie le chemin de l’image qui correspond le mieux à notre requête.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Visualisons cette image renvoyée pour voir ce qui est inhabituel avec la tasse.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Ce code ouvre le fichier image correspondant à notre résultat de recherche en utilisant PIL (Python Imaging Library) et l’affiche avec matplotlib. Cette représentation visuelle nous aide à comprendre ce que le système a trouvé en réponse à notre requête concernant une tasse à café inhabituelle.
Voici la sortie :
Fig 5- Une personne sortant d’une tasse
Comme vous pouvez le voir, cette image montre une tasse inhabituelle, car on ne peut pas faire tenir une personne dans une tasse normale. L’activité inhabituelle est qu’une personne sort d’une tasse.
Exploiter Meta-Chameleon-7b pour la description d’images
Pour améliorer davantage notre système de recherche multimodale, nous pouvons utiliser le modèle Meta-Chameleon-7b pour générer une description de l’image :
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Ce code initialise le modèle Meta-Chameleon-7b, un modèle vision-langage capable de comprendre et de décrire des images en contexte. Nous lui fournissons à la fois l’image et notre invite textuelle d’origine, ce qui lui permet de générer une description pertinente pour notre requête.
La méthode generate prend une liste d’entrées, incluant le chemin du fichier image, notre invite textuelle et un jeton sentinelle pour marquer la fin de l’entrée. Le modèle génère ensuite une séquence de jetons, que nous décodons en texte lisible par l’humain. Voici un exemple de ce à quoi la sortie devrait ressembler :
Fig 6- Sortie de la description d’une image à l’aide d’un modèle vision-langage
Cette implémentation montre comment des bases de données vectorielles comme Milvus peuvent être intégrées dans des systèmes d’IA plus vastes, permettant une recherche de similarité efficace entre différentes modalités.
Conclusion
Frank a fait du bon travail en nous montrant comment les bases de données vectorielles sont apparues comme une technologie transformatrice dans le domaine de l’IA et de l’apprentissage automatique, en particulier pour la gestion des données non structurées. Comme démontré, leurs applications vont bien au-delà des simples systèmes de génération augmentée par récupération (RAG), révolutionnant divers domaines, notamment le support client, les systèmes de recommandation, la découverte de médicaments et la recherche multimodale. Allez-y et mettez en œuvre des applications d’IA encore plus sophistiquées alimentées par des bases de données vectorielles. Voici quelques ressources à titre de référence.
Pour une compréhension plus détaillée, y compris l’histoire des embeddings, regardez le replay de la présentation du meetup.
Ressources supplémentaires
Continuer à lire

The AWS Outage Was a Wake-Up Call for Vector Database Cross-Region Disaster Recovery
Zilliz Cloud Had the Answer Before the Crisis. Zilliz Cloud is the world's first vector database with native cross-region disaster recovery.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.


