AI Search

Recherche de similarité vectorielle efficace avec Redis : Amélioration de la recherche alimentée par l'IA

A diagram illustrating efficient vector similarity search with Redis.

Améliorer les résultats de recherche avec des embeddings vectoriels et Redis

La capacité de rechercher des informations est cruciale dans le paysage numérique d'aujourd'hui, car les utilisateurs s'attendent à une fonctionnalité de recherche dans presque chaque application et site Web. Pour les architectes et les développeurs, il est impératif d'explorer en continu de nouvelles méthodes et architectures pour améliorer les résultats de recherche. Une approche efficace consiste à utiliser des 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 et Redis

Pour améliorer la fonctionnalité de recherche, de nombreuses organisations exploitent des techniques d'indexation qui transforment leurs données en un espace vectoriel. En représentant les données sous forme de vecteurs, des recherches de similarité peuvent être effectuées pour renvoyer les résultats les plus pertinents.

Dans ce tutoriel complet, nous allons approfondir la manière dont les modèles d'apprentissage profond créent des embeddings vectoriels, indexés efficacement pour des capacités de recherche précises avec Redis. En comprenant cette approche, les architectes et les développeurs peuvent exploiter le potentiel des améliorations basées sur l'IA pour l'expérience de recherche des utilisateurs.

Portée de ce tutoriel

Dans ce tutoriel, nous allons couvrir les étapes clés suivantes :

  • Créer des embeddings vectoriels pour un ensemble de données de produits Amazon
  • Indexer ces embeddings avec Redis
  • Effectuer des recherches pour des vecteurs similaires

De plus, nous analyserons les avantages et les inconvénients de diverses méthodes d'indexation et comment elles peuvent optimiser les performances de recherche.

Premiers pas

Commencez par créer un nouveau répertoire et lancer un notebook Jupyter. Obtenez le fichier CSV de l'ensemble de données à partir d'une source en ligne et stockez-le dans le répertoire ./data/. Assurez-vous d'utiliser Python 3.8 et d'installer les dépendances requises dans la première cellule :

pip install redis pandas sentence-transformers

Importation des bibliothèques nécessaires

Après avoir configuré les dépendances, l'étape suivante consiste à importer les bibliothèques nécessaires et à définir des classes ou fonctions essentielles. Dans ce cas, vous allez importer :

  • Bibliothèque Redis - Pour interagir avec Redis, connue pour sa rapidité et sa flexibilité.
  • VectorField - Représente des champs vectoriels dans Redis.
  • TextField - Représente des champs de texte dans Redis.
  • TagField - Représente des champs de balises dans Redis.
  • Query - Crée des requêtes de recherche pour Redis.
  • Result - Gère les résultats de recherche renvoyés par Redis.

Nous définissons également une classe simple de couleur qui peut être utilisée pour imprimer du texte coloré dans la console.

Chargement des données produit

L'étape suivante consiste à charger les données produit d'Amazon dans un DataFrame Pandas tout en tronquant les longs champs de texte à un maximum de 512 caractères. Cette limite supporte le modèle pre-trained SentenceTransformer. Voici un extrait de code exemple pour exécuter cela :

import pandas as pd

df = pd.read_csv('./data/amazon_products.csv')
df['product_description'] = df['product_description'].str.slice(0, 512)
df = df.dropna(subset=['keywords'])

Connexion à Redis

Après avoir chargé avec succès les données produit dans le DataFrame et filtré les éléments pertinents, connectez-vous à Redis en vous inscrivant pour une instance gratuite via RedisLabs :

  • Créez une nouvelle instance Redis.
  • Copiez les détails de connexion et assurez-vous d'avoir le mot de passe de votre instance Redis.

Génération d'embeddings à l'aide de SentenceTransformer

Ensuite, nous allons générer des embeddings (vecteurs) pour les mots-clés des articles en utilisant le modèle pré-entraîné distilroberta-v1 de Sentence Transformer. Ci-dessous un exemple de code pour configurer :

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('distilroberta-v1')
embeddings = model.encode(df['keywords'].tolist())

Fonctions utilitaires pour l'indexation

Maintenant que nous disposons d'embeddings pour nos produits, nous allons définir des fonctions utilitaires pour simplifier le processus de chargement des données et de création d'index sur les champs Vectoriels :

def load_data():
   ... # logique de chargement ici

def create_index():
   ... # logique de création d'index ici

Comparaison des méthodes d'indexation

Nous allons explorer deux méthodes d'indexation : l'indexation plate et HNSW (Hierarchical Navigable Small World). Chacune a des avantages et des inconvénients uniques en termes de performance :

  • Indexation plate : Simple mais coûteuse en calcul pour de grands ensembles de données.
  • Indexation HNSW : Efficace avec une bonne scalabilité, tirant parti d'une structure de graphe complexe pour des recherches rapides.

Indexation et requête des données

Nous allons d'abord charger et indexer les données produit en utilisant l'indexation plate, puis interroger les cinq voisins les plus proches :

query_vector = ... # définissez votre vecteur de requête ici
result = redis_db.query(Query.Similarity(query_vector)).limit(5)

Interrogation à l'aide d'HNSW

Maintenant, après avoir chargé et indexé les données produit avec HNSW, l'interrogation peut être exécutée de manière similaire :

result_hnsw = redis_db.query(Query.Similarity(query_vector)).limit(5)

Conclusion

Avec l'utilisation d'embeddings vectoriels et de Redis, les organisations peuvent améliorer considérablement l'expérience de recherche de leurs utilisateurs. Ce tutoriel a illustré le processus de création et d'indexation des embeddings vectoriels pour un ensemble de données de produits Amazon et les avantages de chaque méthode d'indexation.

Pour le code complet et des informations supplémentaires, nous vous recommandons de consulter le dépôt GitHub pour plus d'informations.

En lire plus

Integrating ChatGPT and Whisper API into your project for enhanced functionality.
A screenshot showing Bing's new AI chatbot interface with features highlighted.

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.