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
- undOR
-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 durchAND
verbunden sind und nurOR
-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 mitANY()
-Ausdrücken mit einem einzelnen Argument. available
-Einschränkungen müssen sich auf der obersten Ebene befinden. Sie können nicht als Teil einerOR
-Klausel oder einer Negierung (NOT
) verwendet werden. Sie können nuravailable: 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 inANY()
-Ausdrücken enthalten sind. Wenn eineOR
-Klausel mehrereANY()
-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:
Suchen Sie die Datenspeicher-ID. Wenn Sie die Datenspeicher-ID bereits haben, fahren Sie mit dem nächsten Schritt fort.
Rufen Sie in der Google Cloud Console die Seite Agent Builder auf und klicken Sie im Navigationsmenü auf Datenspeicher.
Klicken Sie auf den Namen des Datenspeichers.
Rufen Sie auf der Datenseite Ihres Datenspeichers die Datenspeicher-ID ab.
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.So machen Sie das Feld
categories
filterbar:Rufen Sie in der Google Cloud Console die Seite Agent Builder auf.
Klicken Sie auf die App mit Ihren Empfehlungen.
Klicken Sie auf den Tab Schema. Auf diesem Tab werden die aktuellen Feldeinstellungen angezeigt.
Klicken Sie auf Bearbeiten.
Klicken Sie in der Zeile Kategorien das Kästchen Filterbar an (falls noch nicht geschehen) und klicken Sie dann auf Speichern.
Warten Sie sechs Stunden, damit die Schemaänderung übernommen werden kann. Nach sechs Stunden können Sie mit dem nächsten Schritt fortfahren.
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
-WertChildren
und demavailability_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" }