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-Workflow

Hugging Face Ranker wird nach der anfänglichen Vektorsuche ausgeführt:

  1. Kandidatenentitäten abrufen. Milvus durchsucht das konfigurierte Vektorfeld und sammelt Kandidatenentitäten.
  2. 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.
  3. 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 “.
  4. 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

How Hugging Face Ranker calculates similarity scores Wie der Hugging Face Ranker Ähnlichkeitswerte berechnet

Das Hugging-Face-Modell berechnet die Werte in drei Schritten:

  1. Vorbereitung der Texteingaben. Der Ranker liest den Suchtext aus „ params.queries “ und den Kandidatentext aus dem konfigurierten Feld „ VARCHAR “ ein.
  2. 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.
  3. 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-inference für die sentence-similarity Aufgabe 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:

ParameterErforderlich?Beschreibung
rerankerJaDie Reranking-Implementierung. Setzen Sie diesen Wert auf „ model “.
providerJaDer Modellanbieter. Setzen Sie diesen Wert auf „ huggingface “.
model_nameJaDie Hugging-Face-Modell-ID für ein Modell, das über hf-inference für die Aufgabe „ sentence-similarity “ bereitgestellt wird.
queriesJaFür die Neureihung verwendete Abfragezeichenfolgen. Geben Sie genau eine Zeichenfolge pro Suchanfrage an, auch wenn bei der anfänglichen Abfrage Abfragevektoren verwendet werden.
hf_providerNeinDie Route des Hugging Face Inference Providers. Der Standardwert und der einzige in Milvus 2.6.20 unterstützte Wert ist hf-inference.
credentialNeinDie Bezeichnung einer Anmeldeinformation, die im obersten Abschnitt „ credential “ von „ milvus.yaml “ definiert ist. Dieser Wert ist nicht das Token selbst.
max_client_batch_sizeNeinDie 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“.