Si tienes una app de recomendaciones que usa datos estructurados, puedes usar los campos de documentos para filtrar los resultados de las recomendaciones. En esta página, se explica cómo usar los campos de documentos para filtrar una recomendación a un conjunto específico de documentos. Si bien los ejemplos de esta página son para recomendaciones de contenido multimedia, los principios que se muestran aquí son los mismos para las recomendaciones genéricas. Para obtener más información sobre las recomendaciones de contenido multimedia, consulta Introducción a Vertex AI Search para contenido multimedia.
Cómo filtrar recomendaciones y actualizaciones del almacén de datos
Después de cualquier actualización del almacén de datos, deberás esperar hasta 8 horas mientras el modelo se vuelve a entrenar. Esto se debe a que el modelo necesita conocer los valores actuales en los metadatos del documento, así como los campos que están configurados como filtrables. Debes esperar a que se propaguen los cambios en el documento y en el esquema. En el caso de las recomendaciones (a diferencia de la búsqueda), el filtrado no se realiza en tiempo real.
Configuración de filtros y diversificación (solo para recomendaciones de contenido multimedia)
Además de los filtros, la configuración de diversificación de una app también afecta los resultados que se muestran en una respuesta de recomendación de contenido multimedia. Se combinan los efectos de los filtros y la diversificación. Primero se realiza la diversificación y, luego, el filtrado.
La combinación de una diversidad alta basada en reglas y un filtrado de atributos basado en categorías suele generar resultados vacíos. Esto se debe a que la alta diversidad limita a la app a mostrar un resultado para cada categoría.
Por ejemplo, quieres recomendar películas basadas en Toy Story. Estableces el nivel de diversidad basada en reglas en alto. Debido a que el nivel de diversidad es alto, aunque se podrían recomendar muchas películas, solo se muestra una (por ejemplo, WALL·E) en la categoría de películas infantiles. Cuando se aplica el filtro de películas infantiles, solo se muestra WALL·E como recomendación.
Para obtener información general sobre la diversidad, consulta Diversifica las recomendaciones de contenido multimedia.
Antes de comenzar
Asegúrate de haber creado una app de recomendaciones y un almacén de datos. Para obtener más información, consulta Cómo crear apps de música o Cómo crear un almacén de datos de recomendaciones genéricas.
Documentos de ejemplo
Revisa estos ejemplos de documentos multimedia. Puedes consultar estos documentos de ejemplo mientras lees esta página.
{"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"}}
Expresiones de filtro
Usa expresiones de filtro para definir tus filtros de recomendaciones.
Sintaxis de las expresiones de filtro
En la siguiente forma Backus-Naur extendida, se resume la sintaxis de la expresión de filtro que puedes usar para definir tus filtros de recomendaciones.
# 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;
Restricciones de las expresiones de filtro
Se aplican las siguientes restricciones a las expresiones de filtro para las recomendaciones:
- La profundidad de incorporación de operadores
AND
yOR
entre paréntesis es limitada. Las expresiones lógicas del filtro deben estar en forma normal conjuntiva (CNF). La expresión lógica compatible más compleja puede ser una lista de cláusulas conectadas conAND
que solo contiene operadoresOR
, como los siguientes:(... OR ... OR ...) AND (... OR ...) AND (... OR ...)
- Las expresiones se pueden negar con la palabra clave
NOT
o con-
. Esto solo funciona con expresionesANY()
con un solo argumento. - Las restricciones de
available
deben estar en el nivel superior. No se pueden usar como parte de una cláusulaOR
ni de una negación (NOT
). Solo puedes usaravailable: true
. - La cantidad máxima de términos en la cláusula
AND
de nivel superior es de 20. - Una cláusula
OR
puede tener hasta 100 argumentos que se incluyen en expresionesANY()
. Si una cláusulaOR
tiene varias expresionesANY()
, todos sus argumentos se consideran para este límite. Por ejemplo,categories: ANY("drama", "comedy") OR categories: ANY("adventure")
tiene tres argumentos.
Ejemplos de expresiones de filtro
En la siguiente tabla, se muestran ejemplos de expresiones de filtro válidas y no válidas. También proporciona los motivos por los que los ejemplos no válidos no son válidos.
Expresión | Válido | Notas |
---|---|---|
language_code: ANY("en", "fr") |
Sí | |
NOT language_code: ANY("en") |
Sí | |
NOT language_code: ANY("en", "fr") |
No | Niega un ANY() con más de un argumento. |
language_code: ANY("en", "fr") OR categories: ANY("drama") |
Sí | |
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") |
Sí | |
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") |
No | No está en formato disyuntivo normal. |
(language_code: ANY("en")) AND (available: true) |
Sí | |
(language_code: ANY("en")) OR (available: true) |
No | Combina available en una expresión OR con otras condiciones. |
La siguiente expresión de filtro busca documentos que estén en la categoría de drama o acción, que no estén en inglés y que estén disponibles:
categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true
Límites de filtrado
Cada campo de documento filtrable consume cierta memoria en cada uno de tus modelos. Los siguientes límites ayudan a evitar efectos adversos en el rendimiento de la publicación:
En tu esquema, se pueden configurar hasta 10 campos personalizados como filtrables.
Si se encuentran más de 10 campos personalizados durante el entrenamiento de la app, solo se usan 10.
En tu esquema, pueden estar presentes hasta 100,000,000 de valores de campo que se pueden filtrar.
Para estimar la cantidad total de valores de campos filtrables en tu esquema, multiplica la cantidad de documentos de tu esquema por la cantidad de campos filtrables. Si superas estos límites, sucederá lo siguiente:
- No puedes establecer campos adicionales como filtrables.
- No se puede completar el entrenamiento de la app.
Cómo filtrar recomendaciones
Para filtrar las recomendaciones de contenido multimedia, sigue estos pasos:
Busca el ID de tu almacén de datos. Si ya tienes el ID del almacén de datos, ve al siguiente paso.
En la consola de Google Cloud, ve a la página Agent Builder y, en el menú de navegación, haz clic en Almacenes de datos.
Haz clic en el nombre de tu almacén de datos.
En la página Datos de tu almacén de datos, obtén el ID del almacén de datos.
Determina el campo o los campos del documento que deseas filtrar. Por ejemplo, para los documentos de Antes de comenzar, puedes usar el campo
categories
como filtro.Para que el campo
categories
se pueda filtrar, haz lo siguiente:En la consola de Google Cloud, ve a la página Agent Builder.
Haz clic en la app de recomendaciones.
Haz clic en la pestaña Esquema. En esta pestaña, se muestra la configuración actual del campo.
Haz clic en Edit.
Si aún no está seleccionada, selecciona la casilla de verificación Filtrable en la fila categorías y, luego, haz clic en Guardar.
Espera seis horas para que se propague la edición del esquema. Después de seis horas, puedes continuar con el siguiente paso.
Para obtener una recomendación y filtrar el campo
categories
, ejecuta el siguiente código en la línea de comandos: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: Es el ID del proyecto
- DATA_STORE_ID: Es el ID de tu almacén de datos.
- DOCUMENT_ID: Es el ID del documento para el que deseas obtener una vista previa de las recomendaciones. Usa el ID que usaste para este documento cuando ingresaste tus datos.
- EVENT_TYPE: Es el tipo de evento del usuario. Para obtener valores de
eventType
, consulta UserEvent. - USER_PSEUDO_ID: Es un identificador seudónimo del usuario. Puedes usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. No configures este campo con el mismo identificador para varios usuarios. Esto combinaría sus historiales de eventos y degradaría la calidad del modelo. No incluyas información de identificación personal (PII) en este campo.
- SERVING_CONFIG_ID: Es el ID de tu configuración de publicación. Tu ID de configuración de publicación es el mismo que el ID de tu motor, así que usa el ID de tu motor aquí.
- FILTER: Es un campo de texto que te permite filtrar un conjunto especificado de campos con la sintaxis de la expresión de filtro. El valor predeterminado es una cadena vacía, lo que significa que no se aplica ningún filtro.
Por ejemplo, supongamos que deseas obtener una recomendación para un evento de reproducción de contenido multimedia específico del usuario y deseas filtrar los resultados de la recomendación para que contengan solo documentos que se encuentren en las siguientes condiciones: (1) En la categoría Niños y (2) Disponibles actualmente. Para ello, incluye las siguientes instrucciones con tu llamada:
"eventType": "media-play"
"filter": "categories: ANY(\"Children\") AND available: true"
Para obtener más información, consulta el método
recommend
.Haz clic para ver un ejemplo de respuesta.
Si realizas una solicitud de recomendación como la anterior, es posible que obtengas una respuesta similar a la siguiente. Observa que la respuesta incluye los dos documentos que tienen un valor
categories
deChildren
y un valoravailability_start_time
que es posterior a la fecha actual.{ "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" }