Filtre recomendações

Se tiver uma app de recomendações, pode usar campos de documentos para filtrar os resultados das recomendações. Esta página explica como usar campos de documentos para filtrar uma recomendação para um conjunto específico de documentos. Embora os exemplos nesta página sejam para recomendações de multimédia, os princípios apresentados aqui são os mesmos para recomendações personalizadas. Para mais informações sobre recomendações de multimédia, consulte o artigo Introdução à Pesquisa do Vertex AI para multimédia.

Filtre recomendações e atualizações da loja de dados

Após qualquer atualização do repositório de dados, tem de aguardar até 8 horas enquanto o modelo é novamente preparado. Isto deve-se ao facto de o modelo precisar de saber os valores atuais nos metadados do documento, bem como os campos configurados como filtráveis. Tem de aguardar que as alterações aos documentos e ao esquema sejam propagadas. Para as recomendações (ao contrário da pesquisa), a filtragem não é feita em tempo real.

Filtros e definições de diversificação (apenas para recomendações de multimédia)

Além dos filtros, a definição de diversificação de uma app também afeta os resultados devolvidos numa resposta de recomendação de conteúdo multimédia. Os efeitos dos filtros e da diversificação são combinados. A diversificação é feita primeiro e a filtragem é feita em segundo lugar.

A combinação de uma diversidade elevada baseada em regras e uma filtragem de atributos baseada em categorias resulta frequentemente num resultado vazio. Isto deve-se ao facto de a diversidade elevada limitar a app a devolver um resultado para cada categoria.

Por exemplo, quer recomendar filmes com base em Toy Story. Definiu o nível de diversidade baseado em regras como elevado. Uma vez que o nível de diversidade é elevado, embora muitos filmes possam ser recomendados, apenas um filme (por exemplo, WALL·E) na categoria de filmes infantis é devolvido. Quando o filtro para filmes infantis é aplicado, apenas WALL·E é devolvido como recomendação.

Para obter informações gerais sobre a diversidade, consulte o artigo Diversifique as recomendações de conteúdo multimédia.

Antes de começar

Certifique-se de que criou uma app de recomendações e um repositório de dados. Para mais informações, consulte os artigos Crie apps de multimédia ou Crie um arquivo de dados de recomendações personalizado.

Exemplos de documentos

Reveja estes documentos de multimédia de exemplo. Pode consultar estes documentos de exemplo à medida que lê 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"}}

Expressões de filtro

Use expressões de filtro para definir os filtros de recomendações.

Sintaxe das expressões de filtro

O seguinte Extended Backus–Naur form resume a sintaxe da expressão de filtro que pode usar para definir os filtros de recomendações.

  # 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;

Restrições de expressões de filtro

As seguintes restrições aplicam-se a expressões de filtro para recomendações:

  • A profundidade da incorporação dos operadores AND e OR entre parênteses é limitada. As expressões lógicas no filtro têm de estar na forma normal conjuntiva (CNF). A expressão lógica suportada mais complexa pode ser uma lista de cláusulas ligadas por AND que contenham apenas operadores OR, como: (... OR ... OR ...) AND (... OR ...) AND (... OR ...)
  • As expressões podem ser negadas com a palavra-chave NOT ou com -. Isto só funciona com expressões ANY() com um único argumento.

  • As restrições available têm de estar ao nível superior. Não podem ser usados como parte de uma cláusula OR ou uma negação (NOT). Só pode usar available: true. Se omitir este filtro, podem ser devolvidos como recomendações documentos expirados e documentos ainda não disponíveis.

    O campo available é mapeado para a seguinte lógica:

    datetime.now >= available_time AND datetime.now <= expire_time

    Se o expire_time não estiver definido, o datetime.now <= expire_time é resolvido como true.

  • O número máximo de termos na cláusula AND de nível superior é 20.

  • Uma cláusula OR pode ter até 100 argumentos incluídos em ANY() expressões. Se uma cláusula OR tiver várias expressões ANY(), todos os respetivos argumentos são contabilizados para este limite. Por exemplo, categories: ANY("drama", "comedy") OR categories: ANY("adventure") tem três argumentos.

Exemplos de expressões de filtro

A tabela seguinte mostra exemplos de expressões de filtro válidas e inválidas. Também indica os motivos pelos quais os exemplos inválidos são inválidos.

Expressão Válido Notas
language_code: ANY("en", "fr") Sim
NOT language_code: ANY("en") Sim
NOT language_code: ANY("en", "fr") Não Nega um ANY() com mais de um argumento.
language_code: ANY("en", "fr") OR categories: ANY("drama") Sim
(language_code: ANY("en") OR language_code: ANY("fr")) AND categories: ANY("drama") Sim
(language_code: ANY("en") AND language_code: ANY("fr")) OR categories: ANY("drama") Não Não está na forma normal conjuntiva.
(language_code: ANY("en")) AND (available: true) Sim
(language_code: ANY("en")) OR (available: true) Não Combina available numa expressão OR com outras condições.

A seguinte expressão de filtro filtra documentos que estão na categoria de drama ou ação, que não estão em inglês e que estão disponíveis:

categories: ANY("drama", "action") AND NOT language_code: ANY("en") AND available: true

Limites de filtragem

Cada campo de documento filtrável consome alguma memória em cada um dos seus modelos. Os seguintes limites ajudam a evitar efeitos adversos no desempenho da publicação:

  • Pode definir até 10 campos personalizados como filtráveis no seu esquema.

    Se forem encontrados mais de 10 campos personalizados durante a preparação da app, apenas 10 são usados.

  • O seu esquema pode ter até 100 000 000 valores de campos filtráveis.

    Pode estimar o número total de valores de campos filtráveis no seu esquema multiplicando o número de documentos no esquema pelo número de campos filtráveis. Se exceder estes limites, ocorre o seguinte:

    • Não pode definir campos adicionais como filtráveis.
    • A formação da app falha.

Filtre recomendações

Para filtrar as recomendações de multimédia, siga estes passos:

  1. Encontre o ID da loja de dados. Se já tiver o ID do armazenamento de dados, avance para o passo seguinte.

    1. Na Google Cloud consola, aceda à página Aplicações de IA e, no menu de navegação, clique em Armazenamentos de dados.

      Aceda à página Armazenamentos de dados

    2. Clique no nome do seu arquivo de dados.

    3. Na página Dados da sua loja de dados, obtenha o ID da loja de dados.

  2. Determine o campo ou os campos do documento pelos quais quer filtrar. Por exemplo, para os documentos em Antes de começar, pode usar o campo categories como filtro.

  3. Para tornar o campo categories filtrável, faça o seguinte:

    1. Na Google Cloud consola, aceda à página Aplicações de IA.

      Aplicações de IA

    2. Clique na app de recomendações.

    3. Clique no separador Esquema. Este separador mostra as definições de campo atuais.

    4. Clique em Edit.

    5. Se ainda não estiver selecionada, selecione a caixa de verificação Filtrável na linha categorias e, de seguida, clique em Guardar.

    6. Aguarde seis horas para dar tempo para que a edição do esquema se propague. Após seis horas, pode avançar para o passo seguinte.

  4. Para receber uma recomendação e filtrar pelo campo categories, execute o seguinte código na linha 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"
    

    Substitua o seguinte:

    • PROJECT_ID: o ID do seu projeto.
    • DATA_STORE_ID: o ID do seu armazenamento de dados.
    • DOCUMENT_ID: o ID do documento para o qual quer pré-visualizar recomendações. Use o ID que usou para este documento no momento em que carregou os seus dados.
    • EVENT_TYPE: o tipo de evento do utilizador. Para valores eventType, consulte UserEvent.
    • USER_PSEUDO_ID: uma string codificada em UTF-8 que funciona como um identificador pseudonimizado exclusivo que acompanha os utilizadores. Pode ter um comprimento máximo de 128 carateres. A Google recomenda vivamente a utilização deste campo porque melhora o desempenho do modelo e a qualidade da personalização. Pode usar um cookie HTTP para este campo, que identifica de forma exclusiva um visitante num único dispositivo. Seguem-se algumas considerações importantes:

      • Este identificador não se altera quando o visitante inicia ou termina sessão num Website.
      • Este campo não pode ser definido com o mesmo identificador para vários utilizadores. Caso contrário, o mesmo ID do utilizador pode combinar os históricos de eventos de diferentes utilizadores e degradar a qualidade do modelo.
      • Este campo não pode incluir informações de identificação pessoal (PII).

      Para mais informações, consulte userPseudoId.

    • SERVING_CONFIG_ID: o ID da sua configuração de publicação. O ID da configuração de publicação é igual ao ID do motor, por isso, use o ID do motor aqui.
    • FILTER: um campo de texto que lhe permite filtrar um conjunto especificado de campos através da sintaxe de expressão de filtro. O valor predefinido é uma string vazia, o que significa que não é aplicado nenhum filtro.

    Por exemplo, suponhamos que quer uma recomendação para um evento de utilizador de reprodução de multimédia específico e quer filtrar os resultados da recomendação para conter apenas documentos que: (1) estejam na categoria Crianças e (2) estejam atualmente disponíveis. Para o fazer, inclua as seguintes declarações na sua chamada:

    • "eventType": "media-play"
    • "filter": "categories: ANY(\"Children\") AND available: true"

    Para mais informações, consulte o método recommend.

    Clique para ver uma resposta de exemplo.

    Se fizer um pedido de recomendação como o anterior, pode esperar receber uma resposta semelhante à seguinte. Tenha em atenção que a resposta inclui os dois documentos que têm um valor categories de Children e um valor availability_start_time posterior à data atual.

    {
    "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"
    }