Cómo filtrar recomendaciones

Si tienes una app de recomendaciones que usa datos estructurados, puedes usar de documentos para filtrar los resultados de tus recomendaciones. En esta página, se explica cómo Usa los campos de documentos para filtrar una recomendación según un conjunto específico de documentos. Aunque los ejemplos de esta página son de recomendaciones de medios, los principios que se muestran aquí son iguales 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.

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 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 configurados como filtrables. Debes esperar a que los cambios en el documento y en el esquema se propaguen. 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, el parámetro de configuración de diversificación de una app también afecta la resultados que se muestran en una respuesta de recomendación de medios. Se combinan los efectos de los filtros y la diversificación. La diversificación es y el filtrado se hace en segundo lugar.

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 es posible que se recomienden muchas películas solo 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 los medios. recomendaciones.

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 ejemplos documentos a medida que 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

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 obtener 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 lógica admitida más compleja puede ser una lista de cláusulas conectada a AND que solo contiene OR operadores, como (... 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 utilizar como es parte de una cláusula OR o 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 20.
  • Una cláusula OR puede tener hasta 100 argumentos incluidos en ANY(). con expresiones regulares. Si una cláusula OR tiene varias expresiones ANY(), su todos los argumentos se consideran 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")
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 en forma conjuntiva 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, ocurrirá lo siguiente:

    • No puedes establecer campos adicionales como filtrables.
    • No se puede completar el entrenamiento de la app.

Filtrar recomendaciones

Para filtrar las recomendaciones de contenido multimedia, sigue estos pasos:

  1. Busca el ID del 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 del documento que deseas filtrar. Para Por ejemplo, para los documentos de la sección Antes de comenzar, puedes podría 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, seleccione la casilla de verificación Filtrable de la category y, luego, haz clic en Guardar.

    6. Espera seis horas para permitir que se propague la edición de tu 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: El ID del documento del que deseas obtener una vista previa recomendaciones. Usa el ID que usaste para este documento en la cada vez que transferiste tus datos.
    • EVENT_TYPE: Es el tipo de evento de usuario. Para obtener valores de eventType, consulta UserEvent.
    • USER_PSEUDO_ID: Es un identificador seudónimo del usuario. Tú puedes usar una cookie HTTP para este campo, la cual identifica de forma única un en un solo dispositivo. No debes configurar este campo con el mismo valor identificador para varios usuarios. Esto combinaría sus historiales de eventos y degradar la calidad del modelo. No incluyas datos de identificación personal información (PII) en este campo.
    • SERVING_CONFIG_ID: Es el ID de la configuración de entrega. 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 según un conjunto específico. de campos con la sintaxis de 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 afirmaciones 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 para obtener una respuesta similar a la siguiente. Ten en cuenta 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",
    "debugInfo": {
      "fallbackModelInvoked": false
    }
    }