Cette page explique comment appliquer la compréhension du langage naturel pour créer automatiquement des filtres pour les requêtes de recherche et, par conséquent, améliorer la qualité des résultats renvoyés.
Vous pouvez utiliser cette fonctionnalité avec des applications de recherche connectées à des data stores structurés.
À 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 reformulées en requêtes filtrées queries. Cela peut améliorer la qualité des résultats de recherche par rapport à la recherche de 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 en savoir plus sur l'écriture d'expressions de filtre, consultez Filtrer la recherche personnalisée pour les données structurées ou non structurées.
Filtres stricts et filtres souples
Vous pouvez appliquer deux types de filtres pour la compréhension des requêtes en langage naturel : strict et souple.
Strict. 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
filterdans leSearchRequestmessage.Souple. Une alternative au 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_specdans leSearchRequestmessage.
Vous pouvez tester les deux types de filtres. Si les recherches ne renvoient pas suffisamment de résultats, essayez le filtre souple au lieu du filtre strict.
Pour savoir comment appliquer un filtre souple, consultez la section Rechercher avec le filtre souple ci-dessous.
Exemples
Cette fonctionnalité est mieux expliquée à l'aide d'exemples :
Exemple : Extraction de champs à partir de requêtes (filtre strict) affiche les filtres de champ extraits de la requête.
Exemple : Avec un filtre de géolocalisation (filtre strict) inclut le cas particulier du filtre de géolocalisation.
Exemple : Extraction de champs à partir de requêtes (filtre souple) affiche le filtre souple extrait d'une requête adressée à une application combinée.
Exemple : Extraction de champs à partir de requêtes (filtre strict)
Cette fonctionnalité de compréhension des requêtes en langage naturel est expliquée à l'aide de l'exemple de recherche d'un hôtel.
Prenons la requête suivante adressée à un data store structuré pour un site d’hôtel : "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."
Sans la 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 correctement structurées, la recherche est rendue plus
efficace en remplaçant une partie du langage naturel de la requête 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, à ceci près qu'il inclut un filtre de géolocalisation, qui est un type spécial de filtre extrait. Vertex AI Search est capable de reconnaître des lieux dans une requête et de créer des filtres de proximité pour ces lieux.
Prenons la requête suivante adressée à un site d'entreprise à l'échelle de l'État : « Find me a chic and stylish hotel with at least 4 stars that is in 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 au moins 4 étoiles et situé dans un rayon de 10 km 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 forme de latitude et de 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 à l'aide de l'exemple de recherche d'un hôtel, mais en affichant certains résultats qui ne répondent pas à tous les critères.
Prenons la requête suivante adressée à un site de voyage: "Find me a family-friendly hotel with at least four stars that costs less than 300 a night, and lets me bring my dog."
Grâce à la compréhension des requêtes en langage naturel et à des données correctement structurées, 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, certains hôtels moins bien notés ou qui n'acceptent pas les animaux peuvent être renvoyés.
La force du boost dépend du nombre de filtres structurés auxquels un document correspond. Si trois conditions sont extraites et que le document ne correspond qu'à l'une d'elles, il reçoit un petit boost. En revanche, si le document correspond aux trois conditions, il reçoit un boost important.
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ées. 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 data stores structurés.
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 est un problème.
Pour la géolocalisation, le lieu doit être décrit explicitement. Vous ne pouvez pas utiliser des lieux tels que "près de moi" ou "chez moi".
Le rayon de 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 "Find me a non-smoking hotel room", un champ booléen tel que
"non_smoking": truen'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 data stores structurés 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
Recherchez l'ID de votre data store. Si vous disposez déjà de l'ID de votre data store, passez à l'étape suivante.
Dans la Google Cloud console, accédez à la page Applications d'IA, puis cliquez sur Data stores dans le menu de navigation.
Cliquez sur le nom de votre data store.
Sur la page Données de votre data store, obtenez l'ID du data store.
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/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" } }'Remplacez les éléments suivants :
PROJECT_ID: ID de votre Google Cloud projet.DATA_STORE_ID: ID du data store Vertex AI Search.
Répétez les étapes 1 et 2 pour chaque data store.
Attendez 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 surDISABLED.
Rechercher en convertissant les requêtes en langage naturel en filtres
Pour effectuer une recherche sur une requête en langage naturel et obtenir des résultats optimisés pour les requêtes en langage naturel, procédez comme suit :
REST
Exécutez la commande curl suivante, qui appelle la
searchméthode :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 Google Cloud projet.APP_ID: ID de l'application Vertex AI Search que vous souhaitez interroger. 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 combinée.QUERY: requête écrite en langage naturel.
Rechercher en convertissant les lieux des requêtes en filtres de géolocalisation
Pour effectuer une recherche sur 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
Exécutez la commande curl suivante, qui appelle la
searchméthode :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 Google Cloud projet.APP_ID: ID de l'application Vertex AI Search que vous souhaitez interroger. 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 combinée.QUERY: requête écrite en langage naturel.GEO_FIELD_NAME_1, GEO_FIELD_NAME_N: liste de valeurs de typegeolocation. Si le type de valeur n'est pasgeolocation, ce champ est ignoré.
Rechercher avec le filtre souple
Pour appliquer un filtre souple, procédez comme suit :
REST
Recherchez l'ID de votre application. Si vous disposez déjà de l'ID de votre application, passez à l'étape suivante.
Dans la Google Cloud console, accédez à la page Applications d'IA.
Sur la page Applications, recherchez le nom de votre application et obtenez son ID dans la colonne ID.
Exécutez la commande curl suivante, qui appelle la
searchméthode :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 Google Cloud projet.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 combinée.QUERY: requête en langage naturel.
Spécifier des champs pour les requêtes en langage naturel
Pour qu'un champ soit 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 les champs indexables du schéma qui peuvent être utilisés dans les filtres de compréhension des requêtes en langage naturel. Toutefois, si des champs sont inclus et que vous ne le souhaitez pas, 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ù les champs sont
amenities, id, price_per_night, rating, et room_types. Parmi ceux-ci, 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 la compréhension des 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 de l'hôtel comporte un
champ pour 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 du data store structuré de données hôtelières.
{
"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 est absent de la liste.
Pour spécifier une liste d'autorisation de champs pouvant être utilisés dans une compréhension des requêtes en langage naturel dans une recherche, procédez comme suit :
REST
Recherchez l'ID de votre application. Si vous disposez déjà de l'ID de votre application, passez à l'étape suivante.
Dans la Google Cloud console, accédez à la page Applications d'IA.
Sur la page Applications, recherchez le nom de votre application et obtenez son ID dans la colonne ID.
Exécutez la commande curl suivante, qui appelle la
searchméthode :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 Google Cloud projet.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 combinée.QUERY: requête en langage naturel.FIELD_N: champ indexable du schéma qui peut être utilisé pour la compréhension des requêtes en langage naturel.