TEI-RangiererCompatible with Milvus 2.6.x
Der TEI Ranker nutzt den Text Embedding Inference (TEI) Service von Hugging Face, um die Suchrelevanz durch semantisches Reranking zu verbessern. Er stellt einen fortschrittlichen Ansatz für die Ordnung von Suchergebnissen dar, der über die traditionelle Vektorähnlichkeit hinausgeht.
Voraussetzungen
Bevor Sie TEI Ranker in Milvus implementieren, müssen Sie sicherstellen, dass Sie über Folgendes verfügen
Eine Milvus-Sammlung mit einem
VARCHAR-Feld, das den neu zu bewertenden Text enthältEin laufender TEI-Dienst mit Ranglistenfunktionen. Detaillierte Anweisungen zum Einrichten eines TEI-Dienstes finden Sie in der offiziellen TEI-Dokumentation.
Erstellen einer TEI-Ranker-Funktion
Um TEI Ranker in Ihrer Milvus-Anwendung zu verwenden, erstellen Sie ein Function-Objekt, das angibt, wie das Reranking funktionieren soll. Diese Funktion wird an Milvus-Suchoperationen übergeben, um das Ranking der Ergebnisse zu verbessern.
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
TEI-Ranker-spezifische Parameter
Die folgenden Parameter sind spezifisch für den TEI Ranker:
Parameter |
Erforderlich? |
Beschreibung |
Wert / Beispiel |
|---|---|---|---|
|
Ja |
Muss auf |
|
|
Ja |
Der Modelldienstanbieter, der für das Reranking verwendet werden soll. |
|
|
Ja |
Liste der Abfrage-Strings, die vom Rerank-Modell zur Berechnung der Relevanzwerte verwendet werden. Die Anzahl der Abfragezeichenfolgen muss genau mit der Anzahl der Abfragen in Ihrem Suchvorgang übereinstimmen (auch bei Verwendung von Abfragevektoren anstelle von Text), andernfalls wird ein Fehler gemeldet. |
["Suchanfrage"] |
|
Ja |
Die URL Ihres TEI-Dienstes. |
|
|
Nein |
Da Modelldienste möglicherweise nicht alle Daten auf einmal verarbeiten, wird hier die Stapelgröße für den Zugriff auf den Modelldienst in mehreren Anfragen festgelegt. |
|
|
Nein |
Ob Eingaben, die die maximale Sequenzlänge überschreiten, abgeschnitten werden sollen. Wenn |
|
|
Nein |
Richtung, aus der abgeschnitten wird, wenn die Eingabe zu lang ist:
|
|
Allgemeine Parameter, die für alle Model Ranker gelten (z. B. provider, queries), finden Sie unter Erstellen eines Model Rankers.
Auf Standard-Vektorsuche anwenden
So wenden Sie TEI Ranker auf eine Standard-Vektorsuche an:
# 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