Cómo filtrar recomendaciones

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 y OR 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 con AND que solo contiene operadores OR, 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 expresiones ANY() con un solo argumento.
  • Las restricciones de available deben estar en el nivel superior. No se pueden usar como parte de una cláusula OR ni de una negación (NOT). Solo puedes usar available: 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 expresiones ANY(). Si una cláusula OR tiene varias expresiones ANY(), 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")
NOT language_code: ANY("en")
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")
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama")
(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)
(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:

  1. Busca el ID de tu almacén de datos. Si ya tienes el ID del almacén de datos, ve al siguiente paso.

    1. 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.

      Ve a la página Almacenes de datos.

    2. Haz clic en el nombre de tu almacén de datos.

    3. En la página Datos de tu almacén de datos, obtén el ID del almacén de datos.

  2. 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.

  3. Para que el campo categories se pueda filtrar, haz lo siguiente:

    1. En la consola de Google Cloud, ve a la página Agent Builder.

      Agent Builder

    2. Haz clic en la app de recomendaciones.

    3. Haz clic en la pestaña Esquema. En esta pestaña, se muestra la configuración actual del campo.

    4. Haz clic en Edit.

    5. Si aún no está seleccionada, selecciona la casilla de verificación Filtrable en la fila categorías y, luego, haz clic en Guardar.

    6. Espera seis horas para que se propague la edición del esquema. Después de seis horas, puedes continuar con el siguiente paso.

  4. 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 de Children y un valor availability_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"
    }