Empfehlungen filtern

Wenn Sie eine Empfehlungs-App haben, die strukturierte Daten verwendet, können Sie Ihre Empfehlungsergebnisse mithilfe von Dokumentenfeldern filtern. Auf dieser Seite wird beschrieben, wie Sie mithilfe von Dokumentenfeldern eine Empfehlung auf eine bestimmte Gruppe von Dokumenten filtern. Die Beispiele auf dieser Seite beziehen sich zwar auf Medienempfehlungen, die hier beschriebenen Prinzipien gelten jedoch auch für allgemeine Empfehlungen. Weitere Informationen zu Medienempfehlungen finden Sie unter Einführung in Vertex AI Search für Medien.

Empfehlungen und Datenspeicherupdates filtern

Nach jeder Aktualisierung des Datenspeichers müssen Sie bis zu 8 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 sich Dokument- und Schemaänderungen ausgewirkt haben. Anders als bei der Suche erfolgt die Filterung bei Empfehlungen nicht in Echtzeit.

Filter und Einstellungen für die Diversifizierung (nur Medienempfehlungen)

Neben den Filtern wirkt sich auch die Diversifizierungseinstellung einer App auf die Ergebnisse aus, die in einer Antwort mit Medienempfehlungen zurückgegeben werden. Die Auswirkungen von Filtern und Diversifizierung werden kombiniert. Die Diversifizierung erfolgt zuerst und die Filterung danach.

Die Kombination aus hoher regelbasierter Vielfalt und kategoriebasierter Attributfilterung führt häufig zu einer leeren Ausgabe. Das liegt daran, dass bei hoher Vielfalt die App nur ein Ergebnis pro Kategorie zurückgeben kann.

Angenommen, Sie möchten Filme empfehlen, die auf Toy Story basieren. Sie legen die regelbasierte Diversitätsstufe auf „Hoch“ fest. Da der Grad der Vielfalt hoch ist, wird trotz vieler empfohlener Filme 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 zu Vielfalt finden Sie unter Medienempfehlungen diversifizieren.

Hinweise

Sie müssen eine Empfehlungsanwendung und einen Datenspeicher erstellt haben. Weitere Informationen finden Sie unter Medien-Apps erstellen oder Allgemeinen Empfehlungsdatenspeicher erstellen.

Beispieldokumente

Hier findest du Beispieldokumente für Medien. Sie können sich diese Beispieldokumente ansehen, während Sie diese Seite lesen.

{"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

In der folgenden erweiterten Backus-Naur-Form wird die Syntax für Filterausdrücke zusammengefasst, 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 Einbettung von AND- und OR-Operatoren in Klammern ist auf eine bestimmte Tiefe beschränkt. Die logischen Ausdrücke im Filter müssen in konjunktiver Normalform (CNF) sein. Der komplexeste unterstützte logische Ausdruck kann eine Liste von Klauseln sein, die durch AND verbunden sind und 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 sich auf der obersten Ebene befinden. Sie können nicht als Teil einer OR-Klausel oder einer Negierung (NOT) verwendet werden. Sie können nur available: true verwenden.
  • Die maximale Anzahl von Begriffen in der AND-Klausel der obersten Ebene beträgt 20.
  • Eine OR-Klausel kann bis zu 100 Argumente enthalten, die in ANY()-Ausdrücken enthalten sind. Wenn eine OR-Klausel mehrere ANY()-Ausdrücke enthält, werden alle Argumente auf dieses Limit angerechnet. categories: ANY("drama", "comedy") OR categories: ANY("adventure") hat beispielsweise 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 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 eine ANY() mit mehreren Argumenten.
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.

Mit dem folgenden Filterausdruck werden Dokumente gefiltert, die der Kategorie „Drama“ oder „Action“ zugewiesen sind, nicht auf Englisch sind und verfügbar sind:

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

Filterlimits

Jedes filterbare Dokumentenfeld belegt in jedem Ihrer Modelle etwas Arbeitsspeicher. Mit den folgenden Einschränkungen lassen sich negative Auswirkungen auf die Anzeigenbereitstellung vermeiden:

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

    Wenn beim App-Training mehr als 10 benutzerdefinierte Felder gefunden werden, werden nur 10 verwendet.

  • Ihr Schema kann bis zu 100.000.000 filterbare Feldwerte enthalten.

    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 weiteren Felder als filterbar festlegen.
    • Das App-Training schlägt fehl.

Empfehlungen filtern

So filtern Sie Medienempfehlungen:

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

    1. Rufen Sie in der Google Cloud Console die Seite Agent Builder auf und klicken Sie im Navigationsmenü auf Datenspeicher.

      Zur Seite „Datenspeicher“

    2. Klicken Sie auf den Namen des Datenspeichers.

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

  2. Legen Sie das Dokumentfeld oder die Dokumentfelder fest, nach denen Sie filtern möchten. Für die Dokumente unter Vorbereitung 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 Agent Builder auf.

      Zum Agent Builder

    2. Klicken Sie auf die App mit Ihren Empfehlungen.

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

    4. Klicken Sie auf Bearbeiten.

    5. Klicken Sie in der Zeile Kategorien das Kästchen Filterbar an (falls noch nicht geschehen) und klicken Sie 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 in der Befehlszeile den folgenden Code 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"
    
    • PROJECT_ID: Die ID Ihres Projekts.
    • DATA_STORE_ID: Die ID Ihres Datenspeichers.
    • DOCUMENT_ID: Die ID des Dokuments, für das Sie sich eine Vorschau der Empfehlungen ansehen 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: Eine pseudonymisierte Kennung des Nutzers. Sie können für dieses Feld ein HTTP-Cookie verwenden, das einen Besucher auf einem einzelnen Gerät eindeutig identifiziert. Legen Sie für dieses Feld nicht dieselbe Kennung für mehrere Nutzer fest. Dadurch würden ihre Ereignisverläufe kombiniert und die Modellqualität beeinträchtigt. Geben Sie in dieses Feld keine personenidentifizierbaren Informationen an.
    • SERVING_CONFIG_ID: Die ID Ihrer Bereitstellungskonfiguration. Die ID der Bereitstellungskonfiguration ist mit der Engine-ID identisch. Verwenden Sie daher hier die Engine-ID.
    • FILTER: Ein Textfeld, mit dem Sie mithilfe der Filterausdrucksyntax nach einer bestimmten Gruppe von Feldern filtern können. Der Standardwert ist ein leerer String, d. h. es wird kein Filter angewendet.

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

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

    Weitere Informationen finden Sie im Artikel zur recommend-Methode.

    Klicken Sie für eine Beispielantwort.

    Wenn Sie eine Empfehlungsanfrage wie die vorherige stellen, erhalten Sie eine Antwort, die in etwa so aussieht: Die Antwort enthält die beiden Dokumente mit dem categories-Wert Children und dem 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"
    }