Filtrar com a compreensão de linguagem natural

Esta página explica como aplicar a compreensão de linguagem natural para criar automaticamente filtros para consultas de pesquisa e, por conseguinte, melhorar a qualidade dos resultados devolvidos.

Pode usar esta funcionalidade com apps de pesquisa ligadas a arquivos de dados estruturados.

Acerca da compreensão de consultas de linguagem natural

Se tiver uma app de pesquisa personalizada com dados estruturados, as consultas de linguagem natural dos seus utilizadores podem ser reformatadas como consultas filtradas. Isto pode gerar resultados da pesquisa de melhor qualidade do que pesquisar palavras na string de consulta.

Por exemplo, uma consulta em 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\").

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

Filtros rígidos e flexíveis

Existem dois tipos de filtros que pode aplicar para a compreensão de consultas em linguagem natural: rígidos e flexíveis.

  • Difícil. Por predefinição, os filtros extraídos são aplicados como critérios obrigatórios que um resultado tem de satisfazer para ser devolvido.

    O comportamento é semelhante ao do campo filter na mensagem SearchRequest.

  • Suave. Uma alternativa ao filtro rígido é aplicar um aumento aos resultados da pesquisa. É mais provável que sejam devolvidos resultados melhorados, mas também podem ser devolvidos resultados que não cumprem o critério de melhoramento.

    O comportamento é semelhante ao do campo boost_spec na mensagem SearchRequest.

Pode experimentar ambos os tipos de filtro. Se as pesquisas não estiverem a devolver resultados suficientes, experimente o filtro flexível em vez do filtro rígido.

Para detalhes sobre como aplicar um filtro flexível, consulte a secção Pesquise com o filtro flexível abaixo.

Exemplos

Esta funcionalidade é melhor explicada através de exemplos:

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

Esta funcionalidade de compreensão de consultas de linguagem natural é explicada através do exemplo de uma pesquisa de um hotel.

Considere a seguinte consulta feita a um repositório de dados estruturados para um site de hotéis: "Encontra um hotel adequado para famílias com, pelo menos, quatro estrelas, que custe menos de 300 € por noite, onde possa levar o meu cão e que tenha Wi-Fi grátis."

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

Com a compreensão de consultas em linguagem natural e dados estruturados adequadamente, a pesquisa torna-se 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 pode 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 Pesquisa do Vertex AI tem a capacidade de reconhecer localizações numa consulta e criar filtros de proximidade para as localizações.

Considere a seguinte consulta feita a um site de empresas a nível estadual: "Encontra um hotel elegante e com estilo com, pelo menos, 4 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 para um hotel com, pelo menos, uma classificação de 4 estrelas e num raio de 10 km de São Francisco:

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

Neste exemplo, GEO_DISTANCE é uma morada, mas noutras consultas, pode ser escrito como uma latitude e uma longitude, mesmo que a consulta original contivesse uma morada.

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

Esta funcionalidade de compreensão de consultas em linguagem natural é explicada através do exemplo de pesquisar um hotel, mas mostrar alguns resultados que não cumprem todos os critérios.

Considere a seguinte consulta feita a um site de viagens: "Encontra um hotel adequado para famílias com, pelo menos, quatro estrelas que custe menos de 300 por noite e que me permita levar o meu cão."

Com a compreensão de consultas de linguagem natural e dados estruturados adequadamente, a pesquisa torna-se 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 pode 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
    }
  }
}

Neste caso, podem ser devolvidos alguns hotéis com classificações mais baixas ou que não aceitam animais de estimação.

Limitações

As seguintes limitações aplicam-se à 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. Recebe um erro se tentar usar a compreensão de consultas de linguagem natural com uma app de pesquisa combinada.

  • A compreensão de consultas de linguagem natural só funciona para apps de pesquisa personalizadas que usam arquivos de dados estruturados.

  • A utilização da compreensão de consultas em linguagem natural aumenta a latência, pelo que pode optar por não a usar se a latência for um problema.

  • Para a geolocalização, a localização tem de ser descrita explicitamente. Não pode usar localizações como "perto de mim" ou "casa".

  • O raio da geolocalização é de 10 km e não é configurável.

  • Não é possível usar campos Booleanos em filtros. Por exemplo, se a consulta for "Encontra-me um quarto de hotel para não fumadores", um campo booleano como "non_smoking": true não é útil, mas um campo de string como "non_smoking": "YES" pode fazer parte do filtro.

Antes de começar

Antes de começar a usar a compreensão de consultas em linguagem natural, tem de a ativar para os arquivos de dados estruturados associados às apps que planeia usar.

Para ativar a compreensão de consultas em linguagem natural, siga estes passos:

REST

  1. Encontre o ID do seu repositório de dados. Se já tiver o ID da loja 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 arquivo de dados.

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

  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 o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • DATA_STORE_ID: o ID do arquivo de dados do Vertex AI Search.
  3. Repita os passos 1 e 2 para cada arquivo de dados.

  4. Aguarde aproximadamente 24 horas.

    Se tentar usar a compreensão de consultas em linguagem natural antes de o repositório de dados estar pronto, a resposta que recebe é 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 obter resultados otimizados para consultas de 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search que quer consultar. A app tem de estar associada a um repositório de dados que contenha dados estruturados. A app não pode ser uma app de pesquisa mista.
    • QUERY: a consulta escrita em linguagem natural.

Pesquisa, convertendo localizações em consultas para filtros de geolocalização

Para pesquisar uma consulta em linguagem natural e obter resultados otimizados para consultas de linguagem natural, incluindo a proximidade a localizações, 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da app Vertex AI Search que quer consultar. A app tem de estar associada a um repositório de dados que contenha dados estruturados. A app não pode ser uma app de pesquisa mista.
    • 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, este campo é ignorado.

Pesquise com o filtro suave

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

REST

  1. Encontre o ID da app. Se já tiver o ID da app, avance para o passo seguinte.

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

      Aceda a Apps

    2. Na página Apps, encontre o nome da sua app e obtenha o ID da app 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 o seguinte:

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

Especifique campos para consultas de linguagem natural

Para que um campo seja usado como filtro na compreensão de consultas em linguagem natural, tem de ser marcado como indexável no esquema. (Para informações gerais sobre a visualização e edição de um esquema, consulte o artigo Atualize um esquema.)

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

Considere um site de reservas de hotéis, onde existem campos como amenities, id, price_per_night, rating e room_types. Destes, se o id for uma string de carateres e números, é provável que a Vertex AI Search o exclua dos campos usados para a compreensão de consultas em linguagem natural.

No entanto, se observar que a Pesquisa da Vertex AI está a devolver resultados de consulta de má qualidade porque não está a excluir campos que devia, tem de especificar que campos podem ser usados. Por exemplo, se o esquema de hotel tiver um campo para renovation_status que não seja útil para os clientes e possa ser embaraçoso para a cadeia de hotéis, pode excluí-lo da lista de campos permitidos.

Exemplo de um registo da loja 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 autorizações adequada para os campos neste exemplo seria ["amenities", "price_per_night", "rating", "title"]. O vídeo em falta na lista é renovation_status.

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

REST

  1. Encontre o ID da app. Se já tiver o ID da app, avance para o passo seguinte.

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

      Aceda a Apps

    2. Na página Apps, encontre o nome da sua app e obtenha o ID da app 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 o seguinte:

    • PROJECT_ID: o ID do seu projeto Google Cloud .
    • APP_ID: o ID da sua app de pesquisa. A app tem de estar associada a um repositório de dados que contenha dados estruturados. A app não pode ser uma app de pesquisa combinada.
    • QUERY: a 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.