Passer au contenu principal

Introduction

Le jeu de données Hacker News contient 28,74 millions de publications et leurs embeddings vectoriels. Les embeddings ont été générés à l’aide du modèle SentenceTransformers all-MiniLM-L6-v2. La dimension de chaque vecteur d’embedding est de 384. Ce jeu de données peut être utilisé pour explorer les aspects de conception, de dimensionnement et de performances d’une application de recherche vectorielle à grande échelle, en conditions réelles, construite à partir de données textuelles générées par les utilisateurs.

Détails du jeu de données

Le jeu de données complet avec des embeddings vectoriels est mis à disposition par ClickHouse sous la forme d’un seul fichier Parquet dans un bucket S3 Nous recommandons de commencer par un exercice de dimensionnement afin d’estimer les besoins en stockage et en mémoire de ce jeu de données en consultant la documentation.

Étapes

1

Créer la table

Créez la table hackernews pour stocker les publications & leurs embeddings, ainsi que les attributs associés :
L’id est simplement un entier auto-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 du fichier Parquet, exécutez l’instruction SQL suivante :
L’insertion de 28,74 millions de lignes dans la table va prendre quelques minutes.
3

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 hackernews :
Les paramètres et les considérations de performance liés à la création d’index et à la recherche 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 les valeurs optimales de ces paramètres en évaluant le temps de construction de l’index et la qualité des résultats de recherche associés aux valeurs retenues.La construction et l’enregistrement de l’index peuvent même prendre quelques minutes, voire une heure, pour l’ensemble du jeu de données de 28,74 millions, selon le nombre de cœurs CPU disponibles et la bande passante du stockage.
4

Effectuer une recherche ANN

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

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

Sentence Transformers proposent des modèles d’embedding locaux et faciles à utiliser pour capturer le sens sémantique des phrases et des paragraphes.Le jeu de données HackerNews contient des embeddings vectoriels générés à partir du modèle all-MiniLM-L6-v2.Un exemple de script Python est fourni ci-dessous pour illustrer la génération programmatique de vecteurs d’embedding à l’aide du package Python sentence_transformers. Le vecteur d’embedding de recherche est ensuite passé en argument à la fonction cosineDistance() dans la requête `SELECT`.
Voici un exemple d’exécution du script Python ci-dessus et des résultats de la recherche par similarité (seuls 100 caractères de chacun des 20 premiers posts sont affichés) :

Application de démonstration de résumé

L’exemple ci-dessus a illustré la recherche sémantique et la récupération de documents avec ClickHouse.Un exemple d’application d’IA générative très simple mais à fort potentiel est présenté ci-dessous.L’application effectue les étapes suivantes :
  1. Accepte un sujet saisi par l’utilisateur
  2. Génère un vecteur d’embedding pour le sujet à l’aide de SentenceTransformers avec le modèle all-MiniLM-L6-v2
  3. Récupère des publications/commentaires très pertinents via une recherche par similarité vectorielle dans la table hackernews
  4. Utilise LangChain et l’API Chat OpenAI gpt-3.5-turbo pour résumer le contenu récupéré à l’étape #3. Les publications/commentaires récupérés à l’étape #3 sont transmis comme contexte à l’API Chat et constituent le maillon essentiel de Generative AI.
Un exemple d’exécution de l’application de résumé est présenté ci-dessous, suivi du code de l’application. L’exécution de l’application nécessite qu’une clé API OpenAI soit définie dans la variable d’environnement OPENAI_API_KEY. La clé API OpenAI peut être obtenue après inscription sur https://platform.openai.com.Cette application illustre un cas d’usage d’IA générative applicable à de multiples domaines métier, tels que : l’analyse du sentiment client, l’automatisation du support technique, l’exploitation des conversations utilisateurs, les documents juridiques, les dossiers médicaux, les comptes rendus de réunions, les états financiers, etc.
Code de l’application ci-dessus :
Dernière modification le 1 juillet 2026