Filtrer avec la compréhension du langage naturel

Cette page explique comment appliquer la compréhension du langage naturel pour créer automatiquement des filtres pour les requêtes de recherche et, ainsi, améliorer la qualité des résultats renvoyés.

Vous pouvez utiliser cette fonctionnalité avec les applications de recherche connectées à des magasins de données structurées.

À propos de la compréhension des requêtes en langage naturel

Si vous disposez d'une application de recherche personnalisée avec des données structurées, les requêtes en langage naturel de vos utilisateurs peuvent être reformatées en requêtes filtrées. Cela peut permettre d'obtenir des résultats de recherche de meilleure qualité que si vous recherchiez des mots dans la chaîne de requête.

Par exemple, une requête en langage naturel telle que "Find a coffee shop serving banana bread" peut être reformulée en requête et en filtre : "query": "banana bread", "filter": "type": ANY(\"cafe\").

L'utilisation de la compréhension des requêtes en langage naturel est plus simple et plus flexible que l'écriture de vos propres expressions de filtre. Pour savoir comment écrire des expressions de filtre, consultez Filtrer la recherche personnalisée pour les données structurées ou non structurées.

Filtres stricts et souples

Il existe deux types de filtres que vous pouvez appliquer pour comprendre les requêtes en langage naturel : stricts et souples.

  • Difficile Par défaut, les filtres extraits sont appliqués en tant que critères obligatoires auxquels un résultat doit répondre pour être renvoyé.

    Le comportement est semblable à celui du champ filter dans le message SearchRequest.

  • Souple : Une autre solution que le filtre strict consiste à appliquer un boost aux résultats de recherche. Les résultats boostés sont plus susceptibles d'être renvoyés, mais les résultats qui ne répondent pas au critère de boost peuvent également être renvoyés.

    Le comportement est semblable à celui du champ boost_spec dans le message SearchRequest.

Vous pouvez tester les deux types de filtres. Si les recherches ne renvoient pas assez de résultats, essayez le filtre souple au lieu du filtre strict.

Pour savoir comment appliquer un filtre flou, consultez Effectuer une recherche avec le filtre flou ci-dessous.

Exemples

Cette fonctionnalité est plus facile à comprendre à l'aide d'exemples :

Exemple : Extraction de champs à partir de requêtes (filtre strict)

Cette fonctionnalité de compréhension des requêtes en langage naturel est expliquée à travers l'exemple de la recherche d'un hôtel.

Prenons l'exemple d'une requête envoyée à un data store structurées pour un site d'hôtel : "Trouve-moi un hôtel adapté aux familles, avec au moins quatre étoiles, qui coûte moins de 300 € par nuit, qui accepte les chiens et qui propose le Wi-Fi gratuit."

Sans compréhension des requêtes en langage naturel, l'application de recherche recherche les documents contenant les mots de la requête.

Grâce à la compréhension des requêtes en langage naturel et à des données structurées de manière appropriée, la recherche est plus efficace, car certains éléments en langage naturel de la requête sont remplacés par des filtres. Si les données structurées comportent des champs pour star_rating (nombres), price (nombres) et amenities (chaînes), la requête peut être formulée pour inclure les filtres suivants :

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

Exemple : Avec un filtre de géolocalisation (filtre strict)

Cet exemple est semblable au précédent, sauf qu'il inclut un filtre geolocation, qui est un type spécial de filtre extrait. Vertex AI Search peut reconnaître les lieux dans une requête et créer des filtres de proximité pour ces lieux.

Prenez la requête suivante effectuée sur un site d'entreprises à l'échelle de l'État : "Trouve-moi un hôtel chic et élégant avec au moins 4 étoiles à San Francisco."

Grâce à la compréhension des requêtes en langage naturel et au filtre de géolocalisation, la recherche est reformulée pour inclure le filtre suivant pour un hôtel avec une note d'au moins 4 étoiles et situé dans un rayon de 10 km autour de San Francisco :

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

Dans cet exemple, GEO_DISTANCE est une adresse, mais dans d'autres requêtes, elle peut être écrite sous la forme d'une latitude et d'une longitude, même si la requête d'origine contenait une adresse.

Exemple : Extraction de champs à partir de requêtes (filtre souple)

Cette fonctionnalité de compréhension des requêtes en langage naturel est expliquée à travers l'exemple d'une recherche d'hôtel qui affiche des résultats ne répondant pas à tous les critères.

Prenons l'exemple de la requête suivante effectuée sur un site de voyage : "Trouve-moi un hôtel adapté aux familles avec au moins quatre étoiles, qui coûte moins de 300 € par nuit et qui accepte les chiens."

Grâce à la compréhension des requêtes en langage naturel et à des données structurées de manière appropriée, la recherche est plus efficace en remplaçant une partie du langage naturel de la requête par des filtres souples. Si les données structurées comportent des champs pour star_rating (nombres), price (nombres) et amenities (chaînes), la requête peut être réécrite comme suit :

Condition de boost extraite de la requête en langage naturel :

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

Dans ce cas, il est possible que des hôtels moins bien notés ou qui n'acceptent pas les animaux soient proposés.

Limites

Les limites suivantes s'appliquent à la compréhension des requêtes en langage naturel :

  • La compréhension des requêtes en langage naturel ne peut pas être appliquée aux applications de recherche combinée. Une erreur s'affiche si vous essayez d'utiliser la compréhension des requêtes en langage naturel avec une application de recherche combinée.

  • La compréhension des requêtes en langage naturel ne fonctionne que pour les applications de recherche personnalisées qui utilisent des magasins de données structurées.

  • L'utilisation de la compréhension des requêtes en langage naturel augmente la latence. Vous pouvez donc choisir de ne pas l'utiliser si la latence pose problème.

  • Pour la géolocalisation, l'emplacement doit être décrit explicitement. Vous ne pouvez pas utiliser des lieux tels que "à proximité" ou "domicile".

  • Le rayon de la géolocalisation est de 10 km et n'est pas configurable.

  • Les champs booléens ne peuvent pas être utilisés dans les filtres. Par exemple, si la requête est "Trouve-moi une chambre d'hôtel non-fumeur", un champ booléen tel que "non_smoking": true n'est pas utile, mais un champ de chaîne tel que "non_smoking": "YES" peut faire partie du filtre.

Avant de commencer

Avant de commencer à utiliser la compréhension des requêtes en langage naturel, vous devez l'activer pour les magasins de données structurées connectés aux applications que vous prévoyez d'utiliser.

Pour activer la compréhension des requêtes en langage naturel, procédez comme suit :

REST

  1. Trouvez l'ID de votre data store. Si vous disposez déjà de l'ID de votre data store, passez à l'étape suivante.

    1. Dans la console Google Cloud , accédez à la page Applications d'IA, puis cliquez sur Data stores dans le menu de navigation.

      Accéder à la page "Data stores"

    2. Cliquez sur le nom de votre data store.

    3. Sur la page Données de votre datastore, obtenez l'ID du datastore.

  2. Exécutez la commande curl suivante :

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

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • DATA_STORE_ID : ID du data store Vertex AI Search.
  3. Répétez les étapes 1 et 2 pour chaque data store.

  4. Patientez environ 24 heures.

    Si vous essayez d'utiliser la compréhension des requêtes en langage naturel avant que le data store ne soit prêt, la réponse que vous obtenez est la même que si filterExtractionCondition était défini sur DISABLED.

Rechercher en convertissant des requêtes en langage naturel en filtres

Pour effectuer une recherche à l'aide d'une requête en langage naturel et obtenir des résultats optimisés pour ce type de requête, procédez comme suit :

REST

  1. Exécutez la commande curl suivante, qui appelle la méthode 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"
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger. L'application doit être associée à un data store contenant des données structurées. L'application ne peut pas être une application de recherche combinée.
    • QUERY : requête rédigée en langage naturel.

Recherche, conversion des lieux dans les requêtes en filtres de géolocalisation

Pour effectuer une recherche à l'aide d'une requête en langage naturel et obtenir des résultats optimisés pour les requêtes en langage naturel, y compris la proximité des lieux, procédez comme suit :

REST

  1. Exécutez la commande Curl suivante, qui appelle la méthode 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"]"
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de l'application Vertex AI Search que vous souhaitez interroger. L'application doit être associée à un data store contenant des données structurées. L'application ne peut pas être une application de recherche combinée.
    • QUERY : requête rédigée en langage naturel.
    • GEO_FIELD_NAME_1, GEO_FIELD_NAME_N : liste de valeurs de type geolocation. Si le type de valeur n'est pas geolocation, ce champ est ignoré.

Rechercher avec le filtre "Doux"

Pour appliquer un filtre léger :

REST

  1. Trouvez l'ID de votre application. Si vous avez déjà votre ID d'application, passez à l'étape suivante.

    1. Dans la console Google Cloud , accédez à la page Applications d'IA.

      Accédez à "Applications".

    2. Sur la page Applications, recherchez le nom de votre application et récupérez son ID dans la colonne ID.

  2. Exécutez la commande curl suivante, qui appelle la méthode 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"
            }
          }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de votre application de recherche. L'application doit être connectée à un data store contenant des données structurées. L'application ne peut pas être une application de recherche mixte.
    • QUERY : votre requête en langage naturel.

Spécifier des champs pour les requêtes en langage naturel

Pour qu'un champ puisse être utilisé comme filtre dans la compréhension des requêtes en langage naturel, il doit être marqué comme indexable dans le schéma. (Pour obtenir des informations générales sur l'affichage et la modification d'un schéma, consultez Mettre à jour un schéma.)

Vertex AI Search détermine quels champs indexables du schéma peuvent être utilisés dans les filtres de compréhension des requêtes en langage naturel. Toutefois, si des champs que vous ne souhaitez pas voir apparaître sont inclus, vous devez créer une liste d'autorisation pour spécifier les champs qui peuvent être utilisés.

Prenons l'exemple d'un site de réservation d'hôtels, où l'on trouve des champs tels que amenities, id, price_per_night, rating et room_types. Si le id est une chaîne de caractères et de chiffres, Vertex AI Search est susceptible de l'exclure des champs utilisés pour comprendre les requêtes en langage naturel.

Toutefois, si vous constatez que Vertex AI Search renvoie des résultats de requête de mauvaise qualité, car il n'exclut pas les champs qu'il devrait, vous devez spécifier les champs qui peuvent être utilisés. Par exemple, si le schéma d'hôtel comporte un champ renovation_status qui n'est pas utile aux clients et qui pourrait être embarrassant pour la chaîne hôtelière, vous pouvez l'exclure de la liste des champs autorisés.

Exemple d'enregistrement provenant du data store structurées de données d'hôtel.

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

Une liste d'autorisation appropriée pour les champs de cet exemple serait ["amenities", "price_per_night", "rating", "title"]. renovation_status ne figure pas dans la liste.

Pour spécifier une liste d'autorisation des champs pouvant être utilisés dans une requête en langage naturel pour comprendre une recherche, procédez comme suit :

REST

  1. Trouvez l'ID de votre application. Si vous avez déjà votre ID d'application, passez à l'étape suivante.

    1. Dans la console Google Cloud , accédez à la page Applications d'IA.

      Accédez à "Applications".

    2. Sur la page Applications, recherchez le nom de votre application et récupérez son ID dans la colonne ID.

  2. Exécutez la commande Curl suivante, qui appelle la méthode 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"],
        }
      }'
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • APP_ID : ID de votre application de recherche. L'application doit être connectée à un data store contenant des données structurées. L'application ne peut pas être une application de recherche mixte.
    • QUERY : votre requête en langage naturel.
    • FIELD_N : champ indexable dans le schéma qui peut être utilisé pour comprendre les requêtes en langage naturel.