Introduction
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
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
Créer la table
Créez la tablehackernews pour stocker les publications & leurs embeddings, ainsi que les attributs associés :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 documentationCharger les données
Pour charger le jeu de données à partir du fichierParquet, exécutez l’instruction SQL suivante :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 colonnevector de la table hackernews :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.Effectuer une recherche ANN
Une fois l’index de similarité vectorielle construit, les requêtes de recherche vectorielle utiliseront automatiquement cet index :Query
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 Pythonsentence_transformers. Le vecteur d’embedding de recherche
est ensuite passé en argument à la fonction cosineDistance() dans la requête `SELECT`.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 :- Accepte un sujet saisi par l’utilisateur
- Génère un vecteur d’embedding pour le sujet à l’aide de
SentenceTransformersavec le modèleall-MiniLM-L6-v2 - Récupère des publications/commentaires très pertinents via une recherche par similarité vectorielle dans la table
hackernews - Utilise
LangChainet l’API Chat OpenAIgpt-3.5-turbopour 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.
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.