Démarrer avec Milvus Hybrid Search
Avec la sortie de Milvus 2.4, nous avons introduit la recherche multi-vectorielle et la possibilité d'effectuer une recherche hybride (recherche multi-vectorielle). Cette nouvelle fonctionnalité améliore la façon dont nous pouvons rechercher et analyser les données en permettant aux utilisateurs d'effectuer une recherche hybride, en effectuant des requêtes simultanées dans plusieurs champs vectoriels et en intégrant les résultats à l'aide de stratégies de reclassement.
La recherche hybride, souvent appelée recherche multi-vectorielle, consiste à effectuer des recherches dans plusieurs champs vectoriels au sein d'un même ensemble de données. Ces vecteurs peuvent représenter différentes facettes des données, utiliser divers [modèles d'intégration] (https://zilliz.com/blog/choosing-the-right-embedding-model-for-your-data) ou employer des méthodes de traitement des données distinctes et combiner les résultats à l'aide de [reclasseurs] (https://zilliz.com/learn/optimize-rag-with-rerankers-the-role-and-tradeoffs).
Dans ce tutoriel, vous apprendrez à exploiter les capacités de recherche hybride de Milvus 2.4 pour améliorer votre recherche. Nous couvrirons les points suivants
Créer des [Sparse Embeddings] (https://zilliz.com/learn/enhancing-information-retrieval-learned-sparse-embeddings)
Créer des encastrements denses
Indexer vos données dans Milvus
Effectuer une recherche multi-vectorielle en utilisant la même collection.
Ce tutoriel utilisera l'ensemble de données eSci, un ensemble complet de données de recherche de produits provenant d'Amazon. En outre, nous utiliserons le modèle BGE-M3 via la bibliothèque pymilvus [models], qui facilite la génération d'une intégration directe dans Milvus.
Introduction à la recherche hybride
La recherche hybride est une technique puissante qui combine les forces des méthodes de recherche éparses et denses afin d'améliorer les résultats de la recherche. Les méthodes traditionnelles de recherche peu dense, bien qu'efficaces dans certains scénarios, souffrent souvent d'une expressivité limitée et d'un manque de flexibilité. La recherche hybride répond à ces limitations en fusionnant les méthodes de recherche éparses et denses, ce qui permet d'obtenir des résultats de recherche plus précis et plus efficaces.
En tirant parti des forces complémentaires des vecteurs épars et denses, la recherche hybride peut saisir à la fois les correspondances exactes et les nuances sémantiques des données. Il en résulte une expérience de recherche plus complète et plus précise. Que vous traitiez du texte, des images ou d'autres types de données, la recherche hybride peut améliorer de manière significative la pertinence et la qualité de vos résultats de recherche.
Comprendre la recherche vectorielle
La recherche vectorielle est un type de recherche qui utilise des vecteurs pour représenter les données. Les vecteurs sont des représentations mathématiques qui capturent l'essence des points de données, ce qui permet de calculer les similitudes entre eux. Dans la recherche vectorielle, les données et les requêtes sont transformées en vecteurs. La similarité entre le vecteur de la requête et les vecteurs des données est ensuite calculée, et les points de données les plus similaires sont renvoyés comme résultats de la recherche.
Cette approche est particulièrement utile pour la recherche de grands ensembles de données, car elle permet une récupération efficace et évolutive des informations pertinentes. La recherche vectorielle peut être appliquée à divers domaines, notamment la recherche d'images et de textes, où elle excelle dans la recherche d'éléments [sémantiquement similaires] (https://zilliz.com/glossary/semantic-similarity). En exploitant la puissance des vecteurs, vous pouvez obtenir des résultats de recherche plus précis et plus significatifs.
Installer et importer les bibliothèques nécessaires et créer des index
! pip install pymilvus[model] datasets
import pandas as pd
from datasets import load_dataset
from pymilvus import (
FieldSchema,
CollectionSchema,
DataType,
Collection,
AnnSearchRequest,
RRFRanker,
connexions,
)
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
Préparer le jeu de données
L'ensemble de données ESCI est conçu pour l'appariement [sémantique] (https://zilliz.com/glossary/semantic-search) des requêtes et des produits. Dans cette section, nous allons préparer l'ensemble de données ESCI. Nous nous concentrerons sur la sélection d'un sous-ensemble de données et nous assurerons qu'elles sont propres et prêtes à être traitées.
Télécharger et sélectionner un sous-ensemble
dataset = load_dataset("tasksource/esci", split="train")
dataset = dataset.select(range(500))
dataset = dataset.filter(lambda x : x["product_locale"] == "us")
jeu de données
Nettoyer les données
Le nettoyage de l'ensemble des données est essentiel pour éviter que des doublons ou des informations manquantes n'entraînent de mauvais résultats de recherche.
source_df = dataset.to_pandas()
df = source_df.drop_duplicates(
subset=["product_text", "product_title", "product_bullet_point", "product_brand"]
)
# Suppression des lignes contenant des valeurs manquantes
df = df.dropna(
subset=["product_text", "product_title", "product_bullet_point", "product_brand"]
)
df.head()
Voici un aperçu de ce que contiennent les données :
example_id query query_id product_id product_locale esci_label small_version large_version product_title product_description product_bullet_point product_brand product_color product_text
0 0 revent 80 cfm 0 B000MOO21W us Irrelevant 0 1 Panasonic FV-20VQ3 WhisperCeiling 190 CFM Ceil... Aucun Les ventilateurs de plafond WhisperCeiling sont dotés d'un... Panasonic Blanc Panasonic FV-20VQ3 WhisperCeiling 190 CFM Ceil...
2 1 revent 80 cfm 0 B07X3Y6B1V us Exact 0 1 Homewerks 7141-80 Bathroom Fan Integrated LED ... Aucune PERFORMANCE EXCEPTIONNELLE : Ce ventilateur de salle de bain Homewerk ... Homewerks 80 CFM Homewerks 7141-80 Ventilateur de salle de bains intégré ...
3 2 revent 80 cfm 0 B07WDM7MQQ us Exact 0 1 Homewerks 7140-80 Ventilateur de salle de bains à montage ... Aucune PERFORMANCE EXCEPTIONNELLE : Ce ventilateur de salle de bain Homewerk ... Homewerks Blanc Homewerks 7140-80 Ventilateur de salle de bains Montage au plafond E...
4 3 revent 80 cfm 0 B07RH6Z8KW us Exact 0 1 Delta Electronics RAD80L BreezRadiance 80 CFM ... Ce produit d'occasion ou remis à neuf a été... Fonctionnement silencieux à 1,5 sones Thermos intégré... DELTA ELECTRONICS (AMERICAS) LTD. Blanc Delta Electronics RAD80L BreezRadiance 80 CFM ...
5 4 revent 80 cfm 0 B07QJ7WYFQ us Exact 0 1 Panasonic FV-08VRE2 Ventilateur avec ré... None La solution design pour les combinaisons ventilateur/lumière... Panasonic Blanc Panasonic FV-08VRE2 Ventilateur de ventilation à ré...
L'ensemble de données étant maintenant préparé et nettoyé, nous pouvons générer des [vector embeddings] (https://zilliz.com/glossary/vector-embeddings) et les [indexer dans Milvus] (https://zilliz.com/blog/Milvus-Index-Types-Supported) pour notre recherche hybride.
Génération d'encodages vectoriels avec BGE-M3
Une fois que vos données sont propres et prêtes, l'étape suivante consiste à générer des embeddings vectoriels. Nous utiliserons le modèle d'intégration BGE-M3 pour transformer les données textuelles brutes en vecteurs numériques que la base de données vectorielles Milvus peut indexer et rechercher efficacement.
Fusionner les données textuelles
Tout d'abord, concaténer les différents champs de texte associés à chaque produit pour former une représentation vectorielle textuelle unifiée. Cela permet de capturer toutes les informations pertinentes sur le produit dans un seul vecteur :
df["texte_fusionné"] = df["titre_du_produit"] + "\N" + df["texte_du_produit"] + "\N" + df["point_du_bullet_produit"]
docs = df["texte_fusionné"].to_list()
Générer les Embeddings
ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")
dense_dim = ef.dim["dense"]
docs_embeddings = ef(docs)
query = "Avez-vous un exemple de produit Panasonic ?"
query_embeddings = ef([query])
Mise en place de votre collection Milvus
Après avoir généré des embeddings, l'étape suivante consiste à stocker ces vecteurs dans Milvus en créant une collection qui peut gérer à la fois les vecteurs épars et les [vecteurs denses] (https://zilliz.com/learn/sparse-and-dense-embeddings).
Se connecter à Milvus
Commencez par établir une connexion à votre serveur Milvus :
from pymilvus import connections
connections.connect()
Définir votre schéma de collecte
fields = [
# Utilise l'identifiant généré automatiquement comme clé primaire
FieldSchema(
name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=True, max_length=100
),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=8192),
FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR),
FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=dense_dim),
]
schema = CollectionSchema(fields, "")
col = Collection("sparse_dense_demo", schema)
Créer des index pour les vecteurs
sparse_index = {"index_type" : "SPARSE_INVERTED_INDEX", "metric_type" : "IP"}
dense_index = {"index_type" : "FLAT", "metric_type" : "COSINE"}
col.create_index("sparse_vector", sparse_index)
col.create_index("dense_vector", dense_index)
Insérer les données dans la collection
entities = [
docs,
docs_embeddings["sparse"],
docs_embeddings["dense"],
]
col.insert(entities)
Exécution de recherches hybrides dans Milvus
Nous pouvons effectuer des recherches hybrides une fois que votre collection Milvus est préparée avec les données et les index nécessaires. Cette étape utilise à la fois des vecteurs épars et des vecteurs denses pour interroger la collection et affiner les résultats à l'aide d'un reclasseur.
def query_hybrid_search(query : str) :
query_embeddings = ef([query])
sparse_req = AnnSearchRequest(
query_embeddings["sparse"], "sparse_vector", {"metric_type" : "IP"}, limit=2
)
dense_req = AnnSearchRequest(
query_embeddings["dense"], "dense_vector", {"metric_type" : "COSINE"}, limit=2
)
res = col.hybrid_search(
[sparse_req, dense_req], rerank=RRFRanker(), limit=2, output_fields=["text"]
)
return res
Cette fonction génère des embeddings pour une requête d'entrée. Elle construit ensuite deux objets AnnSearchRequest pour les vecteurs clairsemés et denses, en spécifiant le type de métrique de similarité à utiliser (IP pour le produit intérieur et COSINE pour la similarité en cosinus). La méthode hybrid_search** combine les résultats des deux vecteurs en utilisant un RRFRanker, qui reclasse les résultats combinés pour donner la priorité aux correspondances les plus pertinentes.
Un exemple de recherche vectorielle
Pour voir cette fonction en action, effectuons une recherche hybride avec une requête pratique :
query_hybrid_search("Avez-vous un produit Homewerks ?")[0]
Sortie
['id : 449353344520491318, distance : 0.032786883413791656, entity : {\'text\' : "Homewerks 7141-80 Ventilateur de salle de bain avec lumière LED intégrée, montage au plafond, 1.1 sones, 80 CFM\NHomewerks 7141-80 Ventilateur de salle de bain avec lumière LED intégrée, montage au plafond, 1.1 sones, 80 CFM\NHomewerks\n80 CFM\none\nOUTSANDING PERFORMANCE : Ce ventilateur de salle de bain Homewerk\'s assure le confort dans votre maison en éliminant silencieusement l'humidité dans la salle de bain. Ce ventilateur d'extraction a une puissance de 1,1 son à 80 PCM, ce qui signifie qu'il est capable de gérer des espaces allant jusqu'à 80 pieds carrés et qu'il est très silencieux. Le ventilateur de salle de bain aide à éliminer les odeurs désagréables : Lors du nettoyage de la salle de bain ou des toilettes, des produits chimiques désagréables sont utilisés et ils peuvent laisser une odeur désagréable. Les ventilateurs de salle de bains Homewerk peuvent aider à éliminer cette odeur grâce à leur puissant système de ventilation ...]
Recherche hybride vs simple recherche de similarité vectorielle
L'utilisation d'encastrements denses uniquement au lieu d'un mélange d'encastrements denses et épars peut poser des problèmes avec les requêtes qui dépendent des correspondances exactes de mots-clés ou des distinctions catégorielles de données, que les [encastrements épars] (https://zilliz.com/learn/enhancing-information-retrieval-learned-sparse-embeddings) peuvent bien gérer.
Par exemple, si l'on recherche un attribut très spécifique, comme "frais de port inclus". Les encastrements denses peuvent récupérer un large éventail d'éléments liés aux mots-clés principaux, tels que le type de produit ou la marque, mais manquer l'aspect crucial de la "livraison incluse".
Comparons l'utilisation d'un moteur de recherche vectoriel hybride et l'utilisation d'une recherche vectorielle simple avec des encastrements denses :
def query_dense_search(query : str) :
query_embeddings = ef([query])
search_param = {
"data" : query_embeddings["dense"],
"anns_field" : "dense_vector",
"param" : {"metric_type" : "COSINE"},
"limit" : 2,
"output_fields" : ["text"],
}
res_dense = col.search(**search_param)
return res_dense
> query_dense_search("shipping included")
[
{
"id" : "449353344520491390",
"distance" : 0.5341320037841797,
"entité" : {
"text" : "BAZIC Enveloppe blanche auto-scellée 3 5/8" x 6 1/2" #6, sans fenêtre Enveloppes d'expédition, Peel & Seal Mailer for Business Invoice Check (100/Pack), 1-PacknBAZIC Enveloppe blanche auto-scellée 3 5/8" x 6 1/2" #6, sans fenêtre Enveloppes d'expédition, Enveloppe postale autocollante pour chèque de facture d'entreprise (100/paquet), 1 paquetnBAZIC Produitsn#6 3/4 (100-count)n<p><strong>BACK TO BAZIC</strong></p> <p>Notre objectif est d'offrir à chaque client des fournitures durables à un coût abordable. Depuis 1998, nous avons tenu cette promesse et nous continuerons à nous améliorer chaque année. Nous avons bâti notre marque sur l'intégrité et la qualité, de sorte que les clients savent exactement à quoi s'attendre.</p> <p><strong>ÉGALEMENT AUX VALEURS</strong></p> <p>Nous sommes une entreprise axée sur les valeurs, guidée par les principes de l'excellence grâce à une conception solide des produits à un coût peu élevé. Notre engagement envers ces valeurs se reflète dans notre volonté d'améliorer les produits actuels et de développer de nouveaux produits passionnants pour nos consommateurs. Nous prospérons grâce à l'imagination, à la passion et au leadership. Nous avons d'excellents produits et nous continuerons à répondre aux attentes de nos clients. </p> <p><strong>SUCCÈS BASÉ SUR LA SATISFACTION</strong></p> <p>Siège social à Los Angeles, Californie, États-Unis. Pour chaque produit que nous envoyons, nous nous attendons à ce que nos clients soient satisfaits à 100 %. Notre succès découle de la satisfaction individuelle des consommateurs. Nous créons des produits que les gens veulent recommander à d'autres.</p>n#6-3/4 SELF-SEAL WHITE ENVELOPPES. Ces enveloppes auto-scellantes de 3 5/8" x 6 1/2" pouces sont conçues pour vous faire gagner du temps et de l'argent. Elles vous permettent d'effectuer vos envois en un temps record.nSECURE. Il suffit de décoller et de sceller pour créer un sceau solide et durable sans léchage ni humidification. Notre système d'auto-scellage est rapide et facile à mettre en œuvre, et il est garanti que l'enveloppe restera scellée sans avoir besoin de ruban adhésif ou de bâtons de colle. Les enveloppes sont fabriquées avec un panneau frontal sans fenêtre pour faciliter l'impression, l'étiquetage ou l'adressage à la main, ce qui est parfait pour les envois commerciaux rapides et en masse.nWHITE 20LB STOCK. Parfaites pour un usage professionnel quotidien, ces enveloppes blanches standard sont fabriquées à partir d'un papier épais et durable de 20 lb et maintiennent en toute sécurité les dossiers lourds pendant le transport.nMULTI-POSITION. Ces enveloppes peuvent facilement contenir des factures, des lettres, des chèques, des cartes-cadeaux, etc. Ces enveloppes peuvent être utilisées pour pratiquement tout ce dont vous avez besoin !"
}
},
Idem pour la recherche hybride
> query_hybrid_search("shipping included")
[
{
"id" : "449353344520491358",
"distance" : 0.016393441706895828,
"entité" : {
"text" : "ASURION Plan de protection de 4 ans pour les rénovations domiciliaires $20-29.99nASURION Plan de protection de 4 ans pour les rénovations domiciliaires $20-29.99nASURIONnNonenAsurion vous aide à trouver les plans de protection des produits qui répondent à vos besoins. Les produits tombent en panne - souvent au moment le plus inopportun. C'est une bonne chose que vous soyez couvert, car aucun autre plan ne peut protéger vos biens comme le fait un plan de protection Asurion. En d'autres termes, les plans de protection Asurion couvrent vos produits lorsque vous en avez le plus besoin grâce à un processus de réclamation rapide et facile. Achetez un plan de protection auprès d'une entreprise que vous connaissez et en laquelle vous avez confiance. Ajoutez un plan de protection Asurion à votre panier dès aujourd'hui ! Veuillez consulter le "Guide de l'utilisateur [pdf]" ci-dessous pour connaître les conditions détaillées relatives à ce plan.nPAS DE COÛT SUPPLÉMENTAIRE : Vous ne payez rien pour les réparations - pièces, main d'œuvre et frais d'expédition inclus.n
}
}
]
Ici, nous pouvons voir qu'une recherche hybride peut trouver un produit où "shipping" est inclus, alors que les embeddings denses vont plus vers un résultat où vous pouvez expédier quelque chose.
Conclusion
Tout au long de ce tutoriel, nous avons exploré une nouvelle fonctionnalité de Milvus 2.4, en nous concentrant sur la recherche hybride, qui permet d'effectuer des recherches vectorielles sur différents types d'enchâssements de données.
N'hésitez pas à consulter Milvus et le code sur Github, et à partager vos expériences avec la communauté en rejoignant notre Discord.
Effectuer une recherche hybride
La recherche hybride consiste à combiner des méthodes d'extraction denses et éparses afin d'améliorer les résultats de la recherche. Le processus comprend généralement les étapes suivantes :
Préparation des données : Préparer les données en les convertissant en vecteurs. Cette opération peut être réalisée à l'aide de différentes techniques, telles que l'intégration de mots pour les données textuelles ou l'intégration d'images (https://zilliz.com/learn/image-embeddings-for-enhanced-image-search) pour les données d'images. En transformant les données brutes en vecteurs numériques, vous permettez une indexation et une recherche efficaces.
Créer des index : Créez des index pour les vecteurs de données. Les index sont des structures de données qui permettent une recherche et une récupération rapides des données. Dans Milvus, vous pouvez créer des index pour les vecteurs peu denses et denses, ce qui garantit un traitement rapide et précis de vos requêtes de recherche.
Effectuer une recherche hybride : Effectuez une recherche hybride en combinant les méthodes de recherche dense et clairsemée. Des techniques telles que la fusion réciproque des rangs peuvent être utilisées pour fusionner les résultats des deux méthodes de recherche, produisant un classement final qui équilibre la précision et le rappel. Cette étape est cruciale pour tirer parti des atouts des vecteurs denses et peu denses.
Récupérer les résultats : Récupérer les résultats de la recherche en fonction du classement final. Les résultats de la recherche peuvent être filtrés et affinés à l'aide de diverses techniques, telles que le filtrage par attributs. Cela permet de s'assurer que les résultats les plus pertinents et de haute qualité sont présentés à l'utilisateur.
La recherche hybride offre plusieurs avantages, notamment des résultats de recherche améliorés, une efficacité accrue et une plus grande flexibilité. Elle peut être utilisée pour diverses applications, telles que la recherche d'images et de textes, et peut être mise en œuvre à l'aide de diverses techniques, telles que la fusion des rangs réciproques et les méthodes vectorielles. En effectuant une recherche hybride, vous pouvez obtenir une expérience de recherche plus complète et plus précise, adaptée aux besoins spécifiques de votre application.
Continuer à lire

3 Easiest Ways to Use Claude Code on Your Mobile Phone
Run Claude Code from your phone with Remote Control, Happy Coder, or SSH + Tailscale. Comparison table, setup steps, and tools for typing, memory, and parallel tasks.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by artificial intelligence that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.
