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:
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.
Die Funktion für die Transformation des reziproken Rangs oder
rr()wird verwendet, um alle Werte auf dieselbe Skala zu transformieren.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 FeldrankingExpressionangeben.
Ranking-Ausdruck (
rankingExpression): Dieses Feld enthält eine mathematische Formel, mit der das Ranking der abgerufenen Dokumente bestimmt wird.Für
RANK_BY_EMBEDDINGist dies entweder der Relevanzwert (double * relevanceScore) oder die Einbettung (double * dotProduct(embedding_field_path)).Bei
RANK_BY_FORMULAhandelt 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 M6extrahiert das Modell für die Verarbeitung natürlicher SpracheHotelsals was undM6als 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
Hotelsangeben 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 wiec.office_locationoderc.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 Logarithmusexp(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)undlog(keywordSimilarityScore * 0.2 + 1.0).Funktion für die Transformation des reziproken Rangs (
rr): Diese Funktion wird alsrr(expression, k)ausgedrückt. Die Dokumente werden zuerst nach dem Wert vonexpressionin absteigender Reihenfolge sortiert und ihnen wird ein Rang zugewiesen. Der endgültige Wert wird dann mit den Ausdrücken1 / (rank_i + k)berechnet. Dabei istrank_idie Position des Dokuments in der sortierten Liste (beginnend mit 0) undkeine 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, wird1zurückgegeben. Andernfalls wird0zurückgegeben.fill_nan(arg_expression, fill_with_expression): Wennarg_expressionals NaN ausgewertet wird, wirdfill_with_expressionzurückgegeben. Andernfalls wirdarg_expressionzurü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.3Eine komplexe Formel mit reziprokem Rang und NaN-Verarbeitung:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5Eine 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.1Eine 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.2In 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
titleunddescriptionzu. - Aktualisieren Sie die Annotation für die Textfelder auf
Searchable.
Ranking mit Rankingformel in der Suche anpassen
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.
Formulieren Sie einen Rankingausdruck.
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:
PROJECT_ID: die ID Ihres Projekts in Google Cloud .APP_ID: die ID der Vertex AI Search-App, die Sie abfragen möchten.QUERY: der Abfragetext für die Suche.RANKING_EXPRESSION: Die benutzerdefinierte Ranking-Formel, die Sie mit den verfügbaren Signalen und einer gültigen Syntax für Ranking-Formeln schreiben können.- Gültige Beispiele finden Sie unter Beispiele für Ranking-Formeln.
- Informationen zum Optimieren der Ranking-Formel, um die besten Ergebnisse zu erzielen, finden Sie unter Ranking-Formel mit der Python-Bibliothek optimieren.
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:
- 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. - 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 FeldSearchResult.rankSignals. Speichern Sie diese Daten zusammen mit Ihren Golden Labels. Verwenden Sie die Python-Bibliothek, um ein Ranking-Modell für dieses Dataset zu trainieren. Weitere Informationen finden Sie unter Clearbox-Python-Bibliothek.
Konvertieren Sie die Formel aus den Trainingsergebnissen in einen Ranking-Ausdruck, den Sie dann in Ihren API-Aufrufen verwenden können.