Si vous disposez d'une application de recommandations, vous pouvez utiliser les champs de document pour filtrer les résultats de vos recommandations. Cette page explique comment utiliser les champs de document pour filtrer une recommandation sur un ensemble spécifique de documents. Bien que les exemples de cette page concernent les recommandations de contenus multimédias, les principes présentés ici sont les mêmes pour les recommandations personnalisées. Pour en savoir plus sur les recommandations de contenus multimédias, consultez la Présentation de Vertex AI Search pour les contenus multimédias.
Filtrer les recommandations et les mises à jour des data store
Après toute mise à jour du data store, vous devrez attendre jusqu'à huit heures pendant que le modèle se réentraîne. En effet, le modèle doit connaître les valeurs actuelles des métadonnées du document, ainsi que les champs configurés comme filtrables. Vous devez attendre que les modifications apportées aux documents et au schéma se propagent. Pour les recommandations (contrairement à la recherche), le filtrage n'est pas effectué en temps réel.
Filtres et paramètres de diversification (recommandations de médias uniquement)
En plus des filtres, le paramètre de diversification d'une application affecte également les résultats renvoyés dans une réponse de recommandation de contenu multimédia. Les effets des filtres et de la diversification sont combinés. La diversification est effectuée en premier, puis le filtrage.
La combinaison d'une diversité élevée basée sur des règles et d'un filtrage des attributs basé sur des catégories entraîne souvent une sortie vide. En effet, une diversité élevée limite l'application à renvoyer un résultat pour chaque catégorie.
Par exemple, vous souhaitez recommander des films basés sur Toy Story. Vous définissez le niveau de diversité basé sur des règles sur "Élevé". Étant donné que le niveau de diversité est élevé, même si de nombreux films peuvent être recommandés, un seul film (par exemple, WALL·E) est renvoyé dans la catégorie des films pour enfants. Lorsque le filtre pour les films pour enfants est appliqué, seule la recommandation WALL·E est renvoyée.
Pour obtenir des informations générales sur la diversité, consultez Diversifier les recommandations de médias.
Avant de commencer
Assurez-vous d'avoir créé une application de recommandations et data store. Pour en savoir plus, consultez Créer des applications multimédias ou Créer un data store de recommandations personnalisées.
Exemples de documents
Consultez ces exemples de documents média. Vous pouvez vous référer à ces exemples de documents tout au long de cette page.
{"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"}}
Expressions de filtre
Utilisez des expressions de filtre pour définir vos filtres de recommandations.
Syntaxe des expressions de filtre
La forme Backus-Naur étendue suivante résume la syntaxe des expressions de filtre que vous pouvez utiliser pour définir vos filtres de recommandations.
# 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;
Restrictions concernant les expressions de filtre
Les restrictions suivantes s'appliquent aux expressions de filtre pour les recommandations :
- La profondeur d'intégration des opérateurs
AND
etOR
entre parenthèses est limitée. Les expressions logiques du filtre doivent être au format forme normale conjonctive (CNF). L'expression logique la plus complexe acceptée peut être une liste de clauses connectées parAND
qui ne contiennent que des opérateursOR
, par exemple :(... OR ... OR ...) AND (... OR ...) AND (... OR ...)
. Les expressions peuvent être niées avec le mot clé
NOT
ou avec-
. Cette option ne fonctionne qu'avec les expressionsANY()
à un seul argument.Les restrictions
available
doivent être au niveau supérieur. Ils ne peuvent pas être utilisés dans une clauseOR
ni dans une négation (NOT
). Vous ne pouvez utiliser queavailable: true
. Si vous omettez ce filtre, les documents expirés et ceux qui ne sont pas encore disponibles peuvent être renvoyés en tant que recommandations.Le champ
available
correspond à la logique suivante :datetime.now >= available_time AND datetime.now <= expire_time
Si
expire_time
n'est pas défini,datetime.now <= expire_time
est résolu surtrue
.Le nombre maximal de termes dans la clause
AND
de premier niveau est de 20.Une clause
OR
peut comporter jusqu'à 100 arguments inclus dans les expressionsANY()
. Si une clauseOR
comporte plusieurs expressionsANY()
, leurs arguments sont tous comptabilisés dans cette limite. Par exemple,categories: ANY("drama", "comedy") OR categories: ANY("adventure")
comporte trois arguments.
Exemples d'expressions de filtre
Le tableau suivant présente des exemples d'expressions de filtre valides et non valides. Il indique également pourquoi les exemples non valides ne le sont pas.
Expression | Valide | Remarques |
---|---|---|
language_code: ANY("en", "fr") |
Oui | |
NOT language_code: ANY("en") |
Oui | |
NOT language_code: ANY("en", "fr") |
Non | Inverse une ANY() comportant plusieurs arguments. |
language_code: ANY("en", "fr") OR categories: ANY("drama") |
Oui | |
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") |
Oui | |
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") |
Non | La forme normale conjonctive n'est pas utilisée. |
(language_code: ANY("en")) AND (available: true) |
Oui | |
(language_code: ANY("en")) OR (available: true) |
Non | Combine available dans une expression OR avec d'autres conditions. |
L'expression de filtre suivante permet de filtrer les documents qui appartiennent à la catégorie "Drame" ou "Action", qui ne sont pas en anglais et qui sont disponibles :
categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true
Limites de filtrage
Chaque champ de document filtrable consomme de la mémoire dans chacun de vos modèles. Les limites suivantes permettent d'éviter les effets négatifs sur les performances de diffusion :
Vous pouvez définir jusqu'à 10 champs personnalisés comme filtrables dans votre schéma.
Si plus de 10 champs personnalisés sont détectés lors de l'entraînement de l'application, seuls 10 sont utilisés.
Votre schéma peut contenir jusqu'à 100 000 000 de valeurs de champ filtrables.
Vous pouvez estimer le nombre total de valeurs de champ filtrables dans votre schéma en multipliant le nombre de documents dans votre schéma par le nombre de champs filtrables. Si vous dépassez ces limites, voici ce qui se produit :
- Vous ne pouvez pas définir d'autres champs comme filtrables.
- L'entraînement de l'application échoue.
Filtrer les recommandations
Pour filtrer les recommandations de contenus multimédias, procédez comme suit :
Trouvez l'ID de votre data store. Si vous disposez déjà de l'ID de votre data store, passez à l'étape suivante.
Dans la console Google Cloud , accédez à la page Applications d'IA et cliquez sur Data stores dans le menu de navigation.
Cliquez sur le nom de votre data store.
Sur la page Données de votre datastore, obtenez l'ID du datastore.
Déterminez le ou les champs de document sur lesquels vous souhaitez appliquer un filtre. Par exemple, pour les documents de la section Avant de commencer, vous pouvez utiliser le champ
categories
comme filtre.Pour rendre le champ
categories
filtrable, procédez comme suit :Dans la console Google Cloud , accédez à la page AI Applications.
Cliquez sur votre application de recommandations.
Cliquez sur l'onglet Schéma. Cet onglet affiche les paramètres de champ actuels.
Cliquez sur Modifier.
Si ce n'est pas déjà fait, cochez la case Filtrable dans la ligne categories (catégories), puis cliquez sur Save (Enregistrer).
Patientez six heures pour que la modification de votre schéma soit propagée. Au bout de six heures, vous pouvez passer à l'étape suivante.
Pour obtenir une recommandation et filtrer le champ
categories
, exécutez le code suivant sur la ligne de commande :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"
Remplacez les éléments suivants :
PROJECT_ID
: par l'ID du projet.DATA_STORE_ID
: ID de votre data store.DOCUMENT_ID
: ID du document pour lequel vous souhaitez prévisualiser les recommandations. Utilisez l'ID que vous avez utilisé pour ce document au moment de l'ingestion de vos données.EVENT_TYPE
: type d'événement utilisateur. Pour les valeurseventType
, consultez UserEvent.USER_PSEUDO_ID
: identifiant pseudonymisé de l'utilisateur. Vous pouvez utiliser un cookie HTTP pour ce champ, qui identifie de manière unique un visiteur sur un seul appareil. Ne définissez pas ce champ sur le même identifiant pour plusieurs utilisateurs. Cela combinerait leurs historiques d'événements et dégraderait la qualité du modèle. Ne saisissez aucune information permettant d'identifier personnellement l'utilisateur dans ce champ.SERVING_CONFIG_ID
: ID de votre configuration de diffusion. L'ID de votre configuration de diffusion est le même que celui de votre moteur. Utilisez donc l'ID de votre moteur ici.FILTER
: champ de texte qui vous permet de filtrer un ensemble de champs spécifié à l'aide de la syntaxe des expressions de filtre. La valeur par défaut est une chaîne vide, ce qui signifie qu'aucun filtre n'est appliqué.
Par exemple, supposons que vous souhaitiez obtenir une recommandation pour un événement utilisateur de lecture multimédia spécifique et que vous souhaitiez filtrer les résultats de la recommandation pour n'inclure que les documents qui sont : (1) dans la catégorie "Enfants" et (2) actuellement disponibles. Pour ce faire, incluez les instructions suivantes dans votre appel :
"eventType": "media-play"
"filter": "categories: ANY(\"Children\") AND available: true"
Pour en savoir plus, consultez la section sur la méthode
recommend
.Cliquez pour obtenir un exemple de réponse.
Si vous effectuez une demande de recommandation comme celle ci-dessus, vous pouvez vous attendre à obtenir une réponse semblable à celle ci-dessous. Notez que la réponse inclut les deux documents dont la valeur
categories
estChildren
et dont la valeuravailability_start_time
est postérieure à la date actuelle.{ "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" }