Filtrar com o processamento de linguagem natural

Esta página explica como aplicar a compreensão de linguagem natural para criar filtros automaticamente para consultas de pesquisa e, portanto, 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 de linguagem natural

Se você tiver um app de pesquisa personalizado com dados estruturados, as consultas de 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 de 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 a compreensão de consultas de linguagem natural: rígidos e flexíveis.

  • Rígidos. 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 SearchRequest mensagem.

  • Flexíveis. Uma alternativa ao filtro rígido é aplicar um aumento aos resultados da pesquisa. Os resultados aumentados têm mais probabilidade de serem retornados, mas os resultados que não atendem ao critério de aumento também podem ser retornados.

    O comportamento é semelhante ao campo boost_spec na SearchRequest mensagem.

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

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

Exemplos

Esse recurso é melhor explicado por exemplos:

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

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

Considere a seguinte consulta feita a um repositório de dados estruturados para um site de hotel: "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, lets me bring my dog, and has free Wi-Fi."

Sem a compreensão de consultas de linguagem natural, o app de pesquisa procura documentos que contenham as palavras na consulta.

Com a compreensão de consultas de linguagem natural e dados estruturados adequadamente, a pesquisa se torna mais eficaz substituindo 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, exceto que inclui um filtro de geolocalização, que é um tipo especial de filtro extraído. A Vertex AI para Pesquisa tem a capacidade de reconhecer locais em uma consulta e criar filtros de proximidade para os locais.

Considere a seguinte consulta feita a um site comercial estadual: "Find me a chic and stylish hotel with at least 4 stars that is in San Francisco."

Com a compreensão de consultas de linguagem natural e o filtro de geolocalização, a pesquisa é reformulada para incluir o seguinte filtro para um hotel com pelo menos 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, o 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 de linguagem natural é explicado pelo exemplo de pesquisa de um hotel, mas mostrando alguns resultados que não atendem a todos os critérios.

Considere a seguinte consulta feita a um site de viagens: "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, and lets me bring my dog."

Com a compreensão de consultas de linguagem natural e dados estruturados adequadamente, a pesquisa se torna mais eficaz substituindo 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 aumento:

Condição de aumento extraída da consulta de 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.

A intensidade do aumento depende do número de filtros estruturados que um documento corresponde. Se três condições forem extraídas e o documento corresponder apenas a uma delas, o documento receberá um pequeno aumento. Como alternativa, se o documento corresponder a todas as três condições, ele receberá um aumento forte.

Limitações

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

  • A compreensão de consultas de linguagem natural não pode ser aplicada a apps de pesquisa combinados. Você recebe um erro se tentar usar a compreensão de consultas de linguagem natural com um app de pesquisa combinado.

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

  • O uso da compreensão de consultas de linguagem natural aumenta a latência. Portanto, talvez você não queira usá-la se a latência for um problema.

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

  • O raio da 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 "Find me a non-smoking hotel room", 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 de linguagem natural, você precisa ativá-la para os repositórios de dados estruturados conectados aos apps que você planeja usar.

Para ativar a compreensão de consultas de 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 Google Cloud console, acesse a página Aplicativos de IA e no menu de navegação, clique em Repositórios de dados.

      Acessar 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/v1/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 Google Cloud projeto.
    • 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 de linguagem natural antes que o repositório de dados esteja pronto, a resposta recebida será a mesma que se filterExtractionCondition estivesse definido como DISABLED.

Pesquisar, convertendo consultas de linguagem natural em filtros

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

REST

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

    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 Google Cloud projeto.
    • 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 combinado.
    • 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 de linguagem natural, incluindo a proximidade de locais, faça o seguinte:

REST

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

    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 Google Cloud projeto.
    • 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 combinado.
    • 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 flexível

Para aplicar um filtro flexível, 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 Google Cloud console, acesse a página Aplicativos de IA.

      Acessar "Apps"

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

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

    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 Google Cloud projeto.
    • APP_ID: o ID do seu app de pesquisa. 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 combinado.
    • QUERY: sua consulta em linguagem natural.

Especificar campos para consultas de linguagem natural

Para que um campo seja usado como filtro na compreensão de consultas de 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 para Pesquisa determina quais dos campos indexáveis no esquema fazem sentido para usar em filtros de compreensão de consultas de linguagem natural. No entanto, se você incluir campos que não quer, será necessário criar 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. Desses, se o id for uma string de caracteres e números, é provável que a Vertex AI para Pesquisa o exclua dos campos usados para a compreensão de consultas de linguagem natural.

No entanto, se você observar que a Vertex AI para Pesquisa está retornando resultados de consulta de baixa qualidade porque não está excluindo os campos que deveria, será necessário especificar quais campos podem ser usados. Por exemplo, se o esquema do hotel tiver um campo para renovation_status que não seja útil para os clientes e possa ser embaraçoso para a rede de hotéis, você poderá excluí-lo da lista de campos permitidos.

Exemplo de um registro do repositório de dados estruturados de dados de hotel.

{
  "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"]. O renovation_status está ausente da lista.

Para especificar uma lista de permissões de campos que podem ser usados em uma compreensão de consultas de 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 Google Cloud console, acesse a página Aplicativos de IA.

      Acessar "Apps"

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

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

    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 Google Cloud projeto.
    • APP_ID: o ID do seu app de pesquisa. 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 combinado.
    • QUERY: sua consulta em linguagem natural.
    • FIELD_N: um campo indexável no esquema que pode ser usado para a compreensão de consultas de linguagem natural.