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äftlichen Anforderungen 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: Passen Sie die Gewichtungen verschiedener Signale wie semantische Ähnlichkeit, Keyword-Abgleich oder Aktualität von Dokumenten an.
  • 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 der folgende String 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. Das Hotel 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 „tierfreundlich“ 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, da der „rustikale“ Stil nicht unbedingt mit „Luxus“ gleichzusetzen ist 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 zum 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 Benutzerdefinierte Ranking-Bewertung Benutzerdefinierte Rangfolge Einbettungsbasiertes Ranking
Hotel A 9,0 6.2 („Flughafen“, „Luxus“, „Pool auf dem Dach“) 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 Ranking-Methoden ergibt sich beim benutzerdefinierten Ranking ein durchdachteres Ranking, das wahrscheinlich besser den Anforderungen eines Nutzers entspricht als ein rein embeddingbasiertes 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 Relevanzwert (double * relevanceScore) oder die Einbettung (double * dotProduct(embedding_field_path)).

    • 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:

Signalname Beschreibung
default_rank Der Standardrang des Dokuments, der vom standardmäßigen VAIS-Rankingalgorithmus bestimmt wird
semantic_similarity_score Ein Wert, der auf der Grundlage von Abfrage- und Inhaltseinbettungen berechnet wird, um zu bestimmen, wie ähnlich eine Suchanfrage und der Inhalt eines Dokuments sind. Dieser Wert wird mit einem proprietären Google-Algorithmus berechnet.
relevance_score Ein Wert, der von einem Modell für die tiefe 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 Eine Punktzahl, bei der 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 (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.

Benutzerdefinierte Signale

Zusätzlich zu den Standardsignalen können Sie Signale aus jedem numerischen benutzerdefinierten Feld in einem Dokument verwenden, das als abrufbar gekennzeichnet ist. 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.

Geodistanz – ein abgeleitetes Signal

Abgeleitete Signale wie die geografische Entfernung werden auf Grundlage von Standard- und benutzerdefinierten Signalen berechnet. „Geodistance“ ist eine Funktion, mit der die Entfernung zwischen einem Quell- und einem Zielort berechnet wird. Die Funktion geo_distance() wird als geo_distance(source_location, destination_location) ausgedrückt. Sie setzt sich aus den folgenden Argumenten zusammen:

  • Der Quellort oder source_location: Der Ausgangspunkt für die Berechnung der Entfernung. Er kann einer der folgenden Typen sein:

    • Standort der Anfrage: Der Standort, der mithilfe von NLU-Modellen (Natural Language Understanding) aus der Anfrage geparst wird. Im Beispiel der Anfrage Hotels along the M6 extrahiert das Modell für die Verarbeitung natürlicher Sprache Hotels als was und M6 als wo aus den Suchparametern. Der where-Teil ist der Abfrageort und kann als Punkt, Polylinie, Kreis oder Polygon dargestellt werden.

      {
       "query": "Hotels along M6",
       "ranking_expression": "geo_distance(query_loc, c.hotel_location)",
       "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
    • Anfrageort: Ein Ort, der explizit in der Suchanfrage angegeben wird, z. B. der Breiten- und Längengrad eines Nutzers. Sie können die Anfrage beispielsweise als Hotels angeben und einen Ort mithilfe von Breiten- und Längengrad angeben.

      {
        "query": "Hotels",
        "user_location": {
          "point": {
            "lat": 52.23034637633789,
            "lon": 20.98339855121653,
          }
        },
        "ranking_expression": "geo_distance(request_loc, c.hotel_location)",
        "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
  • Das Ziel oder destination_location: Das Ziel für die Berechnung der Entfernung. Dabei handelt es sich um ein benutzerdefiniertes abrufbares Feld wie c.office_location oder c.home_location.

Die Reihenfolge dieser Argumente innerhalb der Funktion muss gleich bleiben. Das bedeutet, dass der Quellort immer das erste Argument in der geo_distance()-Funktion sein muss, gefolgt vom Zielort. Die Funktion berechnet die Entfernung in Metern anhand des Breiten- und Längengrads der Quell- und Zielorte.

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 Standardsignale 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 (beginnend mit 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, um Dokumente zu verarbeiten, bei denen bestimmte Signale fehlen.

Beispiele für Rankingformeln

Hier sind einige Beispiele für Ranking-Formeln, die Sie im Feld rankingExpression Ihrer Suchanfrage verwenden können:

  • Eine elementare Linearkombination:

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

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  • 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
    
  • Eine komplexe Formel mit dem reziproken Rang und der Funktion geo_distance() (Private Vorschau):

    rr(keyword_similarity_score, 16) * 0.8 + rr(geo_distance(query_loc, c.office_location) * -1, 16) * 0.2
    

    In dieser Formel ist der Multiplikationsfaktor ein negativer Wert, sodass größere Entfernungen einem höheren Ausdruckswert entsprechen. Daher werden mit dem reziproken Rang größere Entfernungen niedriger eingestuft.

Signale in der Antwort

Wenn ein Dokument in der Suchantwort zurückgegeben wird, werden im Suchergebnis die Standardsignale und benutzerdefinierten Signale aufgeführt, die zum Abrufen des Dokuments aus dem Datenspeicher beitragen. Im Feld rankSignals werden diese Signale aufgeführt.

Textfelder für die Keyword-Ähnlichkeit

Wenn Sie in strukturierten Datenspeichern das keywordSimilarityScore-Signal in Ihrer Suchantwort erhalten möchten, müssen Sie Ihr Schema aktualisieren, um Folgendes zu tun:

  • Ordnen Sie die für den Keyword-Abgleich erforderlichen Textfelder den Schlüsselattributen title und description zu.
  • Aktualisieren Sie die Annotation für die Textfelder auf Searchable.

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. Formulieren Sie einen Rankingausdruck.

  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 goldenen 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.