Passer au contenu principal

Introduction

Le jeu de données LAION 5b contient 5,85 milliards d’embeddings image-texte ainsi que les métadonnées d’image associées. Les embeddings ont été générés à l’aide du modèle Open AI CLIP ViT-L/14. La dimension de chaque vecteur d’embedding est de 768. Ce jeu de données peut être utilisé pour modéliser les aspects liés à la conception, au dimensionnement et aux performances d’une application réelle de recherche vectorielle à grande échelle. Il peut être utilisé aussi bien pour la recherche de texte vers image que pour la recherche d’image à image.

Détails du jeu de données

Le jeu de données complet est disponible sous forme d’un mélange de fichiers npy et Parquet sur the-eye.eu ClickHouse a mis à disposition un sous-ensemble de 100 millions de vecteurs dans un bucket S3. Le bucket S3 contient 10 fichiers Parquet, chacun contenant 10 millions de lignes. Nous recommandons aux utilisateurs d’effectuer d’abord un exercice de dimensionnement afin d’estimer les besoins en stockage et en mémoire pour ce jeu de données en consultant la documentation.

Étapes

1

Créer la table

Créez la table laion_5b_100m pour stocker les embeddings et les attributs associés :
L’id est simplement un entier incrémenté. Les attributs supplémentaires peuvent être utilisés dans des prédicats pour mieux comprendre la recherche de similarité vectorielle combinée au post-filtrage/pré-filtrage, comme expliqué dans la documentation
2

Charger les données

Pour charger le jeu de données à partir de tous les fichiers Parquet, exécutez l’instruction SQL suivante :
Le chargement de 100 millions de lignes dans la table prendra quelques minutes.Sinon, il est possible d’exécuter des instructions SQL individuelles pour charger un nombre précis de fichiers ou de lignes.
3

Exécuter une recherche de similarité vectorielle par force brute

La recherche KNN (k - Nearest Neighbours) ou recherche par force brute consiste à calculer la distance de chaque vecteur du jeu de données par rapport au vecteur d’embedding de recherche, puis à trier ces distances pour obtenir les voisins les plus proches. Il est possible d’utiliser l’un des vecteurs du jeu de données lui-même comme vecteur de recherche. Par exemple :
Query
Response
Notez la latence de la requête afin de pouvoir la comparer avec celle de la requête ANN (utilisant un index vectoriel). Avec 100 millions de lignes, la requête ci-dessus sans index vectoriel peut prendre quelques secondes, voire quelques minutes, pour s’exécuter.
4

Créer un index de similarité vectorielle

Exécutez la requête SQL suivante pour définir et créer un index de similarité vectorielle sur la colonne vector de la table laion_5b_100m :
Les paramètres et les considérations relatives aux performances pour la création et la recherche d’index sont décrits dans la documentation. L’instruction ci-dessus utilise respectivement les valeurs 64 et 512 pour les hyperparamètres HNSW M et ef_construction. Vous devez sélectionner avec soin des valeurs optimales pour ces paramètres en évaluant le temps de construction de l’index et la qualité des résultats de recherche correspondant aux valeurs retenues.La construction et l’enregistrement de l’index peuvent même prendre quelques heures pour l’ensemble du jeu de données de l00 millions, selon le nombre de cœurs CPU disponibles et la bande passante du stockage.
5

Effectuer une recherche ANN

Une fois l’index de similarité vectorielle créé, les requêtes de recherche vectorielle utiliseront automatiquement l’index :
Query
Le chargement initial de l’index vectoriel en mémoire peut prendre quelques secondes ou quelques minutes.
6

Générer des embeddings pour la requête de recherche

Les vecteurs d’embedding du jeu de données LAION 5b ont été générés à l’aide du modèle OpenAI CLIP ViT-L/14.Un exemple de script Python est fourni ci-dessous pour illustrer comment générer par programmation des vecteurs d’embedding à l’aide des API CLIP. Le vecteur d’embedding de recherche est ensuite passé en argument à la fonction cosineDistance() dans la requête SELECT.Pour installer le paquet clip, veuillez consulter le dépôt GitHub d’OpenAI.
Le résultat de la recherche ci-dessus est présenté ci-dessous :
Dernière modification le 2 juillet 2026