Ranking der Suchergebnisse anpassen

Da sich die Suchanforderungen für verschiedene Branchen unterscheiden und sich von Zeit zu Zeit ändern können, ist das Standardrankingverhalten möglicherweise nicht für alle Geschäftsanforderungen optimal. Um dieses Problem zu beheben, können Sie das Rankingverhalten mit benutzerdefiniertem Ranking ändern.

Auf dieser Seite wird beschrieben, wie Sie eine benutzerdefinierte Ranking-Formel in Ihrer Suchanfrage verwenden und wie Sie die Formel optimieren. Diese Funktion ist für strukturierte, unstrukturierte und Websitedaten verfügbar.

Übersicht

Mit dem benutzerdefinierten Ranking können Sie einen mathematischen Ausdruck angeben, der auf einer Reihe von modellberechneten Signalen wie dem semantischen Relevanzwert und dem Ähnlichkeitswert für Keywords sowie auf dokumentbasierten Signalen wie einem benutzerdefinierten Feld wie „Entfernung“ oder „Dokumentalter“ basiert.

Mit benutzerdefiniertem Ranking haben Sie folgende Möglichkeiten:

  • Sichtbarkeit erhöhen: Sie können nachvollziehen, welche Signale zur endgültigen Platzierung Ihrer Suchergebnisse beitragen.
  • Vorhandene Signale optimieren: Die Gewichtungen verschiedener Signale wie semantische Ähnlichkeit, Keyword-Abgleich oder Aktualität von Dokumenten anpassen.
  • Geschäftslogik einbinden: Fügen Sie der Ranking-Formel direkt benutzerdefinierte Signale aus Ihren Dokumentdaten hinzu.
  • Systematisch optimieren: Mit der Open-Source-Python-Bibliothek können Sie das optimale Ranking-Formular programmatisch ermitteln.

Benutzerdefiniertes Ranking erforderlich – Beispiel

Stellen Sie sich ein Szenario vor, in dem die folgende Zeichenfolge auf einer Hotelbuchungswebsite eingegeben wird:

luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.

Angenommen, die folgenden Einträge werden abgerufen:

  • Hotel A: „Das führende Luxushotel in Vancouver mit Blick auf den Flughafen. Es verfügt über einen beeindruckenden Pool auf dem Dach. Haustiere sind nicht erlaubt.
  • Hotel B: „Modernes, stilvolles Hotel in der Innenstadt von Vancouver. Haustierfreundlich mit geräumigen Zimmern. Es verfügt über einen großen Innenpool und ein Fitnesscenter.“
  • Hotel C: „Ein charmantes haustierfreundliches Boutique-Hotel in der Nähe des Aquariums (10 Gehminuten vom Stadtzentrum entfernt). Das Hotel hat einen schönen Garten im Innenhof. Kein Pool.
  • Hotel D: „Ein legendäres rustikales Resort. Bekannt für seine exquisite Küche und seinen tadellosen Service. Es verfügt über einen Innenpool und ein Spa. Haustierfreundliche Optionen sind auf Anfrage verfügbar.“

Alle Hotels im Katalog enthalten das Feld distance_from_airport in Kilometern (km).

Einbettungsbasiertes Ranking

Das Suchsystem konvertiert die Anfrage in eine einzelne Einbettung. Anschließend wird dieses Query-Embedding mit den Embeddings aller Hotels im Katalog verglichen. Hotels mit Einbettungen, die der Einbettung der Anfrage numerisch am nächsten sind, werden höher eingestuft.

So sieht das wahrscheinliche Ranking bei einer rein einbettungsbasierten Relevanzsuche aus:

Ranking Hotel Möglicher Grund für dieses Ranking
1 Hotel A Sehr starke semantische Übereinstimmung für „Luxus“, „Flughafen“ und „Rooftop-Pool“. „Keine Haustiere“ ist nicht wünschenswert, aber die anderen starken Übereinstimmungen sind wichtiger.
2 Hotel B Gute semantische Übereinstimmung für „haustierfreundlich“ und „Pool“. „Indoor“ statt „Dach“, „modern“ und „stilvoll“ statt „luxuriös“ sowie „Innenstadt“ statt „Flughafen“ machen es jedoch weniger relevant als A.
3 Hotel D Starke semantische Übereinstimmung für „haustierfreundlich“ und „großer Pool“, aber „Hallenbad“ statt „Dachpool“ und „rustikal“ statt „luxuriös“ machen es etwas weniger semantisch relevant als A und D.
4 Hotel C Das Hotel ist sehr tierfreundlich, aber „kein Pool“ und „Boutique“ verringern die Relevanz für diese spezifische Anfrage erheblich.

Bei dieser Sortierung werden nicht die relevantesten Ergebnisse angezeigt. Hotel A wird oben aufgeführt, obwohl es für viele Nutzer aufgrund des Hinweises „Haustiere nicht erlaubt“ möglicherweise nicht infrage kommt. Hotel D erfüllt viele Kriterien, wird aber niedriger eingestuft, weil der „rustikale“ Stil nicht unbedingt mit „Luxus“ übereinstimmt und der „Innenpool“ niedriger eingestuft wird als genaue Übereinstimmungen mit „groß“ und „Außenpool“.

Benutzerdefinierte Rangfolge

Angenommen, Sie haben den folgenden Ranking-Ausdruck für dieses Beispiel konfiguriert. Informationen zu den Komponenten dieses Ausdrucks finden Sie unter Benutzerdefiniertes Ranking implementieren.

rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8

Dabei ist distance_from_airport ein abrufbares Feld im Katalog und c.distance_from_airport fungiert als Signal.

Beim benutzerdefinierten Ranking werden verschiedene Signale berücksichtigt, die die Relevanz eines Dokuments beeinflussen. Anschließend erstellen Sie mit einer gültigen Syntax einen mathematischen Ausdruck, der diese Signale enthält. In diesem Ausdruck normalisieren Sie die Signale und weisen den abgeleiteten Werten Gewichte zu. Die endgültige benutzerdefinierte Punktzahl wird berechnet und die Dokumente werden eingestuft.

In diesem Beispiel kann dieser Prozess so erklärt werden:

  1. Jedes Hotel erhält einen Wert für die semantische Ähnlichkeit und einen Wert für die Keyword-Ähnlichkeit. Außerdem ist die Entfernung vom Flughafen ein wichtiges Signal, das aus dem Dokument abgeleitet wird.

  2. Die Funktion für die Transformation des reziproken Rangs oder rr() wird verwendet, um alle Werte auf dieselbe Skala zu transformieren.

  3. Die aus jedem Signal abgeleitete Punktzahl wird gewichtet. Die Summe aller einzelnen Punktzahlen ergibt dann die benutzerdefinierte Ranking-Punktzahl für jedes Hotel.

Die verschiedenen Signale für jedes Hotel sind in der folgenden Tabelle aufgeführt:

Hotel semantic_similarity_score keyword_similarity_score c.distance_from_airport Benutzerdefinierter Rankingwert Benutzerdefinierte Rangfolge Einbettungsbasiertes Ranking
Hotel A 9,0 6.2 („airport“, „luxury“, „rooftop pool“) 5,0 0,04879 2 1
Hotel B 7.5 5.6 ("haustierfreundlich", "Stadtzentrum", "Innenpool", "stilvoll") 12,5 0.04691 3 2
Hotel C 5,0 3.4 („tierfreundlich“, „Innenstadt“) 18 0,04525 4 4
Hotel D 8.0 4.5 („Innenpool“, „haustierfreundlich“, „rustikal“) 1 0.04890 1 3

Beim Vergleich der beiden Rankingmethoden ergibt sich mit dem benutzerdefinierten Ranking ein durchdachteres Ranking, das wahrscheinlich besser den Anforderungen eines Nutzers entspricht als ein rein einbettungsbasiertes Ranking.

Benutzerdefiniertes Ranking implementieren

Wenn Sie ein benutzerdefiniertes Ranking in Ihren Suchergebnissen erhalten möchten, müssen Sie die Methode search aufrufen und die folgenden Felder angeben:

  • Backend für Ranking-Ausdruck (rankingExpressionBackend): In diesem Feld wird angegeben, welcher der folgenden Ranking-Mechanismen verwendet werden soll.

    • RANK_BY_EMBEDDING: Dies ist der Standardwert, wenn dieses Feld nicht angegeben ist. Wenn Sie diese Option auswählen, werden die Ergebnisse anhand eines vordefinierten Ranking-Ausdrucks sortiert, der entweder auf Einbettungen oder auf Relevanz basiert.
    • RANK_BY_FORMULA: Damit wird die Standardrangfolge überschrieben und Sie können Ihre benutzerdefinierte Formel im Feld rankingExpression angeben.
  • Ranking-Ausdruck (rankingExpression): Dieses Feld enthält eine mathematische Formel, mit der das Ranking der abgerufenen Dokumente bestimmt wird.

    • Für RANK_BY_EMBEDDING ist dies entweder der auf dem Relevanzwert basierende (double * relevanceScore) oder der auf dem Einbettungsvektor basierende (double * dotProduct(embedding_field_path)) Ansatz.

    • Bei RANK_BY_FORMULA handelt es sich um einen kuratierten Ausdruck, der mehrere Signale kombiniert, um für jedes Suchergebnis einen neuen Wert zu berechnen.

Standardsignale

Vertex AI Search bietet eine Vielzahl von Signalen, mit denen Sie benutzerdefiniertes Ranking erstellen können. Folgende Standardsignale sind verfügbar:

Signal name Beschreibung
default_rank Der Standardrang des Dokuments, der vom standardmäßigen VAIS-Ranking-Algorithmus bestimmt wird
semantic_similarity_score Eine anhand von Abfrage- und Inhaltseinbettungen berechnete Punktzahl, die angibt, wie ähnlich eine Suchanfrage dem Inhalt eines Dokuments ist. Dieser Wert wird mit einem proprietären Google-Algorithmus berechnet.
relevance_score Ein Wert, der von einem Modell für die tiefgehende Relevanz generiert wird, das komplexe Interaktionen zwischen Anfragen und Dokumenten verarbeitet. Das Modell ermittelt die Bedeutung und Absicht einer Anfrage im Kontext des Inhalts. Dieser Wert wird mit einem proprietären Google-Algorithmus berechnet.
keyword_similarity_score Ein Wert, bei dem der Schwerpunkt auf Keyword-Übereinstimmungen liegt. Für dieses Signal wird die BM25-Rankingfunktion (Best Match 25) verwendet.
document_age Das Alter des Dokuments in Stunden. Unterstützt Gleitkommawerte. Ein Wert von 0,5 entspricht beispielsweise 30 Minuten, ein Wert von 50 entspricht 2 Tagen und 2 Stunden.
pctr_rank Ein Rang, der die auf Nutzerereignisdaten basierenden vorhergesagten Conversion-Raten angibt. Bei diesem Signal wird die prognostizierte Klickrate (predicted Click-through Rate, pCTR) verwendet, um die Relevanz eines Suchergebnisses aus Nutzersicht zu bewerten.
topicality_rank Ein Rang, der die Anpassung der Keyword-Ähnlichkeit angibt, die mit einem proprietären Google-Algorithmus berechnet wird.
boosting_factor Eine Kombination aller benutzerdefinierten Steigerungen, die Sie auf das Dokument angewendet haben.

Zusätzlich zu diesen Feldern können Sie alle benutzerdefinierten Felder in einem Dokument verwenden, die als abrufbar gekennzeichnet sind. Fügen Sie dazu den Feldnamen das Präfix c. hinzu. Wenn Sie beispielsweise ein benutzerdefiniertes Feld mit dem Namen date_approved haben, können Sie c.date_approved als benutzerdefiniertes Signal verwenden.

Signalnamen sind eine Kombination aus Buchstaben und Unterstrichen (_). Die folgende Liste enthält reservierte Namen, die nicht als Signalnamen verwendet werden können: log, exp, rr, is_nan und fill_nan.

Syntax der Ranking-Formel

Die benutzerdefinierte Rankingformel ist ein mathematischer Ausdruck mit den folgenden Komponenten:

  • Zahlen (double): Ein positiver oder negativer Gleitkommawert, der einem Signal oder Ausdruck eine Gewichtung hinzufügt.

  • Signale (signal): Die Namen der Signale, die im Abschnitt Verfügbare Signale aufgeführt sind.

  • Arithmetische Operatoren: + (Addition) und * (Multiplikation).

  • Mathematische Funktionen:

    • log(expression): Der natürliche Logarithmus
    • exp(expression): Der natürliche Exponent

    Jeder dieser Ausdrücke akzeptiert genau ein Argument, das ein Ausdruck in Bezug auf ein Signal ist.

    Beispiele für eine gültige Funktion: exp(c.document_age) und log(keywordSimilarityScore * 0.2 + 1.0).

  • Funktion für die Transformation des reziproken Rangs (rr): Diese Funktion wird als rr(expression, k) ausgedrückt. Die Dokumente werden zuerst nach dem Wert von expression in absteigender Reihenfolge sortiert und ihnen wird ein Rang zugewiesen. Der endgültige Wert wird dann mit den Ausdrücken 1 / (rank_i + k) berechnet. Dabei ist rank_i die Position des Dokuments in der sortierten Liste ab 0 und k eine positive Gleitkommazahl, die Sie angeben.

    Die Funktion rr() transformiert alle Werte auf dieselbe Skala und macht eine zusätzliche Normalisierung überflüssig.

  • Funktionen für die Verarbeitung von „Keine Zahl“ (NaN):

    • is_nan(expression): Wenn der Ausdruck als „NaN“ ausgewertet wird, z. B. wenn ein Signal für ein Dokument fehlt, wird 1 zurückgegeben. Andernfalls wird 0 zurückgegeben.
    • fill_nan(arg_expression, fill_with_expression): Wenn arg_expression als NaN ausgewertet wird, wird fill_with_expression zurückgegeben. Andernfalls wird arg_expression zurückgegeben. Das ist wichtig für die Verarbeitung von Dokumenten, bei denen bestimmte Signale fehlen.

Beispiele für Ranking-Formeln

  1. Eine elementare Linearkombination:

    semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
    
  2. Eine komplexe Formel mit reziprokem Rang und NaN-Verarbeitung:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  3. Eine komplexe Formel mit reziprokem Rang, Exponentialfunktion und NaN-Verarbeitung:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
    

Wenn Sie das Ranking für Ihre Dokumente in den Suchergebnissen anpassen möchten, erstellen Sie manuell eine Formel und fügen Sie sie Ihrem search-API-Aufruf hinzu.

  1. Rankingausdruck formulieren

  2. Suchergebnisse abrufen

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "rankingExpression": "RANKING_EXPRESSION",
    "rankingExpressionBackend": "RANK_BY_FORMULA"
    }'
    

    Ersetzen Sie Folgendes:

Ranking-Formel mit der Python-Bibliothek optimieren

Bei komplexeren Anwendungsfällen kann es schwierig sein, die optimalen Gewichte für Ihre Formel zu finden. Um dieses Problem zu beheben, können Sie die Python-Bibliothek für die Abstimmung des Rankings von Vertex AI Search verwenden. Dieses Open-Source-Tool hilft Ihnen, eine geeignete Formel für Ihren Anwendungsfall zu finden.

Dies ist der allgemeine Workflow:

  1. Bereiten Sie ein Dataset mit Anfragen und entsprechenden Golden Labels vor. Diese Golden Labels können eindeutige Identifikationsfelder wie die Dokument-ID sein, mit denen Sie das SearchResult-Objekt in der Suchantwort verknüpfen können.
  2. Rufen Sie für eine Reihe repräsentativer Anfragen die search-API auf, um die verfügbaren Ranking-Signale für alle zurückgegebenen Dokumente abzurufen. Sie finden sie im Feld SearchResult.rankSignals. Speichern Sie diese Daten zusammen mit Ihren Golden Labels.
  3. Verwenden Sie die Python-Bibliothek, um ein Ranking-Modell für dieses Dataset zu trainieren. Weitere Informationen finden Sie unter Clearbox-Python-Bibliothek.

  4. Konvertieren Sie die Formel aus den Trainingsergebnissen in einen Ranking-Ausdruck, den Sie dann in Ihren API-Aufrufen verwenden können.