Filtrar com o processamento de linguagem natural

Esta página explica como aplicar o processamento de linguagem natural para criar filtros automaticamente para consultas de pesquisa e, assim, melhorar a qualidade dos resultados retornados.

Você pode usar esse recurso com apps de pesquisa conectados a repositórios de dados estruturados.

Sobre a compreensão de consultas em linguagem natural

Se você tiver um app de pesquisa personalizada com dados estruturados, as consultas em linguagem natural dos usuários poderão ser reformuladas como consultas filtradas. Isso pode levar a resultados de pesquisa de melhor qualidade do que pesquisar palavras na string de consulta.

Por exemplo, uma consulta de linguagem natural como "Find a coffee shop serving banana bread" pode ser reformulada como uma consulta e um filtro: "query": "banana bread", "filter": "type": ANY(\"cafe\").

Usar a compreensão de consultas em linguagem natural é mais fácil e flexível do que escrever suas próprias expressões de filtro. Para informações sobre como escrever expressões de filtro, consulte Filtrar a pesquisa personalizada para dados estruturados ou não estruturados.

Filtros rígidos e flexíveis

Há dois tipos de filtros que podem ser aplicados para o entendimento de consultas em linguagem natural: rígidos e flexíveis.

  • Difícil. Por padrão, os filtros extraídos são aplicados como critérios obrigatórios que um resultado precisa atender para ser retornado.

    O comportamento é semelhante ao campo filter na mensagem SearchRequest.

  • Suave. Uma alternativa ao filtro rígido é aplicar um reforço aos resultados da pesquisa. Os resultados promovidos têm mais chances de serem retornados, mas os que não atendem ao critério de promoção também podem ser retornados.

    O comportamento é semelhante ao campo boost_spec na mensagem SearchRequest.

Você pode testar os dois tipos de filtro. Se as pesquisas não retornarem resultados suficientes, use o filtro flexível em vez do rígido.

Para saber como aplicar um filtro flexível, consulte Pesquisar com o filtro flexível abaixo.

Exemplos

Confira alguns exemplos para entender melhor:

Exemplo: extração de campos de consultas (filtro rígido)

Esse recurso de compreensão de consultas em linguagem natural é explicado com o exemplo de pesquisa de um hotel.

Considere a seguinte consulta feita a um repositório de dados estruturados para um site de hotel: "Encontre um hotel para famílias com pelo menos quatro estrelas que custe menos de R$ 300 por noite, permita que eu leve meu cachorro e tenha Wi-Fi gratuito."

Sem o entendimento de consultas em linguagem natural, o app de pesquisa procura documentos que contenham as palavras da consulta.

Com a compreensão de consultas em linguagem natural e dados estruturados adequadamente, a pesquisa se torna mais eficaz ao substituir parte da linguagem natural na consulta por filtros. Se os dados estruturados tiverem campos para star_rating (números), price (números) e amenities (strings), a consulta poderá ser formulada para incluir os seguintes filtros:

   {
       "star_rating": >=4,
       "price": <=300,
       "amenities": "Wifi", "Pets Allowed"
   }

Exemplo: com um filtro de geolocalização (filtro rígido)

Este exemplo é semelhante ao anterior, mas inclui um filtro de geolocalização, que é um tipo especial de filtro extraído. A Vertex AI para Pesquisa consegue reconhecer locais em uma consulta e criar filtros de proximidade para eles.

Faça a seguinte consulta em um site de negócios em todo o estado: "Encontre um hotel elegante e moderno com pelo menos quatro estrelas em São Francisco".

Com a compreensão de consultas em linguagem natural e o filtro de geolocalização, a pesquisa é reformulada para incluir o seguinte filtro de um hotel com pelo menos uma classificação de 4 estrelas e em um raio de 10 km de São Francisco:

   {
       "star_rating": >=4,
       "location": GEO_DISTANCE(\"San Francisco, CA\", 10000)
   }

Neste exemplo, GEO_DISTANCE é um endereço, mas em outras consultas, ele pode ser escrito como latitude e longitude, mesmo que a consulta original contenha um endereço.

Exemplo: extração de campos de consultas (filtro flexível)

Esse recurso de compreensão de consultas em linguagem natural é explicado com o exemplo de pesquisar um hotel, mas mostrar alguns resultados que não atendem a todos os critérios.

Confira a seguinte consulta feita a um site de viagens: "Encontre um hotel para famílias com pelo menos quatro estrelas que custe menos de R$ 300 por noite e que permita que eu leve meu cachorro."

Com a compreensão de consultas em linguagem natural e dados estruturados adequadamente, a pesquisa se torna mais eficaz ao substituir parte da linguagem natural na consulta por filtros flexíveis. Se os dados estruturados tiverem campos para star_rating (números), price (números) e amenities (strings), a consulta poderá ser reescrita como o seguinte reforço:

Condição de otimização extraída da consulta em linguagem natural:

{
  "boostSpec": {
    "conditionBoostSpecs": {
      "condition": "(star_rating >= 4.5) AND (price < 200) AND ANY(amenities, \"Pets Allowed\")",
      "boost": 0.7
    }
  }
}

Nesse caso, talvez alguns hotéis com classificação mais baixa ou que não aceitam animais de estimação sejam retornados.

Limitações

As seguintes limitações se aplicam à compreensão de consultas em linguagem natural:

  • A compreensão de consultas de linguagem natural não pode ser aplicada a apps de pesquisa combinada. Você vai receber um erro se tentar usar a compreensão de consultas em linguagem natural com um app de pesquisa combinada.

  • A compreensão de consultas em linguagem natural só funciona para apps de pesquisa personalizados que usam repositórios de dados estruturados.

  • Usar o entendimento de consultas em linguagem natural aumenta a latência. Por isso, talvez você prefira não usar esse recurso se a latência for um problema.

  • Para geolocalização, o local precisa ser descrito explicitamente. Não é possível usar locais como "perto de mim" ou "casa".

  • O raio para geolocalização é de 10 km e não pode ser configurado.

  • Campos booleanos não podem ser usados em filtros. Por exemplo, se a consulta for "Encontre um quarto de hotel para não fumantes", um campo booleano como "non_smoking": true não será útil, mas um campo de string como "non_smoking": "YES" poderá fazer parte do filtro.

Antes de começar

Antes de começar a usar a compreensão de consultas em linguagem natural, é preciso ativar esse recurso para os repositórios de dados estruturados conectados aos apps que você planeja usar.

Para ativar a compreensão de consultas em linguagem natural, siga estas etapas:

REST

  1. Encontre o ID do repositório de dados. Se você já tiver o ID do repositório de dados, pule para a próxima etapa.

    1. No console Google Cloud , acesse a página Aplicativos de IA e no menu de navegação, clique em Repositórios de dados.

      Acesse a página "Repositórios de dados".

    2. Clique no nome do seu repositório de dados.

    3. Na página Dados do seu repositório de dados, encontre o ID do repositório.

  2. Execute o seguinte comando curl:

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID?update_mask=natural_language_query_understanding_config.mode" \
    -d '{
          "naturalLanguageQueryUnderstandingConfig": {
            "mode": "ENABLED"
          }
        }'
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa.
  3. Repita as etapas 1 e 2 para cada repositório de dados.

  4. Aguarde aproximadamente 24 horas.

    Se você tentar usar a compreensão de consultas em linguagem natural antes que o repositório de dados esteja pronto, a resposta será a mesma que se filterExtractionCondition estivesse definido como DISABLED.

Pesquisar, convertendo consultas em linguagem natural em filtros

Para pesquisar uma consulta em linguagem natural e receber resultados otimizados para consultas em linguagem natural, faça o seguinte:

REST

  1. Execute o seguinte comando curl, que chama o método search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED"
            }
          }'
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • APP_ID: o ID do app da Vertex AI para Pesquisa que você quer consultar. O app precisa estar conectado a um repositório de dados que contenha dados estruturados. O app não pode ser um app de pesquisa combinada.
    • QUERY: a consulta escrita em linguagem natural.

Pesquisar, convertendo locais em consultas para filtros de geolocalização

Para pesquisar uma consulta em linguagem natural e receber resultados otimizados para consultas em linguagem natural, incluindo proximidade de locais, faça o seguinte:

REST

  1. Execute o seguinte comando curl, que chama o método search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "geoSearchQueryDetectionFieldNames": ["GEO_FIELD_NAME_1", "GEO_FIELD_NAME_N"]"
            }
          }'
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • APP_ID: o ID do app da Vertex AI para Pesquisa que você quer consultar. O app precisa estar conectado a um repositório de dados que contenha dados estruturados. O app não pode ser um app de pesquisa combinada.
    • QUERY: a consulta escrita em linguagem natural.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: uma lista de valores do tipo geolocation. Se o tipo de valor não for geolocation, esse campo será ignorado.

Pesquisar com o filtro suave

Para aplicar um filtro suave, faça o seguinte:

REST

  1. Encontre o ID do app. Se você já tiver o ID do app, pule para a próxima etapa.

    1. No console Google Cloud , acesse a página Aplicativos de IA.

      Acessar "Apps".

    2. Na página Apps, encontre o nome do app e confira o ID dele na coluna ID.

  2. Execute o seguinte comando curl, que chama o método search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED",
              "extractedFilterBehavior": "SOFT_BOOST"
            }
          }'
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • APP_ID: o ID do seu app de pesquisa. Ele precisa estar conectado a um repositório de dados que contenha dados estruturados. O app não pode ser de pesquisa combinada.
    • QUERY: sua consulta em linguagem natural.

Especificar campos para consultas em linguagem natural

Para que um campo seja usado como filtro na compreensão de consultas em linguagem natural, ele precisa ser marcado como indexável no esquema. Para informações gerais sobre como visualizar e editar um esquema, consulte Atualizar um esquema.

A Vertex AI Search determina quais dos campos indexáveis no esquema fazem sentido usar em filtros de compreensão de consultas em linguagem natural. No entanto, se campos forem incluídos que você não quer, crie uma lista de permissões para especificar quais campos podem ser usados.

Considere um site de reservas de hotéis, em que há campos como amenities, id, price_per_night, rating e room_types. Se o id for uma string de caracteres e números, a Vertex AI para Pesquisa provavelmente vai excluir esse valor dos campos usados para entender consultas em linguagem natural.

No entanto, se você notar que a Vertex AI Search está retornando resultados de consulta de baixa qualidade porque não está excluindo campos que deveria, especifique quais campos podem ser usados. Por exemplo, se o esquema de hotel tiver um campo para renovation_status que não é útil para os clientes e pode ser embaraçoso para a rede de hotéis, é possível excluir esse campo da lista de campos permitidos.

Exemplo de um registro do repositório de dados estruturados de dados de hotéis.

{
  "title": "Miller-Jones",
  "rating": 1.7,
  "price_per_night": 115.16,
  "id": 2902,
    
  ],
  "amenities": [
    "Spa",
    "Parking",
    "Restaurant"
    
  ],
  "renovation_status": "Restaurant and spa renovation planned for 2027"
}

Uma lista de permissões adequada para campos neste exemplo seria ["amenities", "price_per_night", "rating", "title"]. renovation_status não está na lista.

Para especificar uma lista de permissões de campos que podem ser usados em uma compreensão de consulta em linguagem natural em uma pesquisa, faça o seguinte:

REST

  1. Encontre o ID do app. Se você já tiver o ID do app, pule para a próxima etapa.

    1. No console Google Cloud , acesse a página Aplicativos de IA.

      Acessar "Apps".

    2. Na página Apps, encontre o nome do app e confira o ID dele na coluna ID.

  2. Execute o seguinte comando curl, que chama o método search:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "naturalLanguageQueryUnderstandingSpec": {
              "allowedFieldNames": ["FIELD_1", "FIELD_2"],
        }
      }'
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud .
    • APP_ID: o ID do seu app de pesquisa. Ele precisa estar conectado a um repositório de dados que contenha dados estruturados. O app não pode ser de pesquisa combinada.
    • QUERY: sua consulta em linguagem natural.
    • FIELD_N: um campo indexável no esquema que pode ser usado para entender consultas em linguagem natural.