Hugging Face RankerCompatible with Milvus v2.6.20+
Die Vektorsuche sortiert die Ergebnisse nach dem Vektorabstand, doch die anfängliche Reihenfolge spiegelt möglicherweise nicht wider, wie gut der Text der einzelnen Kandidaten die Suchanfrage beantwortet. Hugging Face Ranker sendet die Suchanfrage und die Kandidatentexte an gehostete Hugging Face Inference Provider und verwendet die Ergebnisse von „ sentence-similarity “, um die von Milvus zurückgegebenen Kandidaten neu zu ordnen.
Diese Integration nutzt den gehosteten Hugging Face-Router. Informationen zur Neureihenfolge mit einem separat bereitgestellten Text Embeddings Inference (TEI)-Dienst finden Sie unter TEI Ranker.
Einschränkungen
- Die Funktion muss genau ein nicht-nullfähiges Feld „
VARCHAR“ in „input_field_names“ referenzieren. - Die Anzahl der Zeichenfolgen in „
queries“ muss der Anzahl der Suchanfragen (nq) entsprechen.
So funktioniert es
Hugging Face Ranker-Workflow
Hugging Face Ranker wird nach der anfänglichen Vektorsuche ausgeführt:
- Kandidatenentitäten abrufen. Milvus durchsucht das konfigurierte Vektorfeld und sammelt Kandidatenentitäten.
- Vorbereitung des Textes für die Neureihung. Die Funktion liest den Abfragetext aus „
params.queries“ und den Kandidaten-Text aus dem Feld „VARCHAR“, das unter „input_field_names“ angegeben ist. - Anforderung von Ähnlichkeitswerten. Milvus sendet die Abfrage als „
source_sentence“ und die Kandidatentexte als „sentences“ über „hf-inference“ an die Hugging Face-Pipeline „sentence-similarity“. - Neubewertung der Kandidaten. Hugging Face gibt einen Wert pro Kandidaten zurück. Milvus ordnet die Kandidaten vom höchsten zum niedrigsten Wert und gibt die neu sortierten Ergebnisse zurück.
So werden Ähnlichkeitswerte berechnet
Wie der Hugging Face Ranker Ähnlichkeitswerte berechnet
Das Hugging-Face-Modell berechnet die Werte in drei Schritten:
- Vorbereitung der Texteingaben. Der Ranker liest den Suchtext aus „
params.queries“ und den Kandidatentext aus dem konfigurierten Feld „VARCHAR“ ein. - Erstellen separater Modellrepräsentationen. Milvus sendet die Suchanfrage als „
source_sentence“ und die Kandidatentexte als „sentences“. Das Modell kodiert die Suchanfrage und jeden Kandidaten intern separat. - Vergleichen und Rückgabe von Bewertungen. Das Modell vergleicht die Abfrage-Repräsentation mit jeder Kandidaten-Repräsentation und gibt pro Kandidaten eine Ähnlichkeitsbewertung zurück.
Die vom Hugging-Face-Modell verwendeten Einbettungen oder Darstellungen sind Teil der internen Modellverarbeitung. Hugging Face gibt Bewertungen zurück, keine Vektoren. Die anfängliche Vektorabfrage und die Modell-Neurangfolge verwenden daher separate Darstellungen und können unterschiedliche Modelle nutzen.
Bevor Sie beginnen
Bevor Sie Hugging Face Ranker verwenden, stellen Sie sicher, dass Sie über Folgendes verfügen:
- Milvus 2.6.20 oder höher aus der 2.6-Release-Reihe.
- PyMilvus 2.6.16 oder höher.
- Ein Hugging Face-Benutzerzugriffstoken, mit dem Inferenz-Provider aufgerufen werden können.
- Ein Modell, das derzeit von
hf-inferencefür diesentence-similarityAufgabe bereitgestellt wird. - Eine Sammlung, die Textvorschläge in einem nicht-nullfähigen „
VARCHAR“-Feld speichert.
Milvus hat keinen Einfluss darauf, ob ein Hugging-Face-Modell über hf-inference weiterhin verfügbar bleibt oder ob das Modell Ihre Anforderungen an Stabilität, Latenz und Ausgabequalität erfüllt. Überprüfen Sie das Modell auf Hugging Face und bewerten Sie es im Hinblick auf Ihre Arbeitslast, bevor Sie es in der Produktion einsetzen.
Die Beispiele dienen sentence-transformers/all-MiniLM-L6-v2 lediglich zur Veranschaulichung der Konfiguration. Das Modell stellt keine Empfehlung oder Zertifizierung durch Milvus dar.
Anmeldedaten konfigurieren
Sie können das Hugging-Face-Benutzerzugriffstoken unter milvus.yaml oder über eine Umgebungsvariable konfigurieren.
Die Priorität der Anmeldedaten ist wie folgt:
Function credential label -> provider credential label in milvus.yaml -> environment variable
Option 1: Konfigurationsdatei
Definieren Sie das Token im obersten Abschnitt „ credential “ und verweisen Sie den Hugging Face-Ranker-Anbieter auf das Anmeldeinformationen-Label:
# milvus.yaml
credential:
huggingface_apikey:
apikey: <YOUR_HUGGING_FACE_TOKEN>
function:
rerank:
model:
providers:
huggingface:
credential: huggingface_apikey
# url: https://router.huggingface.co
Ein „ credential “-Parameter auf Funktionsebene kann das Label auf Anbieterebene überschreiben. Sein Wert muss ein in „ milvus.yaml “ definiertes Anmelde-Label sein, nicht das Token selbst.
Option 2: Umgebungsvariable
Wenn weder in der Funktions- noch in der Anbieter-Konfiguration ein Anmelde-Label angegeben ist, legen Sie „ MILVUS_HUGGINGFACE_API_KEY “ in der Milvus-Service-Umgebung fest:
# docker-compose.yaml
standalone:
environment:
MILVUS_HUGGINGFACE_API_KEY: <YOUR_HUGGING_FACE_TOKEN>
Verwenden Sie den Hugging Face Ranker
Der Hugging Face Ranker wird zum Zeitpunkt der Suche definiert und angewendet. Sie können den Ranker für jede Suche ändern oder weglassen, ohne das Schema der Sammlung zu ändern.
Schritt 1: Eine Sammlung vorbereiten
Im folgenden Beispiel wird eine Sammlung mit einem Textfeld für die Neureihung und einem Vektorfeld für die anfängliche Abfrage erstellt:
from pymilvus import DataType, Function, FunctionType, MilvusClient
client = MilvusClient(uri="http://localhost:19530")
collection_name = "hugging_face_rerank_demo"
schema = client.create_schema()
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=1000)
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=4)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE",
)
client.create_collection(
collection_name=collection_name,
schema=schema,
index_params=index_params,
)
client.insert(
collection_name=collection_name,
data=[
{
"id": 1,
"document": "Recent renewable energy developments include improved solar efficiency.",
"dense": [0.10, 0.20, 0.30, 0.40],
},
{
"id": 2,
"document": "Climate policy and carbon markets have evolved rapidly in recent years.",
"dense": [0.11, 0.19, 0.28, 0.39],
},
{
"id": 3,
"document": "New battery technology helps stabilize wind and solar power generation.",
"dense": [0.90, 0.10, 0.05, 0.02],
},
{
"id": 4,
"document": "Vector databases support similarity search for machine learning applications.",
"dense": [0.01, 0.02, 0.03, 0.04],
},
],
)
Schritt 2: Definieren Sie die Reranking-Funktion
Definieren Sie eine „ RERANK “-Funktion, die den Kandidatentext aus „ document “ liest und den Abfragetext aus „ queries “ verwendet:
hugging_face_ranker = Function(
name="hugging_face_semantic_ranker",
input_field_names=["document"],
function_type=FunctionType.RERANK,
params={
"reranker": "model",
"provider": "huggingface",
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"hf_provider": "hf-inference",
"queries": ["renewable energy developments"],
"credential": "huggingface_apikey",
"max_client_batch_size": 32,
},
)
Wenn Sie nur die Anmeldedaten auf Anbieterebene oder die Umgebungsvariable verwenden, lassen Sie „ credential “ in den Funktionsparametern weg.
Die folgende Tabelle beschreibt die Parameter des Hugging Face Rankers:
| Parameter | Erforderlich? | Beschreibung |
|---|---|---|
reranker | Ja | Die Reranking-Implementierung. Setzen Sie diesen Wert auf „ model “. |
provider | Ja | Der Modellanbieter. Setzen Sie diesen Wert auf „ huggingface “. |
model_name | Ja | Die Hugging-Face-Modell-ID für ein Modell, das über hf-inference für die Aufgabe „ sentence-similarity “ bereitgestellt wird. |
queries | Ja | Für die Neureihung verwendete Abfragezeichenfolgen. Geben Sie genau eine Zeichenfolge pro Suchanfrage an, auch wenn bei der anfänglichen Abfrage Abfragevektoren verwendet werden. |
hf_provider | Nein | Die Route des Hugging Face Inference Providers. Der Standardwert und der einzige in Milvus 2.6.20 unterstützte Wert ist hf-inference. |
credential | Nein | Die Bezeichnung einer Anmeldeinformation, die im obersten Abschnitt „ credential “ von „ milvus.yaml “ definiert ist. Dieser Wert ist nicht das Token selbst. |
max_client_batch_size | Nein | Die maximale Anzahl an Kandidatentexten, die in einer Hugging-Face-Anfrage gesendet werden. Der Standardwert ist „ 32 “, und der Wert muss größer sein als „ 0 “. |
Schritt 3: Suche mit dem Ranker
Übergeben Sie die Funktion über den Parameter „ ranker “ von „ search() “:
query_vector = [0.12, 0.21, 0.29, 0.41]
results = client.search(
collection_name=collection_name,
data=[query_vector],
anns_field="dense",
limit=3,
output_fields=["document"],
ranker=hugging_face_ranker,
consistency_level="Strong",
)
print(results)
Milvus ruft zunächst Kandidaten aus dense ab und berechnet dann anhand des Suchtextes in queries und des Kandidatentextes in document die Ähnlichkeitswerte der Sätze. Die zurückgegebenen Kandidaten werden nach den Hugging-Face-Werten sortiert.
Fehlerbehebung
Das Modell für die Satzähnlichkeit ist nicht verfügbar
Öffnen Sie die Modellseite auf Hugging Face und überprüfen Sie den Abschnitt „Inference Providers “. Vergewissern Sie sich, dass hf-inference das Modell für sentence-similarity bereitstellt. Ist dies nicht der Fall, wählen Sie ein anderes Modell aus, das diese Aufgabe unterstützt.
Die Anzahl der Suchstrings stimmt nicht mit der Suchanfrage überein
Die Anzahl der Zeichenfolgen in „ queries “ muss mit der Anzahl der Suchanfragen (nq) übereinstimmen. Bei einer Suche mit einem Abfragevektor muss genau eine Abfragezeichenfolge angegeben werden.
Kandidatentext fehlt oder ist nullfähig
Stellen Sie sicher, dass „ input_field_names “ genau ein nicht-nullfähiges Feld „ VARCHAR “ enthält und dass jede Kandidatenentität Text in diesem Feld enthält.
Milvus meldet fehlende Hugging-Face-Anmeldedaten
Stellen Sie sicher, dass das Anmelde-Label „Function“ in „ milvus.yaml “ vorhanden ist, dass das Label auf Anbieterebene gültig ist oder dass „ MILVUS_HUGGINGFACE_API_KEY “ in der Milvus-Serviceumgebung vorhanden ist.
Nächste Schritte
- Informationen zum Verhalten und zu den Beschränkungen des gemeinsam genutzten Model Rankers finden Sie unter „Model Ranker – Übersicht“.
- Informationen zum Generieren von Embeddings über gehostete Hugging Face-Inferenz-Provider finden Sie unter „Hugging Face“.
- Informationen zur Anwendung des Rankers auf die hybride Suche finden Sie unter „Multi-Vector Hybrid Search“.