Améliorer les résultats de recherche avec des embeddings vectoriels et Redis
Dans le paysage numérique d'aujourd'hui, la capacité à rechercher des informations est plus critique que jamais. Les utilisateurs s'attendent à des fonctionnalités de recherche robustes dans presque toutes les applications et tous les sites Web qu'ils rencontrent. Pour élever la qualité des résultats de recherche, les architectes et développeurs recherchent en permanence des méthodes et des architectures innovantes. Une approche prometteuse est l'utilisation d'embeddings vectoriels générés par des modèles d'apprentissage profond, qui améliorent considérablement la précision et la pertinence des résultats de recherche.
Comprendre les embeddings vectoriels
De nombreuses organisations exploitent désormais des techniques d'indexation sophistiquées pour transformer leurs données en espace vectoriel. En représentant les données sous forme de vecteurs, il devient possible d'exécuter des recherches de similarité qui produisent les résultats les plus pertinents. Cet article explorera le processus de création d'embeddings vectoriels et de leur indexation à l'aide de Redis, un puissant stockage de structure de données en mémoire.
Objectifs de ce tutoriel
- Générer des embeddings vectoriels pour un ensemble de données de produits Amazon.
- Indexer ces embeddings en utilisant Redis.
- Effectuer des recherches de vecteurs similaires.
- Évaluer les avantages et les inconvénients des différentes méthodes d'indexation pour améliorer les performances de recherche.
Pour commencer
Pour commencer, créez un nouveau répertoire et créez un notebook Jupyter. Récupérez l'ensemble de données de produits Amazon au format CSV depuis la source respective et stockez-le dans le répertoire ./data/
. Assurez-vous que vous utilisez Python version 3.8 et installez les dépendances suivantes dans la première cellule du notebook :
pip install redis pandas sentence-transformers
Chargement des données dans un DataFrame Pandas
Une fois que vous avez installé les dépendances nécessaires, l'étape suivante consiste à importer les bibliothèques et à définir les classes et fonctions requises. À cette étape, la bibliothèque Redis sera importée pour se connecter à Redis, qui servira de base de données pour le stockage des vecteurs. Vous allez également incorporer des classes des modules redis.commands.search.field
et redis.commands.search.query
, y compris :
- VectorField : Représente les champs vectoriels dans Redis.
- TextField : Représente les champs de texte dans Redis.
- TagField : Représente les champs de tags dans Redis.
- Query : Utilisé pour formuler des requêtes de recherche.
- Result : Représente les résultats de recherche.
Ensuite, vous chargerez les données des produits Amazon dans un DataFrame Pandas, en tronquant les longs champs de texte à un maximum de 512 caractères. Cette longueur respecte les spécifications du générateur d'embeddings de phrase pré-entraîné.
Connexion à Redis
Après avoir chargé les données sur les produits, connectez-vous à une instance Redis. Vous pouvez utiliser un niveau gratuit de RedisLabs ; inscrivez-vous pour un compte gratuit sur redis.com/try-free/. Configurez une nouvelle instance Redis et notez les détails de connexion, car vous aurez besoin du mot de passe pour vous connecter.
Création d'embeddings avec SentenceTransformer
Avec vos données chargées, vous êtes maintenant prêt à créer des embeddings. En utilisant la bibliothèque SentenceTransformer, chargez le modèle pré-entraîné distilroberta-v1 pour générer des embeddings :
model = SentenceTransformer('distilroberta-v1')
embeddings = model.encode(product_keywords)
Après avoir généré les embeddings, assurez-vous de vérifier leurs dimensions pour confirmer qu'ils ont été créés correctement.
Préparation des fonctions utilitaires
Ensuite, définissez trois fonctions utilitaires pour charger les données des produits et créer des index sur les champs vectoriels.
Comparaison des méthodes d'indexation
Deux méthodes courantes pour la recherche de voisins proches approximative dans des espaces de haute dimension sont l'indexation plate et HNSW (Hierarchical Navigable Small World). Bien que l'indexation plate offre une approche simple, s'appuyant sur une recherche brute peut être coûteuse en calcul avec de grands ensembles de données. En revanche, HNSW utilise une structure de graphique hiérarchique, offrant une meilleure scalabilité et des capacités de recherche plus rapides mais nécessitant un réglage plus soigneux des paramètres.
Indexation et interrogation des données
Dans un premier temps, chargez et indexez les données sur les produits en utilisant l'indexation plate :
index_flat = redis_client.index.create_index([(VectorField('embedding'), 'FLOAT32')])
Ensuite, interrogez l'index plat pour trouver les 5 voisins les plus proches en fonction d'un vecteur donné :
results_flat = redis_client.query(Query('(@vector:[*])=>[KNN 5 @embedding $vec]'), query_vec=query_vector)
Maintenant, reproduisez le processus avec l'indexation HNSW :
index_hnsw = redis_client.index.create_index([(VectorField('embedding_hnsw'), 'FLOAT32')], method='HNSW')
Conclusion : En apprendre plus
Ce tutoriel a décrit les étapes nécessaires pour améliorer les résultats de recherche grâce aux embeddings vectoriels et à Redis. Pour le code complet et des détails supplémentaires, visitez notre référentiel GitHub. Adoptez la puissance de la recherche alimentée par l'IA et optimisez l'expérience pour les utilisateurs !
Laisser un commentaire
Tous les commentaires sont modérés avant d'être publiés.
Ce site est protégé par hCaptcha, et la Politique de confidentialité et les Conditions de service de hCaptcha s’appliquent.