Come iniziare con la ricerca ibrida Milvus
Con il rilascio di Milvus 2.4, abbiamo introdotto la ricerca multivettoriale e la possibilità di fare ricerca ibrida (ricerca multivettoriale). Questa nuova funzionalità migliora le modalità di ricerca e analisi dei dati, consentendo agli utenti di condurre una ricerca ibrida, eseguendo interrogazioni simultanee su più campi vettoriali e integrando i risultati con strategie di riordino.
La ricerca ibrida, spesso definita ricerca multivettoriale, consiste nell'effettuare ricerche su diversi campi vettoriali all'interno dello stesso set di dati. Questi vettori possono rappresentare diverse sfaccettature dei dati, utilizzare diversi [modelli di incorporamento] (https://zilliz.com/blog/choosing-the-right-embedding-model-for-your-data), o impiegare metodi di elaborazione dei dati distinti e combinare i risultati utilizzando [ri-ranker] (https://zilliz.com/learn/optimize-rag-with-rerankers-the-role-and-tradeoffs).
In questa esercitazione imparerete a sfruttare le capacità di ricerca ibrida di Milvus 2.4 per migliorare la vostra ricerca. Verranno trattati i seguenti argomenti:
Creare Sparse Embeddings
Creare le incorporazioni dense
Indicizzare i dati in Milvus
Eseguire una ricerca multivettoriale utilizzando la stessa collezione.
Questa esercitazione utilizzerà il dataset eSci, un dataset completo di ricerca di prodotti di Amazon. Inoltre, utilizzeremo il modello BGE-M3 tramite la libreria pymilvus[models], che facilita la generazione di incorporazioni dirette in Milvus.
Introduzione alla ricerca ibrida
La ricerca ibrida è una tecnica potente che combina i punti di forza dei metodi di reperimento sparsi e densi per migliorare i risultati della ricerca. I metodi di reperimento tradizionali, pur essendo efficaci in alcuni scenari, soffrono spesso di una limitata espressività e di una scarsa flessibilità. La ricerca ibrida affronta questi limiti unendo i metodi di reperimento sparsi e densi, consentendo di ottenere risultati di ricerca più accurati ed efficienti.
Sfruttando i punti di forza complementari dei vettori sparsi e di quelli densi (https://zilliz.com/learn/sparse-and-dense-embeddings), la ricerca ibrida è in grado di cogliere sia le corrispondenze esatte sia le sfumature [semantiche] (https://zilliz.com/glossary/semantic-search) dei dati. Il risultato è un'esperienza di ricerca più completa e precisa. Che si tratti di testo, immagini o altri tipi di dati, la ricerca ibrida può migliorare significativamente la pertinenza e la qualità dei risultati di ricerca.
Capire la ricerca vettoriale
La ricerca vettoriale è un tipo di ricerca che utilizza i vettori per rappresentare i dati. I vettori sono rappresentazioni matematiche che catturano l'essenza dei punti di dati, consentendo di calcolare le somiglianze tra di essi. Nella ricerca vettoriale, sia i dati che le query di ricerca vengono trasformati in vettori. La somiglianza tra il vettore della query e i vettori dei dati viene quindi calcolata e i punti di dati più simili vengono restituiti come risultati della ricerca.
Questo approccio è particolarmente utile per la ricerca di grandi insiemi di dati, in quanto consente di recuperare in modo efficiente e scalabile le informazioni rilevanti. La ricerca vettoriale può essere applicata a vari domini, tra cui la ricerca di immagini e testi, dove eccelle nel trovare elementi [semanticamente simili] (https://zilliz.com/glossary/semantic-similarity). Sfruttando la potenza dei vettori, è possibile ottenere risultati di ricerca più accurati e significativi.
Installare e importare le librerie necessarie e creare gli indici
pip install pymilvus[model] datasets
importare pandas come pd
da datasets importare load_dataset
da pymilvus import (
FieldSchema,
CollectionSchema,
DataType,
Collezione,
AnnSearchRequest,
RRFRanker,
connessioni,
)
da pymilvus.model.hybrid import BGEM3EmbeddingFunction
Preparare il dataset
Il dataset ESCI è progettato per la corrispondenza semantica di query e prodotti. In questa sezione, prepareremo il dataset ESCI. Ci concentreremo sulla selezione di un sottoinsieme dei dati e ci assicureremo che sia pulito e pronto per l'elaborazione.
Scaricare e selezionare un sottoinsieme
dataset = load_dataset("tasksource/esci", split="train")
dataset = dataset.select(range(500))
dataset = dataset.filter(lambda x: x["product_locale"] == "us")
set di dati
Pulire i dati
La pulizia del set di dati è cruciale per evitare che i risultati della ricerca siano causati da duplicati o informazioni mancanti.
source_df = dataset.to_pandas()
df = source_df.drop_duplicates(
subset=["product_text", "product_title", "product_bullet_point", "product_brand"]
)
# Eliminare le righe con valori mancanti
df = df.dropna(
subset=["product_text", "product_title", "product_bullet_point", "product_brand"]
)
df.head()
Ecco una rapida occhiata a ciò che i dati includono:
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 Irrilevante 0 1 Panasonic FV-20VQ3 WhisperCeiling 190 CFM Ceil... I ventilatori WhisperCeiling di Panasonic sono caratterizzati da un... Panasonic Bianco Panasonic FV-20VQ3 WhisperCeiling 190 CFM Ceil...
2 1 revent 80 cfm 0 B07X3Y6B1V us Exact 0 1 Homewerks 7141-80 Ventilatore per bagno con LED integrato ... Nessuna prestazione eccezionale: questo ventilatore da bagno Homewerk ... Homewerks 80 CFM Homewerks 7141-80 Ventilatore da bagno con LED integrato ...
3 2 revent 80 cfm 0 B07WDM7MQQ us Exact 0 1 Homewerks 7140-80 Ventilatore da bagno a soffitto E... Nessuna prestazione eccezionale: questo ventilatore da bagno Homewerk ... Homewerks Bianco Homewerks 7140-80 Ventilatore da bagno con montaggio...
4 3 revent 80 cfm 0 B07RH6Z8KW us Exact 0 1 Delta Electronics RAD80L BreezRadiance 80 CFM ... Questo prodotto usato o ricondizionato è stato... Funzionamento silenzioso a 1,5 sones\nTermos incorporato... DELTA ELECTRONICS (AMERICAS) LTD. Bianco Delta Electronics RAD80L BreezRadiance 80 CFM ...
5 4 revent 80 cfm 0 B07QJ7WYFQ us Exact 0 1 Panasonic FV-08VRE2 Ventola di ventilazione con... Nessuna La soluzione di design per le combinazioni ventilatore/luce... Panasonic Bianco Panasonic FV-08VRE2 Ventilatore con attacco a...
Con il set di dati ora preparato e pulito, possiamo generare embeddings vettoriali e indicizzarli in Milvus per la nostra ricerca ibrida.
Generazione di incorporazioni vettoriali con BGE-M3
Una volta che i dati sono puliti e pronti, il passo successivo è quello di generare embeddings vettoriali. Utilizzeremo il modello di embedding BGE-M3 per trasformare i dati testuali grezzi in vettori numerici che il database vettoriale di Milvus può indicizzare e ricercare efficacemente.
Unire i dati di testo
Per prima cosa, concatenare i diversi campi di testo associati a ciascun prodotto per formare una rappresentazione vettoriale di testo unificata. Questo aiuta a catturare tutte le informazioni rilevanti sul prodotto in un unico vettore:
df["merged_text"] = df["product_title"] + "\n" + df["product_text"] + "\n" + df["product_bullet_point"]
docs = df["merged_text"].to_list()
Generare le incorporazioni
ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")
dense_dim = ef.dim["dense"]
docs_embeddings = ef(docs)
query = "Avete un esempio di un prodotto Panasonic?".
query_embeddings = ef([query])
Impostazione della raccolta Milvus
Dopo aver generato gli embeddings, il passo successivo è quello di memorizzare questi vettori in Milvus, creando una collezione che possa gestire sia vettori sparsi che [vettori densi] (https://zilliz.com/learn/sparse-and-dense-embeddings).
Connettersi a Milvus
Iniziare a stabilire una connessione al server Milvus:
da pymilvus import connessioni
connections.connect()
Definire lo schema della raccolta
campi = [
# Usa l'id generato automaticamente come chiave primaria
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)
Creare indici per i vettori
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)
Inserire i dati nella collezione
entità = [
docs,
docs_embeddings["sparse"],
docs_embeddings["dense"],
]
col.insert(entities)
Esecuzione di ricerche ibride in Milvus
È possibile eseguire ricerche ibride una volta che la collezione Milvus è stata preparata con i dati e gli indici necessari. Questa fase utilizza sia vettori sparsi che vettori densi per interrogare la collezione e raffinare i risultati utilizzando un riarrangiatore.
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"]
)
restituire res
Questa funzione genera embeddings per una query in ingresso. Costruisce quindi due oggetti AnnSearchRequest per i vettori sparsi e densi, specificando il tipo di metrica di similarità da utilizzare (IP per il prodotto interno e COSINE per la similarità del coseno). Il metodo hybrid_search** combina i risultati di entrambi i vettori usando un RRFRanker, che riordina i risultati combinati per dare priorità alle corrispondenze più rilevanti.
Un esempio di ricerca vettoriale
Per vedere questa funzione in azione, eseguiamo una ricerca ibrida con una query pratica:
query_hybrid_search("Hai un prodotto Homewerks?")[0]
Output
['id: 449353344520491318, distanza: 0.032786883413791656, entità: {'text': "Homewerks 7141-80 Ventilatore da bagno con luce a LED integrata, ventilazione di scarico a soffitto, 1,1 sones, 80 CFM". Homewerks 7141-80 Ventilatore da bagno con luce a LED integrata, ventilazione di scarico a soffitto, 1,1 sones, 80 CFM. Questo ventilatore di scarico ha una potenza di 1,1 sones a 80 CFM, il che significa che è in grado di gestire spazi fino a 80 piedi quadrati ed è molto silenzioso. I ventilatori per bagno di Homewerk possono aiutare a rimuovere questo odore grazie alla loro potente ventilazione...]
Ricerca ibrida vs semplice ricerca per similarità vettoriale
L'uso di sole incorporazioni dense invece di un mix di incorporazioni rade e dense può creare problemi con le query che dipendono da corrispondenze esatte di parole chiave o da distinzioni di dati categoriali, che sparse embeddings possono gestire bene.
Ad esempio, se si cerca un attributo molto specifico, come "spedizione inclusa". Gli embedding densi potrebbero recuperare un'ampia gamma di elementi correlati alle parole chiave principali, come il tipo di prodotto o la marca, ma non l'aspetto cruciale della "spedizione inclusa".
Confrontiamo l'uso di un motore di ricerca vettoriale ibrido e l'uso di una semplice ricerca vettoriale con embeddings densi:
def query_dense_search(query: str):
query_embeddings = ef([query])
search_param = {
"data": query_embeddings["dense"],
"anns_field": "vettore_denso",
"param": {"metric_type": "COSINE"},
"limite": 2,
"campi_uscita": ["text"],
}
res_dense = col.search(**search_param)
restituire res_dense
> query_dense_search("spedizione inclusa")
[
{
"id": "449353344520491390",
"distanza": 0.5341320037841797,
"entità": {
"text": "BAZIC Busta bianca autosigillante 3 5/8" x 6 1/2" #6, senza finestra, Mailer per fatture aziendali (100/Pack), 1-PacknBAZIC Busta bianca autosigillante 3 5/8" x 6 1/2" #6, senza finestra, Busta autosigillante per assegni di fatture commerciali (100/confezione), 1 confezione ProdottiBAZIC#6 3/4 (100 pezzi)n<p><strong>Torna a BAZIC</strong></p> <p>Il nostro obiettivo è fornire a ogni cliente forniture di lunga durata a un costo accessibile. Dal 1998 abbiamo mantenuto questa promessa e continueremo a migliorare ogni anno. Abbiamo costruito il nostro marchio sull'integrità e sulla qualità, in modo che i clienti sappiano esattamente cosa aspettarsi.</p> <p><strong>COMMESSA AI VALORI</strong></p> <p>Siamo un'azienda orientata ai valori, guidata dai principi dell'eccellenza attraverso una forte progettazione dei prodotti a costi contenuti. Il nostro impegno verso questi valori si riflette nella nostra dedizione al miglioramento dei prodotti attuali e allo sviluppo di nuovi prodotti interessanti per i nostri consumatori. La nostra attività si basa sull'immaginazione, sulla passione e sulla leadership. Abbiamo grandi prodotti e continueremo a crescere con le aspettative dei nostri clienti.</p> <p><strong>UN SUCCESSO BASATO SULLA SODDISFAZIONE</strong></p> <p>La sede centrale è a Los Angeles, California, Stati Uniti. Per ogni prodotto che inviamo, ci aspettiamo la soddisfazione del cliente al 100%. Il nostro successo deriva dalla soddisfazione dei singoli consumatori. Creiamo prodotti che le persone vogliono raccomandare agli altri.</p>n#6-3/4 SELF-SEAL WHITE ENVELOPES. Queste buste autosigillanti da 3 5/8" x 6 1/2" pollici sono state progettate per farvi risparmiare tempo e denaro. Vi aiutano a completare gli invii a tempo di record. nSICURO. Basta staccare e sigillare per creare un sigillo forte e duraturo senza leccare o inumidire. Il nostro design autosigillante è facile e veloce e garantisce la tenuta senza bisogno di nastro adesivo o colla stick.nDESIGN SENZA FINESTRA. Buste prodotte con un pannello frontale senza finestre per facilitare la stampa, l'etichettatura o l'indirizzamento a mano, perfette per invii aziendali rapidi e di massa.nSTAFFA BIANCA DA 20 LB. Perfette per l'uso lavorativo quotidiano, queste buste bianche standard sono realizzate in carta da 20 libbre, pesante e resistente, per contenere in modo sicuro i file più pesanti durante il trasporto.nMULTI-PURPOSE. Queste buste possono contenere facilmente fatture, lettere, assegni, carte regalo, ecc. Queste buste possono essere utilizzate praticamente per tutto ciò che vi serve!".
}
},
Lo stesso per la ricerca ibrida
> query_hybrid_search("spedizione inclusa")
[
{
"id": "449353344520491358",
"distanza": 0.016393441706895828,
"entità": {
"text": "ASURION 4 Year Home Improvement Protection Plan $20-29.99nASURION 4 Year Home Improvement Protection Plan $20-29.99nASURIONnNonenAsurion sta eliminando le congetture sulla ricerca di piani di protezione dei prodotti adatti alle vostre esigenze. I prodotti si guastano, spesso nel momento più inopportuno. È un bene che siate coperti, perché nessun altro piano può proteggere le vostre cose come un piano di protezione Asurion. In poche parole, i piani di protezione Asurion coprono i vostri prodotti quando ne avete più bisogno, con una procedura di reclamo semplice e veloce. Acquistate un piano di protezione da un'azienda che conoscete e di cui vi fidate. Aggiungete un piano di protezione Asurion al vostro carrello oggi stesso! Per i termini e le condizioni dettagliate di questo piano, consultare la "Guida all'uso [pdf]" qui sotto.NESSUN COSTO AGGIUNTIVO: per le riparazioni pagherete 0 dollari - parti, manodopera e spedizione incluse.n
}
}
]
In questo caso, possiamo vedere che una ricerca ibrida può trovare un prodotto in cui è inclusa la voce "spedizione", mentre le incorporazioni dense puntano più a un risultato in cui è possibile spedire qualcosa.
Conclusione
In questo tutorial abbiamo esplorato una nuova funzionalità di Milvus 2.4, la ricerca ibrida, che consente di effettuare ricerche vettoriali su diversi tipi di incorporazioni di dati.
Sentitevi liberi di dare un'occhiata a Milvus e al codice su Github, e condividete le vostre esperienze con la comunità unendovi al nostro Discord.
Conduzione di una ricerca ibrida
La ricerca ibrida consiste nel combinare metodi di reperimento scarsi e densi per migliorare i risultati della ricerca. Il processo prevede in genere le seguenti fasi:
Preparazione dei dati: Preparare i dati convertendoli in vettori. Questa operazione può essere effettuata utilizzando varie tecniche, come le word embeddings per i dati di testo o le image embeddings per i dati di immagine. La trasformazione dei dati grezzi in vettori numerici consente un'indicizzazione e un recupero efficienti.
Creare indici: Creare indici per i vettori di dati. Gli indici sono strutture di dati che consentono di cercare e recuperare rapidamente i dati. In Milvus è possibile creare indici per vettori sia sparsi che densi, in modo da garantire un'elaborazione rapida e accurata delle query di ricerca.
Eseguire una ricerca ibrida: Eseguire una ricerca ibrida combinando metodi di reperimento sparsi e densi. Tecniche come la fusione reciproca dei ranghi possono essere utilizzate per unire i risultati di entrambi i metodi di reperimento, producendo una classifica finale che bilancia precisione e richiamo. Questa fase è fondamentale per sfruttare i punti di forza dei vettori sparsi e densi.
Recupero dei risultati: Recuperare i risultati della ricerca in base alla classifica finale. I risultati della ricerca possono essere ulteriormente filtrati e raffinati utilizzando varie tecniche, come il filtraggio degli attributi. In questo modo si garantisce che all'utente vengano presentati i risultati più pertinenti e di qualità.
La ricerca ibrida offre diversi vantaggi, tra cui risultati di ricerca migliori, maggiore efficienza e flessibilità. Può essere utilizzata per diverse applicazioni, come la ricerca di immagini e testi, e può essere implementata utilizzando varie tecniche, come la fusione dei ranghi reciproci e i metodi vettoriali. Con una ricerca ibrida è possibile ottenere un'esperienza di ricerca più completa e accurata, adattata alle esigenze specifiche dell'applicazione.
Continua a leggere

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
VDBBench 1.0 offers an open-source benchmarking solution for vector databases, emphasizing real-world production conditions, including streaming data and concurrent workloads.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vector database deployments with your favorite monitoring tool.
