Panoramica del Model RankerCompatible with Milvus 2.6.x
La ricerca vettoriale tradizionale classifica i risultati esclusivamente in base alla somiglianza matematica, ovvero alla corrispondenza dei vettori nello spazio ad alta densità. Sebbene sia efficiente, questo approccio spesso non tiene conto della vera rilevanza semantica. Considerate la ricerca di "best practice per l'ottimizzazione dei database": potreste ricevere documenti con un'elevata somiglianza vettoriale che menzionano frequentemente questi termini, ma che in realtà non forniscono strategie di ottimizzazione attuabili.
Model Ranker trasforma la ricerca Milvus integrando modelli linguistici avanzati che comprendono le relazioni semantiche tra query e documenti. Invece di basarsi esclusivamente sulla somiglianza vettoriale, valuta il significato e il contesto dei contenuti per fornire risultati più intelligenti e pertinenti.
Limiti
I classificatori di modelli non possono essere utilizzati con le ricerche di raggruppamento.
I campi utilizzati per il model reranking devono essere di tipo testo (
VARCHAR).Ogni classificatore di modelli può utilizzare solo un campo
VARCHARalla volta per la valutazione.
Come funziona
I Model Ranker integrano le capacità di comprensione dei modelli linguistici nel processo di ricerca Milvus attraverso un flusso di lavoro ben definito:
Panoramica del Model Ranker
Interrogazione iniziale: L'applicazione invia una query a Milvus.
Ricerca vettoriale: Milvus esegue una ricerca vettoriale standard per identificare i documenti candidati.
Recupero dei candidati: Il sistema identifica l'insieme iniziale di documenti candidati in base alla somiglianza vettoriale.
Valutazione del modello: La funzione Model Ranker elabora le coppie query-documento:
Invia la query originale e i documenti candidati a un servizio di modelli esterni.
Il modello linguistico valuta la rilevanza semantica tra la query e ciascun documento
Ogni documento riceve un punteggio di rilevanza basato sulla comprensione semantica.
Riordino intelligente: I documenti vengono riordinati in base ai punteggi di rilevanza generati dal modello
Risultati migliorati: L'applicazione riceve risultati classificati in base alla rilevanza semantica anziché alla sola somiglianza vettoriale.
Scegliete un fornitore di modelli per le vostre esigenze
Milvus supporta i seguenti fornitori di servizi di modello per il reranking, ciascuno con caratteristiche diverse:
Fornitore |
Migliore per |
Caratteristiche |
Esempio di caso d'uso |
|---|---|---|---|
vLLM |
Applicazioni complesse che richiedono una profonda comprensione semantica e personalizzazione |
|
Piattaforma di ricerca legale che distribuisce modelli specifici per il dominio che comprendono la terminologia legale e le relazioni con la giurisprudenza |
TEI |
Implementazione rapida con utilizzo efficiente delle risorse |
|
Sistema di gestione dei contenuti che necessita di efficienti capacità di ricanalizzazione con requisiti standard |
Cohere |
Applicazioni aziendali che danno priorità all'affidabilità e alla facilità di integrazione |
|
Piattaforma di e-commerce che richiede una ricerca ad alta disponibilità con prestazioni API costanti e cataloghi di prodotti multilingue |
Voyage AI |
Applicazioni RAG con requisiti specifici di prestazioni e contesto |
|
Database di ricerca con documenti di lunghezza variabile che richiedono un controllo preciso delle prestazioni e una comprensione semantica specializzata. |
SiliconFlow |
Applicazioni che elaborano documenti lunghi con priorità di economicità |
|
Sistema di ricerca di documentazione tecnica per l'elaborazione di manuali e documenti lunghi che necessitano di una segmentazione intelligente e di un controllo della sovrapposizione. |
Per informazioni dettagliate sull'implementazione di ciascun modello di servizio, consultare la documentazione dedicata:
Implementazione
Prima di implementare Model Ranker, assicurarsi di disporre di:
Una collezione Milvus con un campo
VARCHARcontenente il testo da rerankizzareUn servizio di modelli esterni in esecuzione accessibile alla vostra istanza Milvus
Una connettività di rete appropriata tra Milvus e il servizio di modello scelto.
I classificatori di modelli si integrano perfettamente con le operazioni di ricerca vettoriale standard e di ricerca ibrida. L'implementazione prevede la creazione di un oggetto Function che definisce la configurazione del reranking e la sua trasmissione alle operazioni di ricerca.
Creare un classificatore di modelli
Per implementare il reranking dei modelli, occorre innanzitutto definire un oggetto Function con la configurazione appropriata. In questo esempio, usiamo TEI come fornitore di servizi:
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Create a model ranker function
model_ranker = Function(
name="semantic_ranker", # Function identifier
input_field_names=["document"], # VARCHAR field to use for reranking
function_type=FunctionType.RERANK, # Must be set to RERANK
params={
"reranker": "model", # Specify model reranker. Must be "model"
"provider": "tei", # Choose provider: "tei", "vllm", etc.
"queries": ["machine learning for time series"], # Query text
"endpoint": "http://model-service:8080", # Model service endpoint
# "maxBatch": 32 # Optional: batch size for processing
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
ModelRanker ranker = ModelRanker.builder()
.name("semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.provider("tei")
.queries(Collections.singletonList("machine learning for time series"))
.endpoint("http://model-service:8080")
.build();
// nodejs
// go
# restful
Parametro |
Richiesto? |
Descrizione |
Valore / Esempio |
|---|---|---|---|
|
Sì |
Identificatore della funzione utilizzata per l'esecuzione delle ricerche. |
|
|
Sì |
Nome del campo di testo da utilizzare per la riclassificazione. Deve essere un campo di tipo |
|
|
Sì |
Specifica il tipo di funzione creata. Deve essere impostato su |
|
|
Sì |
Un dizionario contenente la configurazione della funzione di reranking basata su modelli. I parametri disponibili (chiavi) variano a seconda del fornitore di servizi. |
|
|
Sì |
Deve essere impostato su |
|
|
Sì |
Il fornitore di servizi del modello da utilizzare per il reranking. |
|
|
Sì |
Elenco delle stringhe di query utilizzate dal modello di reranking per calcolare i punteggi di rilevanza. Il numero di stringhe di query deve corrispondere esattamente al numero di query dell'operazione di ricerca (anche quando si usano vettori di query al posto del testo), altrimenti verrà segnalato un errore. |
|
|
Sì |
URL del servizio del modello. |
|
|
No |
Numero massimo di documenti da elaborare in un singolo batch. Valori maggiori aumentano il throughput ma richiedono più memoria. |
|
Applica alla ricerca vettoriale standard
Dopo aver definito il ranker del modello, è possibile applicarlo durante le operazioni di ricerca passandolo al parametro ranker:
# Use the model ranker in standard vector search
results = client.search(
collection_name,
data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"]
anns_field="vector_field",
limit=10,
output_fields=["document"], # Include the text field in outputs
ranker=model_ranker, # Apply the model ranker here
consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;
SearchReq searchReq = SearchReq.builder()
.collectionName(COLLECTION_NAME)
.data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
.annsField("vector_field")
.limit(10)
.outputFields(Collections.singletonList(document))
.functionScore(FunctionScore.builder()
.addFunction(ranker)
.build())
.consistencyLevel(ConsistencyLevel.BOUNDED)
.build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful