Classificatore TEICompatible with Milvus 2.6.x
Il TEI Ranker sfrutta il servizio Text Embedding Inference (TEI) di Hugging Face per migliorare la rilevanza delle ricerche attraverso una riclassificazione semantica. Rappresenta un approccio avanzato all'ordinamento dei risultati di ricerca che va oltre la tradizionale similarità vettoriale.
Prerequisiti
Prima di implementare TEI Ranker in Milvus, assicurarsi di avere:
Una raccolta Milvus con un campo
VARCHARcontenente il testo da rerankizzare.Un servizio TEI funzionante con capacità di reranking. Per istruzioni dettagliate sulla configurazione di un servizio TEI, consultare la documentazione ufficiale TEI.
Creare una funzione TEI Ranker
Per utilizzare TEI Ranker nella vostra applicazione Milvus, create un oggetto Function che specifichi come deve funzionare il reranking. Questa funzione verrà passata alle operazioni di ricerca di Milvus per migliorare la classificazione dei risultati.
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Configure TEI Ranker
tei_ranker = Function(
name="tei_semantic_ranker", # Unique identifier for your ranker
input_field_names=["document"], # VARCHAR field containing text to rerank
function_type=FunctionType.RERANK, # Must be RERANK for reranking functions
params={
"reranker": "model", # Enables model-based reranking
"provider": "tei", # Specifies TEI as the service provider
"queries": ["renewable energy developments"], # Query text for relevance evaluation
"endpoint": "http://localhost:8080", # Your TEI service URL
"max_client_batch_size": 32, # Optional: batch size for processing (default: 32)
"truncate": True, # Optional: Truncate the inputs that are longer than the maximum supported size
"truncation_direction": "Right", # Optional: Direction to truncate the inputs
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
CreateCollectionReq.Function ranker = CreateCollectionReq.Function.builder()
.functionType(FunctionType.RERANK)
.name("vllm_semantic_ranker")
.inputFieldNames(Collections.singletonList(NAME_FIELD))
.param("reranker", "model")
.param("provider", "tei")
.param("queries", "[\"renewable energy developments\"]")
.param("endpoint", "http://localhost:8080")
.param("max_client_batch_size", "32")
.param("truncate", "true")
.param("truncation_direction", "Right")
.build();
searchWithRanker(scientists, ranker);
// nodejs
// go
# restful
Parametri specifici del ranker TEI
I seguenti parametri sono specifici del ranker TEI:
Parametro |
Richiesto? |
Descrizione |
Valore / Esempio |
|---|---|---|---|
|
Sì |
Deve essere impostato su |
|
|
Sì |
Il fornitore di servizi del modello da usare 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. |
["query di ricerca"] |
|
Sì |
L'URL del servizio TEI. |
|
|
No |
Poiché i servizi di modello non possono elaborare tutti i dati in una sola volta, si imposta la dimensione del batch per accedere al servizio di modello in più richieste. |
|
|
No |
Se troncare gli input che superano la lunghezza massima della sequenza. Se |
|
|
No |
Direzione da cui troncare quando l'input è troppo lungo:
|
|
Per i parametri generali condivisi da tutti i classificatori di modelli (ad esempio, provider, queries), fare riferimento a Creare un classificatore di modelli.
Applicare alla ricerca vettoriale standard
Per applicare TEI Ranker a una ricerca vettoriale standard:
# Execute search with vLLM reranking
results = client.search(
collection_name="your_collection",
data=[your_query_vector], # Replace with your query vector
anns_field="dense_vector", # Vector field to search
limit=5, # Number of results to return
output_fields=["document"], # Include text field for reranking
ranker=tei_ranker, # Apply tei reranking
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("your_collection")
.data(Arrays.asList(new EmbeddedText("AI Research Progress"), new EmbeddedText("What is AI")))
.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