Si tienes una app de recomendaciones, puedes usar 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 y mostrar 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 personalizadas. Para obtener más información sobre las recomendaciones de contenido multimedia, consulta la Introducción a Vertex AI Search for Media.
Filtra 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 se vuelve a entrenar el modelo. 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 el esquema. En el caso de las recomendaciones (a diferencia de las búsquedas), el filtrado no se realiza en tiempo real.
Configuración de filtros y diversificación (solo para las recomendaciones de contenido multimedia)
Además de los filtros, el parámetro de 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. La diversificación se realiza primero y el filtrado, en segundo lugar.
La combinación de una diversidad alta basada en reglas y un filtrado de atributos basado en categorías suele generar un resultado vacío. Esto se debe a que la alta diversidad limita la app a devolver un resultado para cada categoría.
Por ejemplo, quieres recomendar películas basadas en Toy Story. Estableces el nivel de diversidad basado en reglas como alto. Dado que el nivel de diversidad es alto, aunque se puedan recomendar muchas películas, solo se devuelve una película (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 medios o Cómo crear un almacén de datos de recomendaciones personalizado.
Documentos de ejemplo
Revisa estos documentos de medios de ejemplo. 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 los filtros de tus recomendaciones.
Sintaxis de las expresiones de filtro
La siguiente forma Backus-Naur extendida resume la sintaxis de las expresiones 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 los operadores
AND
yOR
integrados entre paréntesis es limitada. Las expresiones lógicas del filtro deben estar en forma normal conjuntiva (CNF). La expresión lógica más compleja admitida puede ser una lista de cláusulas conectadas conAND
que solo contengan operadoresOR
, como:(... OR ... OR ...) AND (... OR ...) AND (... OR ...)
Las expresiones se pueden negar con la palabra clave
NOT
o con-
. Esto solo funciona con expresionesANY()
que tienen un solo argumento.Las restricciones de
available
deben estar en el nivel superior. No se pueden usar como parte de una cláusulaOR
o una negación (NOT
). Solo puedes usaravailable: true
. Si omites este filtro, es posible que se muestren como recomendaciones documentos vencidos y documentos que aún no están disponibles.El campo
available
se asigna a la siguiente lógica:datetime.now >= available_time AND datetime.now <= expire_time
Si no se configura
expire_time
,datetime.now <= expire_time
se resuelve comotrue
.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 incluidos en expresionesANY()
. Si una cláusulaOR
tiene varias expresionesANY()
, todos sus argumentos se incluyen en 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 indica 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 forma normal conjuntiva. |
(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 filtra los documentos que se encuentran 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 algo de 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 establecer hasta 10 campos personalizados como filtrables.
Si se encuentran más de 10 campos personalizados durante el entrenamiento de la app, solo se usarán 10.
En tu esquema, puede haber hasta 100,000,000 de valores de campos filtrables.
Para estimar la cantidad total de valores de campos filtrables en tu esquema, multiplica la cantidad de documentos en tu esquema por la cantidad de campos filtrables. Si superas estos límites, sucederá lo siguiente:
- No puedes establecer campos adicionales como filtrables.
- Falla el entrenamiento de la app.
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 AI Applications y, en el menú de navegación, haz clic en Data Stores.
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 los campos del documento según los que deseas filtrar. Por ejemplo, para los documentos en 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 AI Applications.
Haz clic en la app de recomendaciones.
Haz clic en la pestaña Esquema. En esta pestaña, se muestra la configuración actual de los campos.
Haz clic en Editar.
Si aún no está seleccionada, marca la casilla de verificación Filterable en la fila categories y, luego, haz clic en Save.
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"
Reemplaza lo siguiente:
PROJECT_ID
: el ID de tu 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 transferiste tus datos.EVENT_TYPE
: Es el tipo de evento del usuario. Para conocer los valores deeventType
, consulta UserEvent.USER_PSEUDO_ID
: Es un identificador seudonimizado del usuario. Puedes usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. No establezcas este campo en 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 del motor, así que usa el ID del motor aquí.FILTER
: Es un campo de texto que te permite filtrar un conjunto específico de campos con la sintaxis de expresiones 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 usuario de reproducción de contenido multimedia específico y deseas filtrar los resultados de la recomendación para que solo contengan documentos que cumplan con los siguientes criterios: (1) Que estén en la categoría Infantil y (2) que estén disponibles actualmente. Para ello, incluye las siguientes instrucciones en 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, puedes esperar una respuesta similar a la siguiente. Observa que la respuesta incluye los dos documentos que tienen un valor de
categories
deChildren
y un valor deavailability_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" }