Préparation des données
download.sh suivant :
process.py est défini comme suit :
seq 0 9 | ....
(Le script Python ci-dessus est très lent (~2 à 10 minutes par fichier), consomme beaucoup de mémoire (41 GB par fichier), et les fichiers CSV obtenus sont volumineux (10 GB chacun) ; soyez donc prudent. Si vous avez suffisamment de RAM, augmentez la valeur de -P1 pour accroître le parallélisme. Si cela reste trop lent, envisagez une meilleure procédure d’ingestion — par exemple en convertissant les fichiers .npy en Parquet, puis en effectuant tout le reste du traitement avec ClickHouse.)
Créer une table
id n’est là qu’à titre d’illustration et que le script la renseigne avec des valeurs non uniques.
Exécuter une recherche de similarité vectorielle par force brute
target est un tableau de 512 éléments et un paramètre client.
Une méthode pratique pour obtenir de tels tableaux sera présentée à la fin de l’article.
Pour l’instant, nous pouvons utiliser comme target l’embedding d’une image aléatoire d’un set LEGO.
Résultat
Effectuer une recherche approximative de similarité vectorielle avec un index de similarité vectorielle
Création d’embeddings avec des UDF
target sans quitter le client. Il est important d’utiliser le même modèle pour créer les données et les nouveaux embeddings utilisés pour les recherches. Les scripts suivants utilisent le modèle ViT-B/32, qui est également celui sur lequel repose le jeu de données.
Embeddings de texte
user_scripts/ de votre répertoire de données ClickHouse, puis rendez-le exécutable (chmod +x encode_text.py).
encode_text.py:
encode_text_function.xml à un emplacement indiqué par <user_defined_executable_functions_config>/path/to/*_function.xml</user_defined_executable_functions_config> dans le fichier de configuration du serveur ClickHouse.
SET param_target=... et écrire facilement des requêtes. Sinon, la fonction encode_text() peut être utilisée directement comme argument de la fonction cosineDistance :
encode_text() elle-même peut nécessiter quelques secondes pour effectuer le calcul et renvoyer le vecteur d’embedding.
Embeddings d’images
encode_image.py
encode_image_function.xml