Empfehlungen filtern

Wenn Sie eine Empfehlungs-App haben, können Sie Dokumentfelder verwenden, um Ihre Empfehlungsergebnisse zu filtern. Auf dieser Seite wird erläutert, wie Sie Dokumentfelder verwenden, um eine Empfehlung auf eine bestimmte Gruppe von Dokumenten zu filtern. Die Beispiele auf dieser Seite beziehen sich zwar auf Medienempfehlungen, die hier gezeigten Prinzipien gelten aber auch für benutzerdefinierte Empfehlungen. Weitere Informationen zu Medienempfehlungen finden Sie unter Einführung in die Agent Search für Medien.

Empfehlungen und Datenspeicher-Updates filtern

Nach jedem Datenspeicher-Update müssen Sie bis zu acht Stunden warten, bis das Modell neu trainiert wurde. Das liegt daran, dass das Modell die aktuellen Werte in den Dokumentmetadaten sowie die Felder kennen muss, die als filterbar konfiguriert sind. Sie müssen warten, bis Dokument- und Schemaänderungen übernommen wurden. Bei Empfehlungen (im Gegensatz zur Suche) erfolgt die Filterung nicht in Echtzeit.

Filter- und Diversifizierungseinstellungen (nur Medienempfehlungen)

Neben Filtern wirkt sich auch die Diversifizierungseinstellung einer App auf die Ergebnisse aus, die in einer Medienempfehlungsantwort zurückgegeben werden. Die Auswirkungen von Filtern und Diversifizierung werden kombiniert. Die Diversifizierung erfolgt zuerst und die Filterung an zweiter Stelle.

Die Kombination aus hoher, regelbasierter Diversifizierung und kategorienbasierter Attributfilterung führt oft zu einer leeren Ausgabe. Das liegt daran, dass eine hohe Diversifizierung die App darauf beschränkt, ein Ergebnis für jede Kategorie zurückzugeben.

Beispiel: Sie möchten Filme basierend auf Toy Story empfehlen. Sie legen die regelbasierte Diversifizierung auf „Hoch“ fest. Da die Diversifizierung hoch ist, wird zwar eine Vielzahl von Filmen empfohlen, aber nur ein Film (z. B. WALL·E) in der Kategorie „Kinderfilme“ zurückgegeben. Wenn dann der Filter für Kinderfilme angewendet wird, wird nur WALL·E als Empfehlung zurückgegeben.

Allgemeine Informationen zur Diversifizierung finden Sie unter Medienempfehlungen diversifizieren.

Hinweis

Achten Sie darauf, dass Sie eine Empfehlungs-App und einen Datenspeicher erstellt haben. Weitere Informationen finden Sie unter Medien-Apps erstellen oder Benutzerdefinierten Empfehlungsdatenspeicher erstellen.

Beispieldokumente

Sehen Sie sich diese Beispiel-Mediendokumente an. Sie können im Verlauf dieser Seite auf diese Beispieldokumente zurückgreifen.

{"id":"1","schemaId":"default_schema","structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"88125","schemaId":"default_schema","structData":{"title":"Harry Potter and the Deathly Hallows: Part 2 (2011)","categories":["Action","Adventure","Drama","Fantasy","Mystery","IMAX"],"uri":"http://mytestdomain.movie/content/88125","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"2857","schemaId":"default_schema","structData":{"title":"Yellow Submarine (1968)","categories":["Adventure","Animation","Comedy","Fantasy","Musical"],"uri":"http://mytestdomain.movie/content/2857","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}
{"id":"60069","schemaId":"default_schema","structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069","available_time":"2023-01-01T00:00:00Z","media_type":"movie"}}

Filterausdrücke

Verwenden Sie Filterausdrücke, um Ihre Empfehlungsfilter zu definieren.

Syntax von Filterausdrücken

Die folgende Extended Backus–Naur Form fasst die Syntax von Filterausdrücken zusammen, mit der Sie Ihre Empfehlungsfilter definieren können.

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # An expression can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthesized expression
    | "(", expression, ")"
    # A simple expression applying to a textual field.
    # Function "ANY" returns true if the field contains any of the literals.
    textual_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # OR filter by "available"
    available, ":", "true",
  # A literal is any double-quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double-quoted string;
  textual_field = see the tables below;

Einschränkungen für Filterausdrücke

Für Filterausdrücke für Empfehlungen gelten die folgenden Einschränkungen:

  • Die Tiefe der Einbettung von AND- und OR-Operatoren in Klammern ist begrenzt. Die logischen Ausdrücke im Filter müssen in konjunktiver Normalform (CNF) vorliegen. Der komplexeste unterstützte logische Ausdruck kann eine AND-verknüpfte Liste von Klauseln sein, die nur OR Operatoren enthalten, z. B. (... OR ... OR ...) AND (... OR ...) AND (... OR ...).
  • Ausdrücke können mit dem Schlüsselwort NOT oder mit - negiert werden. Dies funktioniert nur mit ANY()-Ausdrücken mit einem einzelnen Argument.

  • available-Einschränkungen müssen auf der obersten Ebene liegen. Sie können nicht als Teil einer OR Klausel oder einer Negation (NOT) verwendet werden. Sie können nur available: true verwenden. Wenn Sie diesen Filter weglassen, werden möglicherweise abgelaufene und noch nicht verfügbare Dokumente als Empfehlungen zurückgegeben.

    Das Feld available wird folgender Logik zugeordnet:

    datetime.now >= available_time AND datetime.now <= expire_time

    Wenn das expire_time nicht festgelegt ist, datetime.now <= expire_time wird zu true aufgelöst.

  • Die maximale Anzahl von Begriffen in der AND-Klausel der obersten Ebene beträgt 20.

  • Eine OR-Anweisung kann bis zu 100 Argumente haben, die in ANY()-Ausdrücken enthalten sind. Wenn eine OR-Anweisung mehrere ANY()-Ausdrücke enthält, werden alle Argumente auf dieses Limit angerechnet. Beispiel: categories: ANY("drama", "comedy") OR categories: ANY("adventure") hat drei Argumente.

Beispiele für Filterausdrücke

Die folgende Tabelle enthält Beispiele für gültige und ungültige Filterausdrücke. Außerdem werden die Gründe dafür angegeben, warum die ungültigen Beispiele ungültig sind.

Ausdruck Gültig Hinweise
language_code: ANY("en", "fr") Ja
NOT language_code: ANY("en") Ja
NOT language_code: ANY("en", "fr") Nein Negiert ein ANY() mit mehr als einem Argument.
language_code: ANY("en", "fr") OR categories: ANY("drama") Ja
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") Ja
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") Nein Nicht in konjunktiver Normalform.
(language_code: ANY("en")) AND (available: true) Ja
(language_code: ANY("en")) OR (available: true) Nein Kombiniert available in einem OR-Ausdruck mit anderen Bedingungen.

Der folgende Filterausdruck filtert nach Dokumenten, die sich in der Kategorie „Drama“ oder „Action“ befinden, nicht auf Englisch sind und verfügbar sind:

categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true

Filterlimits

Jedes filterbare Dokumentfeld belegt in jedem Ihrer Modelle etwas Arbeitsspeicher. Die folgenden Limits helfen, negative Auswirkungen auf die Bereitstellungsleistung zu vermeiden:

  • In Ihrem Schema können bis zu zehn benutzerdefinierte Felder als filterbar festgelegt werden.

    Wenn beim Training der App mehr als zehn benutzerdefinierte Felder gefunden werden, werden nur zehn verwendet.

  • In Ihrem Schema können bis zu 100.000.000 filterbare Feldwerte vorhanden sein.

    Sie können die Gesamtzahl der filterbaren Feldwerte in Ihrem Schema schätzen, indem Sie die Anzahl der Dokumente in Ihrem Schema mit der Anzahl der filterbaren Felder multiplizieren. Wenn Sie diese Limits überschreiten, geschieht Folgendes:

    • Sie können keine zusätzlichen Felder als filterbar festlegen.
    • Das App-Training schlägt fehl.

Empfehlungen filtern

So filtern Sie Medienempfehlungen:

  1. Suchen Sie nach Ihrer Datenspeicher-ID. Wenn Sie die ID Ihres Datenspeichers bereits haben, fahren Sie mit dem nächsten Schritt fort.

    1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf und klicken Sie im Navigationsmenü auf Datenspeicher.

      Rufen Sie die Seite Datenspeicher auf.

    2. Klicken Sie auf den Namen des Datenspeichers.

    3. Rufen Sie auf der Seite Daten Ihres Datenspeichers die Datenspeicher-ID ab.

  2. Bestimmen Sie das oder die Dokumentfelder, nach denen Sie filtern möchten. Für die Dokumente im Abschnitt Hinweis können Sie beispielsweise das Feld categories als Filter verwenden.

  3. So machen Sie das Feld categories filterbar:

    1. Rufen Sie in der Google Cloud Console die Seite KI-Anwendungen auf.

      KI-Anwendungen

    2. Klicken Sie auf Ihre Empfehlungs-App.

    3. Klicken Sie auf den Tab Schema. Auf diesem Tab werden die aktuellen Feldeinstellungen angezeigt.

    4. Klicken Sie auf Bearbeiten.

    5. Wenn es noch nicht ausgewählt ist, klicken Sie in der Zeile categories das Kästchen Filterbar an und dann auf Speichern.

    6. Warten Sie sechs Stunden, damit die Schemaänderung übernommen werden kann. Nach sechs Stunden können Sie mit dem nächsten Schritt fortfahren.

  4. Wenn Sie eine Empfehlung erhalten und nach dem Feld categories filtern möchten, führen Sie den folgenden Code in der Befehlszeile aus:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
         "userEvent": {
           "eventType": "EVENT_TYPE",
           "userPseudoId": "USER_PSEUDO_ID",
           "documents": {
             "id": "DOCUMENT_ID"
           }
         },
         "params": {
           "returnDocument": true,
           "attributeFilteringSyntax": true,
           "strictFiltering": true
         },
         "filter": "FILTER"
       }' \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/SERVING_CONFIG_ID:recommend"
    

    Ersetzen Sie Folgendes:

    • PROJECT_ID: die Projekt-ID.
    • DATA_STORE_ID: die ID Ihres Datenspeichers.
    • DOCUMENT_ID: die ID des Dokuments, für das Sie eine Vorschau der Empfehlungen sehen möchten. Verwenden Sie die ID, die Sie für dieses Dokument verwendet haben, als Sie Ihre Daten aufgenommen haben.
    • EVENT_TYPE: der Typ des Nutzerereignisses. Informationen zu eventType-Werten finden Sie unter UserEvent.
    • USER_PSEUDO_ID: ein UTF-8-codierter String, der als eindeutige pseudonymisierte Kennung zur Nachverfolgung der Nutzer dient. Er darf maximal 128 Zeichen lang sein. Google empfiehlt dringend, dieses Feld zu verwenden, da es die Modellleistung und die Qualität der Personalisierung verbessert. Sie können für dieses Feld ein HTTP-Cookie verwenden, mit dem ein Besucher auf einem einzelnen Gerät eindeutig identifiziert wird. Hier einige wichtige Überlegungen:

      • Diese Kennung ändert sich nicht, wenn sich der Besucher auf einer Website an- oder abmeldet.
      • Dieses Feld darf nicht für mehrere Nutzer auf dieselbe Kennung festgelegt werden. Andernfalls kann die Verwendung derselben Nutzer-ID dazu führen, dass Ereignisverläufe verschiedener Nutzer zusammengeführt werden, was die Modellqualität beeinträchtigen kann.
      • Dieses Feld darf keine personenidentifizierbaren Informationen enthalten.

      Weitere Informationen finden Sie unter userPseudoId.

    • SERVING_CONFIG_ID: die ID Ihrer Bereitstellungskonfiguration. Die ID Ihrer Bereitstellungskonfiguration ist dieselbe wie Ihre Engine-ID. Verwenden Sie daher hier Ihre Engine-ID.
    • FILTER: ein Textfeld, in dem Sie mit Filterausdruckssyntax nach einer bestimmten Gruppe von Feldern filtern können. Der Standardwert ist ein leerer String. Das bedeutet, dass kein Filter angewendet wird.

    Angenommen, Sie möchten eine Empfehlung für ein bestimmtes Nutzerereignis für die Medienwiedergabe und die Empfehlungsergebnisse so filtern, dass sie nur Dokumente enthalten, die (1) in der Kategorie „Kinder“ sind und (2) derzeit verfügbar sind. Dazu müssen Sie die folgenden Anweisungen in Ihren Aufruf einfügen:

    • "eventType": "media-play"
    • "filter": "categories: ANY(\"Children\") AND available: true"

    Weitere Informationen finden Sie unter der recommend Methode.

    Klicken Sie hier, um eine Beispielantwort zu sehen.

    Wenn Sie eine Empfehlungsanfrage wie die vorherige stellen, erhalten Sie eine Antwort ähnlich der folgenden. Die Antwort enthält die beiden Dokumente mit dem categories-Wert Children und einem availability_start_time-Wert, der nach dem aktuellen Datum liegt.

    {
    "results": [
      {
        "id":"1",
        "schemaId":"default_schema",
        "structData":{"title":"Toy Story (1995)","categories":["Adventure","Animation","Children","Comedy","Fantasy"],"uri":"http://mytestdomain.movie/content/1",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      },
      {
        "id":"60069",
        "schemaId":"default_schema",
        "structData":{"title":"WALL·E (2008)","categories":["Adventure","Animation","Children","Romance","Sci-Fi"],"uri":"http://mytestdomain.movie/content/60069",
        "availability_start_time":"2023-01-01T00:00:00Z",
        "media_type":"movie"
        }
      }
    ],
    "attributionToken": "ChMzMDk3NTQ4MzQxOTcxOTE0ODM1GglhZi10ZXN0LTEiDmFmLXRlc3QtMTE0NTE0KAAwBg"
    }