Filtrar recomendaciones

Si tienes una aplicación de recomendaciones, puedes usar campos de documento para filtrar los resultados de las recomendaciones. En esta página se explica cómo usar los campos de documento para filtrar una recomendación a un conjunto específico de documentos. Aunque los ejemplos de esta página son de 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.

Filtrar recomendaciones y actualizaciones de almacenes de datos

Después de actualizar un almacén de datos, tendrás que esperar hasta 8 horas para que el modelo se vuelva a entrenar. Esto se debe a que el modelo necesita conocer los valores actuales de los metadatos del documento, así como los campos que están configurados como filtrables. Debes esperar a que se propaguen los cambios en los documentos y en el esquema. En el caso de las recomendaciones (a diferencia de las búsquedas), el filtrado no se realiza en tiempo real.

Filtros y ajustes de diversificación (solo en recomendaciones de contenido multimedia)

Además de los filtros, el ajuste de diversificación de una aplicación también afecta a los resultados devueltos 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, después.

Si se combinan una diversidad alta basada en reglas y un filtrado de atributos basado en categorías, a menudo no se obtienen resultados. Esto se debe a que una diversidad alta limita la aplicación a devolver un resultado por categoría.

Por ejemplo, quieres recomendar películas basadas en Toy Story. Has definido el nivel de diversidad basado en reglas como alto. Como el nivel de diversidad es alto, aunque se recomienden muchas películas, solo se devolverá una película (por ejemplo, WALL·E) en la categoría de películas infantiles. Si se aplica el filtro de películas infantiles, solo se devolverá WALL·E como recomendación.

Para obtener información general sobre la diversidad, consulta el artículo Diversificar las recomendaciones de contenido multimedia.

Antes de empezar

Asegúrate de haber creado una aplicación de recomendaciones y un almacén de datos. Para obtener más información, consulta Crear aplicaciones multimedia o Crear un almacén de datos de recomendaciones personalizadas.

Documentos de ejemplo

Consulta estos documentos multimedia 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 recomendaciones.

Sintaxis de las expresiones de filtro

La siguiente forma de Backus-Naur ampliada resume la sintaxis de las expresiones de filtro que puede usar para definir los 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

Las expresiones de filtro de las recomendaciones están sujetas a las siguientes restricciones:

  • La profundidad de la inserción de los operadores AND y OR entre paréntesis es limitada. Las expresiones lógicas del filtro deben estar en forma normal conjuntiva (FNC). La expresión lógica más compleja que se admite puede ser una lista de cláusulas conectadas con AND que solo contengan operadores OR, como la siguiente: (... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • Las expresiones se pueden negar con la palabra clave NOT o con -. Esta opción solo funciona con expresiones ANY() que tienen un único argumento.

  • Las restricciones de available deben estar en el nivel superior. No se pueden usar como parte de una cláusula OR o de una negación (NOT). Solo se puede usar available: true. Si omite este filtro, es posible que se devuelvan como recomendaciones documentos caducados 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 define expire_time, datetime.now <= expire_time se resuelve como true.

  • El número máximo de términos de la cláusula AND de nivel superior es 20.

  • Una cláusula OR puede tener hasta 100 argumentos incluidos en ANY() expresiones. Si una cláusula OR tiene varias expresiones ANY(), todos sus argumentos se tienen en cuenta 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 e inválidas. También indica los motivos por los que los ejemplos no válidos no lo son.

Expresión 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 busca documentos que pertenezcan a 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 memoria en cada uno de tus modelos. Los siguientes límites ayudan a evitar efectos adversos en el rendimiento del servicio:

  • Puedes definir hasta 10 campos personalizados como filtrables en tu esquema.

    Si se encuentran más de 10 campos personalizados durante el entrenamiento de la aplicación, solo se usarán 10.

  • Tu esquema puede incluir hasta 100.000.000 valores de campos filtrables.

    Para estimar el número total de valores de campo filtrables de tu esquema, multiplica el número de documentos de tu esquema por el número de campos filtrables. Si superas estos límites, ocurrirá lo siguiente:

    • No puedes definir campos adicionales como filtrables.
    • La preparación de la aplicación falla.

Filtrar recomendaciones

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

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

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA y, en el menú de navegación, haz clic en Almacenes de datos.

      Ir a la página Almacenes de datos

    2. Haga clic en el nombre de su almacén de datos.

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

  2. Determina los campos del documento por los que quieres filtrar. Por ejemplo, en los documentos de Antes de empezar, puedes usar el campo categories como filtro.

  3. Para que el campo categories se pueda filtrar, siga estos pasos:

    1. En la Google Cloud consola, ve a la página Aplicaciones de IA.

      Aplicaciones de IA

    2. Haz clic en la aplicación 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 lo ha hecho, seleccione la casilla Filtrable en la fila de categorías y, a continuación, haga clic en Guardar.

    6. Espera seis horas para que se apliquen los cambios en el esquema. Después de seis horas, puedes continuar con el siguiente paso.

  4. Para obtener una recomendación y filtrar por 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"
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.
    • DATA_STORE_ID: el ID de tu almacén de datos.
    • DOCUMENT_ID: el ID del documento del que quieres previsualizar las recomendaciones. Utilice el ID que usó para este documento cuando ingirió los datos.
    • EVENT_TYPE: el tipo de evento de usuario. Para ver los valores de eventType, consulta UserEvent.
    • USER_PSEUDO_ID: una cadena codificada en UTF-8 que actúa como identificador seudonimizado único que monitoriza a los usuarios. Puede tener una longitud máxima de 128 caracteres. Google recomienda encarecidamente usar este campo porque mejora el rendimiento del modelo y la calidad de la personalización. Puede usar una cookie HTTP para este campo, que identifica de forma única a un visitante en un solo dispositivo. Estas son algunas consideraciones importantes:

      • Este identificador no cambia cuando el visitante inicia o cierra sesión en un sitio web.
      • Este campo no debe tener el mismo identificador para varios usuarios. De lo contrario, el mismo ID de usuario puede combinar los historiales de eventos de diferentes usuarios y reducir la calidad del modelo.
      • Este campo no debe incluir información personal identificable (IPI).

      Para obtener más información, consulta userPseudoId.

    • SERVING_CONFIG_ID: el ID de tu configuración de servicio. El ID de configuración de servicio es el mismo que el ID de motor, así que úsalo aquí.
    • FILTER: campo de texto que te permite filtrar por un conjunto de campos específico mediante 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 quieres obtener una recomendación para un evento de usuario de reproducción de contenido multimedia específico y quieres filtrar los resultados de la recomendación para que solo contengan documentos que estén en la categoría Infantil y que estén disponibles. Para ello, debes incluir las siguientes declaraciones 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 haces una solicitud de recomendación como la anterior, recibirás una respuesta similar a la siguiente. Ten en cuenta que la respuesta incluye los dos documentos que tienen un valor de categories de Children y un valor de availability_start_time 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"
    }