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 Keyword-Ähnlichkeitswert 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-Optionen oder Aktualität von Dokumenten an.
  • Geschäftslogik einbinden: Fügen Sie dem Ranking-Algorithmus direkt Ihre eigenen benutzerdefinierten 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. 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 von der Innenstadt 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“. Die Option „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 „Innenpool“ 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 Status „rustikal“ nicht unbedingt mit „Luxus“ übereinstimmt und der Pool im Innenbereich niedriger eingestuft wird als genaue Übereinstimmungen von „groß“ und „im Freien“.

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 = drr(semantic_similarity_score, 32) * 0.4 + drr(keyword_similarity_score, 32) * 0.3 + drr(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 Transformation des dichten reziproken Rangs oder drr() 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 („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 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

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

Signalname Beschreibung
default_rank Der Standardrang des Dokuments, der vom Standardalgorithmus für das Ranking der Agent Search-Ergebnisse 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-Optionen liegt. Für dieses Signal wird die Ranking-Funktion „Best Match 25“ (BM25) 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"
      }
      
    • Standortkoordinaten anfordern: Ein Standort, 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_info": {
          "precise_location": {
            "point": {
              "lat": 52.23034637633789,
              "lon": 20.98339855121653,
            }
          }
        },
        "ranking_expression": "geo_distance(request_loc, c.hotel_location)",
        "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
    • Anfrageadresse: Eine Adresse, die explizit in der Suchanfrage angegeben wird. Sie können die Anfrage beispielsweise als Hotels angeben und eine Referenzadresse angeben.

      {
        "query": "Hotels",
        "user_info": {
          "precise_location": {
            "address": "1800 Amphibious Blvd. Mountain View, CA 94045"
          }
        },
        "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 dichten reziproken Rangs (drr):

    Diese Funktion wird als drr(expression, k, eps) ausgedrückt. Die Dokumente werden zuerst nach dem Wert von expression in absteigender Reihenfolge sortiert und ihnen wird ein Rang zugewiesen. Wenn die Ausdruckswerte innerhalb von eps liegen, gelten sie als gleich. Die Funktion berechnet dann den endgültigen Wert mit den Ausdrücken 1 / (rank_i + k), wobei rank_i die Position des Dokuments in der sortierten Liste ab 0 ist und k eine positive Gleitkommazahl ist, die Sie angeben.

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

    Google empfiehlt, diese Funktion anstelle der früheren Funktion für die Transformation des reziproken Rangs (rr) zu verwenden, da sie bessere Ergebnisse liefert, wenn Signale für die Top-Ergebnisse gleich sind. Wenn beispielsweise nach Hotels in San Francisco gesucht wird, gibt es viele Hotels innerhalb der Stadtgrenzen, sodass viele Hotels dasselbe Signal für die geografische Entfernung haben.

    Weitere Informationen zum Parameter eps:

    • Der Parameter eps bietet mehr Flexibilität bei der Entscheidung, ob zwei Signale gleich sind. Entsprechende Signale sind am häufigsten für Signale des Typs boosting_factor, geo_distance, benutzerdefiniert (kategorisch) und benutzerdefiniert (Ganzzahl) verfügbar.

    • Mit der Funktion wird ermittelt, ob der Ausdruckswert aus einem Dokument mit dem Ausdruckswert aus einem anderen Dokument übereinstimmt. Wenn eps=0, müssen die Werte genau gleich sein, um als gleich zu gelten. Wenn eps>0, gelten die Werte innerhalb des von eps angegebenen Bereichs als gleich.

    • Genauer gesagt: Wenn x1 und x2 Signalwerte sind, gelten sie als gleich, wenn der absolute Unterschied zwischen den beiden kleiner oder gleich eps ist, d. h. wenn abs(x1-x2) <= eps. Standardmäßig ist eps=0 festgelegt. Das bedeutet, dass die Werte als gleich betrachtet werden, wenn x1 == x2. Der Standardwert eps=0 funktioniert gut für Ganzzahlen, kann aber in einigen Fällen für Gleitkommazahlen fehlschlagen, da die Gleitkommaarithmetik ungenau ist. So kann beispielsweise 1/5 als 0.20000000000001 oder als 0.19999999999 ausgewertet werden.

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

    Obwohl diese Funktion unterstützt wird, empfiehlt Google die neuere Funktion für die Transformation des dichten reziproken Rangs (drr).

  • 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 entscheidend für den Umgang mit Dokumenten, 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 dichtem reziproken Rang und NaN-Verarbeitung:

    drr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  • Eine komplexe Formel mit dichtem reziproken Rang, Exponentialfunktion und NaN-Verarbeitung:

    drr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
    
  • Ein komplexes Beispiel für eine Formel mit dichtem reziproken Rang und der Funktion geo_distance(), die die Verwendung des Parameters eps mit der Funktion geo_distance() veranschaulicht:

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

    In dieser Formel ist der Multiplikationsfaktor ein negativer Wert. Ein größerer Abstand entspricht also einem kleineren (negativeren) Ausdruckswert. Daher wird mit dem reziproken Rang ein niedrigerer Ranking-Wert für größere Abstände zugewiesen.

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

Damit das keywordSimilarityScore-Signal in strukturierten Datenspeichern in Ihrer Suchantwort enthalten ist, müssen Sie Ihr Schema aktualisieren, um Folgendes zu tun:

  • Ordnen Sie die für Keyword-Optionen 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 umgehen, können Sie die Python-Bibliothek zur Optimierung des Rankings von Agent Search verwenden. Diese Open-Source-Bibliothek 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.