Avez-vous déjà recherché de « vieilles comédies en noir et blanc » pour ensuite être bombardé par un mélange de films d'action modernes ? Frustrant, non ? C'est le défi des moteurs de recherche traditionnels : ils ont souvent du mal à comprendre les nuances de nos requêtes, nous laissant parcourir des résultats non pertinents.
C'est là qu'intervient le filtrage intelligent. Il change la donne en utilisant les métadonnées et la recherche vectorielle pour fournir des résultats de recherche qui correspondent vraiment à votre intention. Imaginez trouver exactement les comédies classiques dont vous rêvez, sans tracas.
Nous verrons ce qu'est le filtrage intelligent, comment il fonctionne et pourquoi il est essentiel pour créer de meilleures expériences de recherche. Découvrons la magie derrière cette technologie et explorons comment elle peut révolutionner votre façon de rechercher.
La recherche de vecteurs est un outil puissant qui aide les ordinateurs à comprendre la signification des données, et pas seulement les mots eux-mêmes. Au lieu de faire correspondre des mots-clés, il se concentre sur les concepts et les relations sous-jacents. Imaginez que vous recherchiez « chien » et que vous obteniez des résultats incluant « chiot », « canin » et même des images de chiens. C'est la magie de la recherche vectorielle !
Comment ça marche ? Eh bien, il transforme les données en représentations mathématiques appelées vecteurs. Ces vecteurs sont comme des coordonnées sur une carte, et les points de données similaires sont plus rapprochés dans cet espace vectoriel. Lorsque vous recherchez quelque chose, le système trouve les vecteurs les plus proches de votre requête, vous donnant des résultats sémantiquement similaires.
Bien que la recherche vectorielle soit fantastique pour comprendre le contexte, elle est parfois insuffisante lorsqu'il s'agit de tâches de filtrage simples. Par exemple, trouver tous les films sortis avant 2000 nécessite un filtrage précis, et pas seulement une compréhension sémantique. C'est là qu'intervient le filtrage intelligent pour compléter la recherche vectorielle.
Bien que le vecteur nous rapproche de la compréhension du véritable sens des requêtes, il existe encore un écart entre ce que veulent les utilisateurs et ce que proposent les moteurs de recherche. Les requêtes de recherche complexes telles que « les premiers films de comédie avant 2000 » peuvent encore constituer un défi. La recherche sémantique pourrait comprendre les concepts de « comédie » et de « films », mais elle pourrait avoir du mal à comprendre les spécificités de « premier » et « avant 2000 ».
C’est là que les résultats commencent à devenir compliqués. Nous pourrions avoir un mélange d’anciennes et de nouvelles comédies, ou même des drames inclus par erreur. Pour réellement satisfaire les utilisateurs, nous avons besoin d’un moyen d’affiner ces résultats de recherche et de les rendre plus précis. C'est là que les préfiltres entrent en jeu.
Le filtrage intelligent est la solution à ce défi. Il s'agit d'une technique qui utilise les métadonnées d'un ensemble de données pour créer des filtres spécifiques, affinant les résultats de recherche et les rendant plus précis et efficaces. En analysant les informations sur vos données, telles que leur structure, leur contenu et leurs attributs, Smart Filtering peut identifier des critères pertinents pour filtrer votre recherche.
Imaginez que vous recherchiez des « films comiques sortis avant 2000 ». Le filtrage intelligent utiliserait des métadonnées telles que le genre, la date de sortie et potentiellement même des mots-clés pour créer un filtre qui inclut uniquement les films correspondant à ces critères. De cette façon, vous obtenez une liste exacte de ce que vous voulez, sans le bruit inutile.
Examinons plus en détail le fonctionnement du filtrage intelligent dans la section suivante.
Le filtrage intelligent est un processus en plusieurs étapes qui consiste à extraire des informations de vos données, à les analyser et à créer des filtres spécifiques en fonction de vos besoins. Décomposons-le :
Extraction de métadonnées : la première étape consiste à collecter des informations pertinentes sur vos données. Cela inclut des détails tels que :
Génération de pré-filtres : une fois que vous disposez des métadonnées, vous pouvez commencer à créer des pré-filtres. Il s'agit de conditions spécifiques que les données doivent remplir pour être incluses dans les résultats de recherche. Par exemple, si vous recherchez des films comiques sortis avant 2000, vous pouvez créer des pré-filtres pour :
Intégration avec la recherche vectorielle : La dernière étape consiste à combiner ces pré-filtres avec votre recherche vectorielle. Cela garantit que la recherche vectorielle ne prend en compte que les points de données qui correspondent à vos critères prédéfinis.
En suivant ces étapes, le filtrage intelligent améliore considérablement la précision et l'efficacité de vos résultats de recherche.
Extraction de métadonnées : dans le but de simplifier les choses, nous utiliserons des exemples de données et définirons manuellement les métadonnées. Reportez-vous : get_docs_metadata dans prepare_test_data.py
.
Génération de pré-filtres : nous générerons les pré-filtres en deux étapes.
Étape 1 : Filtre basé sur les métadonnées
Cette étape comprend la génération d'un filtre basé sur les métadonnées. Nous transmettrons la requête utilisateur et les métadonnées à un LLM et générerons le filtre de métadonnées.
Nous utiliserons le query_constructor qui est initialisé avec ce DEFAULT_SCHEMA_PROMPT.
Remarque : Mettez à jour l'invite et les quelques exemples de prises de vue en fonction de votre cas d'utilisation.
Par exemple : si les métadonnées contiennent genre
et release_date
et que l'utilisateur demande des films de genre action
sortis avant 2020, nous pouvons utiliser LLM pour générer un filtre comme ci-dessous :
{"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}
Étape 2 : Filtrage basé sur le temps
Dans cette étape, nous traiterons les cas où l'utilisateur demande le type d'informations latest
, most recent
et earliest
. Nous devrons interroger les données réelles pour récupérer ces informations. Nous utiliserons l'agent LLM dans cette étape pour interroger la collection mongodb à l'aide de l'outil exécuteur : QueryExecutorMongoDBTool Nous générons le filtre basé sur le temps dans generate_time_based_filter. Nous utiliserons également le pre_filter généré lors de la première étape du $match
dans l'étape d'agrégation. Par exemple : si l'utilisateur souhaite le dernier film, l'agent LLM exécutera la requête d'agrégation ci-dessous à l'aide de l'outil exécuteur :
Invoking: `mongo_db_executor` with `{'pipeline': '[{"$match": {"$and": [{"genre": {"$in": ["anime"]}}, {"release_date": {"$lt": "2024-01-01"}}]}}, { "$sort": { "release_date": -1 } }, { "$limit": 1 }, { "$project": { "release_date": 1 } }]'}`
Intégration avec Vector Search : Le pré-filtre généré sera utilisé avec le récupérateur MongoDBAtlasVectorSearch :
retriever = vectorstore.as_retriever(
search_kwargs={ ' pre_filter ' : pre_filter}
)
Créer un nouvel environnement Python
python3 -m venv env
source env/bin/activate
Installer les exigences
pip3 install -r requirements.txt
Définir les configurations dans config.yaml
database_name: < your database name >
collection_name: < your collection name >
vector_index_name: default
embedding_model_dimensions: 1536
similarity: cosine
model: gpt-4o
embedding_model: text-embedding-ada-002
Définir les variables d'environnement
export OPEN_AI_API_KEY = " "
export OPEN_API_BASE = " "
# headers are optional
export OPEN_API_DEFAULT_HEADERS= " "
export MONGO_URI= " "
Initialisez la collection mongodb avec des exemples de données. Cette commande indexera certains exemples de données et créera également un index de recherche vectorielle sur la collection.
python3 rag/initialize_mongo_collection.py
python3 rag/main.py --queries < list of queries in json format >
python3 rag/main.py --queries ' ["I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010", "Recommend an anime movie released before 2023 with the latest release date"] '
Pré_filtres générés :
Requête d'entrée : "I want to watch an anime genre movie", "Recommend a thriller or action movie release after Feb, 2010"
Sortir:
Requête d'entrée : "Recommend a thriller or action movie release after Feb, 2010"
Sortir:
Requête d'entrée : "Recommend an anime movie released before 2023 with the latest release date"
Sortir:
Le filtrage intelligent apporte de nombreux avantages, ce qui en fait un outil précieux pour améliorer les expériences de recherche :
Précision de recherche améliorée : en ciblant précisément les données qui correspondent à votre requête, le filtrage intelligent augmente considérablement la probabilité de trouver des résultats pertinents. Plus besoin de parcourir des informations non pertinentes.
Résultats de recherche plus rapides : étant donné que le filtrage intelligent réduit la portée de la recherche, le système peut traiter les informations plus efficacement, ce qui conduit à des résultats plus rapides.
Expérience utilisateur améliorée : lorsque les utilisateurs trouvent rapidement et facilement ce qu'ils recherchent, cela entraîne une plus grande satisfaction et une meilleure expérience globale.
Polyvalence : le filtrage intelligent peut être appliqué à divers domaines, des recherches de produits de commerce électronique aux recommandations de contenu, ce qui en fait un outil polyvalent.
En exploitant les métadonnées et en créant des préfiltres ciblés, le filtrage intelligent vous permet de fournir des résultats de recherche qui répondent réellement aux attentes des utilisateurs.
Smart Filtering est un outil puissant qui transforme les expériences en comblant le fossé entre l'intention de l'utilisateur et les résultats. En exploitant la puissance des métadonnées et de la recherche vectorielle, il fournit des résultats de recherche plus précis, pertinents et efficaces.
Que vous construisiez une plate-forme de commerce électronique, un système de recommandation de contenu ou toute autre application reposant sur une recherche efficace, l'intégration du filtrage intelligent peut améliorer considérablement la satisfaction des utilisateurs et générer de meilleurs résultats.
En comprenant les principes fondamentaux du filtrage intelligent, vous êtes équipé pour explorer son potentiel et le mettre en œuvre dans vos projets. Alors pourquoi attendre ? Commencez dès aujourd’hui à tirer parti de la puissance du filtrage intelligent et révolutionnez votre jeu de recherche !
Inspiré par Self Query Retriever de LangChain.