Cómo filtrar recomendaciones

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 y OR 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 con AND que solo contengan operadores OR, 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() que tienen un solo argumento.

  • Las restricciones de available deben estar en el nivel superior. No se pueden usar como parte de una cláusula OR o una negación (NOT). Solo puedes usar available: 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 como 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 incluidos en expresiones ANY(). Si una cláusula OR tiene varias expresiones ANY(), 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")
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 forma normal conjuntiva.
(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 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:

  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 AI Applications y, en el menú de navegación, haz clic en Data Stores.

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

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

    1. En la consola de Google Cloud , ve a la página AI Applications.

      Aplicaciones basadas en IA

    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 de los campos.

    4. Haz clic en Editar.

    5. Si aún no está seleccionada, marca la casilla de verificación Filterable en la fila categories y, luego, haz clic en Save.

    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"
    

    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 de eventType, 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 de Children y un valor de 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"
    }