Passer au contenu principal
Le jeu de données dbpedia contient 1 million d’articles de Wikipedia et leurs embeddings vectoriels, générés à l’aide du modèle text-embedding-3-large d’OpenAI. Ce jeu de données constitue un excellent point de départ pour comprendre les embeddings vectoriels, la recherche par similarité vectorielle et l’IA générative. Nous l’utilisons pour illustrer la recherche approximative des plus proches voisins dans ClickHouse, ainsi qu’une application de questions-réponses simple mais puissante.

Détails du jeu de données

Le jeu de données contient 26 fichiers Parquet hébergés sur huggingface.co. Les fichiers sont nommés 0.parquet, 1.parquet, …, 25.parquet. Pour consulter quelques lignes d’exemple du jeu de données, veuillez visiter cette page Hugging Face.

Créer la table

Créez la table dbpedia pour stocker l’identifiant de l’article, le titre, le texte et le vecteur d’embedding :

Charger la table

Pour charger le jeu de données à partir de tous les fichiers Parquet, exécutez la commande shell suivante :
Sinon, vous pouvez exécuter, comme indiqué ci-dessous, des instructions SQL distinctes pour charger chacun des 25 fichiers Parquet :
Vérifiez qu’un million de lignes sont présentes dans la table dbpedia :
Lecture recommandée : guide OpenAPI « Embeddings vectoriels » La recherche sémantique (également appelée recherche par similarité) à l’aide d’embeddings vectoriels comprend les étapes suivantes :
  • Recevoir une requête de recherche d’un utilisateur en langage naturel, par ex. « Parle-moi de trajets ferroviaires pittoresques », « Romans à suspense se déroulant en Europe », etc.
  • Générer un vecteur d’embedding pour la requête de recherche à l’aide du modèle LLM
  • Trouver les plus proches voisins du vecteur d’embedding de la requête dans le jeu de données
Les plus proches voisins sont des documents, des images ou des contenus correspondant à des résultats pertinents pour la requête de l’utilisateur. Les résultats récupérés constituent l’entrée clé de la génération augmentée par récupération (RAG) dans les applications d’IA générative. La recherche KNN (k - plus proches voisins), ou recherche par force brute, consiste à calculer la distance entre chaque vecteur du jeu de données et le vecteur d’embedding de recherche, puis à trier ces distances pour obtenir les plus proches voisins. Avec le jeu de données dbpedia, une méthode rapide pour observer visuellement la recherche sémantique consiste à utiliser comme vecteurs de recherche des vecteurs d’embedding issus du jeu de données lui-même. Par exemple :
Query
Response
Notez la latence de la requête afin que nous puissions la comparer à celle de l’ANN (à l’aide d’un index vectoriel). Consignez également la latence de la requête avec un cache de fichiers de l’OS à froid et avec max_threads=1 afin d’évaluer l’utilisation réelle des ressources de calcul et de la bande passante du stockage (extrapolez-la à un jeu de données de production contenant des millions de vecteurs !)

Créer un index de similarité vectorielle

Exécutez l’instruction SQL suivante pour définir et créer un index de similarité vectorielle sur la colonne vector :
Les paramètres et les considérations de performance relatifs à la création de l’index et à la recherche sont décrits dans la documentation. La construction et l’enregistrement de l’index peuvent prendre quelques minutes, selon le nombre de cœurs CPU disponibles et la bande passante du stockage. Approximate Nearest Neighbours ou ANN désigne un ensemble de techniques (par ex., des structures de données spécialisées comme des graphes et des forêts aléatoires) qui permettent d’obtenir des résultats bien plus rapidement qu’une recherche vectorielle exacte. La précision des résultats est généralement “suffisamment bonne” pour un usage pratique. De nombreuses techniques approximatives proposent des paramètres permettant d’ajuster le compromis entre la précision des résultats et le temps de recherche. Une fois l’index de similarité vectorielle construit, les requêtes de recherche vectorielle utiliseront automatiquement l’index :
Query
Response

Génération d’embeddings pour une requête de recherche

Les requêtes de recherche par similarité vues jusqu’à présent utilisent comme vecteur de recherche l’un des vecteurs existants de la table dbpedia. Dans les applications réelles, le vecteur de recherche doit être généré à partir d’une requête saisie par l’utilisateur, qui peut être en langage naturel. Ce vecteur de recherche doit être généré à l’aide du même modèle LLM que celui utilisé pour générer les vecteurs d’embedding du jeu de données. Un exemple de script Python est présenté ci-dessous pour montrer comment appeler l’OpenAI API par programmation afin de générer des vecteurs d’embedding à l’aide du modèle text-embedding-3-large. Le vecteur d’embedding de recherche est ensuite transmis comme argument à la fonction cosineDistance() dans la requête SELECT. L’exécution du script nécessite qu’une clé d’API OpenAI soit définie dans la variable d’environnement OPENAI_API_KEY. La clé d’API OpenAI peut être obtenue après inscription sur https://platform.openai.com.

Application de démonstration Q&A

Les exemples ci-dessus ont illustré la recherche sémantique et la récupération de documents avec ClickHouse. Nous présentons ci-dessous une application d’exemple d’IA générative très simple, mais à fort potentiel. L’application exécute les étapes suivantes :
  1. Reçoit un sujet saisi par l’utilisateur
  2. Génère un vecteur d’embedding pour le sujet en appelant l’OpenAI API avec le modèle text-embedding-3-large
  3. Récupère des articles/documents Wikipedia très pertinents à l’aide d’une recherche de similarité vectorielle dans la table dbpedia
  4. Reçoit de l’utilisateur une question libre en langage naturel en rapport avec le sujet
  5. Utilise l’API de chat OpenAI gpt-3.5-turbo pour répondre à la question à partir des connaissances contenues dans les documents récupérés à l’étape #3. Les documents récupérés à l’étape #3 sont transmis comme contexte à l’API de chat et constituent le lien essentiel dans l’IA générative.
Quelques exemples de conversation obtenus lors de l’exécution de l’application de questions-réponses sont d’abord présentés ci-dessous, suivis du code de l’application de questions-réponses. Pour exécuter l’application, une clé d’API OpenAI doit être définie dans la variable d’environnement OPENAI_API_KEY. La clé d’API OpenAI peut être obtenue après inscription sur https://platform.openai.com.
Code :
Dernière modification le 3 juillet 2026