Share via


Démarrage rapide : classement sémantique avec .NET ou Python

Dans Recherche Azure AI, le classement sémantique est une fonctionnalité côté requête qui utilise la compréhension de la lecture automatique de Microsoft pour changer les scores des résultats de la recherche, en favorisant les résultats les plus pertinents d’un point de vue sémantique supérieure en tête de liste. En fonction du contenu et de la requête, le classement sémantique peut améliorer considérablement la pertinence des recherches, avec un travail minimal pour le développeur.

Ce guide de démarrage rapide vous guide tout au long de l’index et des modifications de requête qui appellent le classement sémantique.

Remarque

Vous recherchez une solution Recherche Azure AI qui interagit avec ChatGPT ? Pour plus d’informations, consultez cette démonstration ou cet accélérateur.

Prérequis

  • Compte Azure avec un abonnement actif. Créez un compte gratuitement.

  • Recherche Azure AI, au niveau De base ou supérieur, avec le classement sémantique activé.

  • Une clé API et un point de terminaison de service de recherche. Connectez-vous au Portail Azure, puis trouvez votre service de recherche.

    Dans Vue d’ensemble, copiez l’URL et enregistrez-la dans le Bloc-notes pour une étape ultérieure. Voici un exemple de point de terminaison : https://mydemo.search.windows.net.

    Dans Clés, copiez et enregistrez une clé d’administration pour obtenir l’intégralité des droits de création et de suppression des objets. Il existe deux clés, primaire et secondaire, interchangeables. Choisissez l’une des options.

    Get an HTTP endpoint and access key

Ajouter le classement sémantique

Pour utiliser le classement sémantique, ajoutez une configuration sémantique à un index de recherche, puis ajoutez des paramètres à une requête. Si vous disposez d’un index existant, vous pouvez appliquer ces modifications sans devoir réindexer votre contenu, car cela n’a aucun impact sur la structure de votre contenu pouvant faire l’objet d’une recherche.

  • Une configuration sémantique définit un ordre de priorité pour les champs qui fournissent un titre, des mots clés et du contenu utilisés dans le reclassement sémantique. La hiérarchisation des champs permet un traitement plus rapide.

  • Les requêtes qui appellent le classement sémantique incluent des paramètres relatifs au type de requête et au fait que des légendes et des réponses sont ou non retournées. Vous pouvez ajouter ces paramètres à votre logique de requête existante. Ils n’entrent pas en conflit avec d’autres paramètres.

Créez une application de console en utilisant la bibliothèque de client Azure.Search.Documents pour ajouter un classement sémantique à un index de recherche existant.

Vous pouvez également télécharger le code source pour commencer avec un projet terminé ou suivre les étapes décrites dans cet article pour créer votre propre projet.

Configurer votre environnement

  1. Démarrez Visual Studio et créez un projet d’application console.

  2. Dans Outils>Gestionnaire de package NuGet, sélectionnez Gérer les packages NuGet pour la solution... .

  3. Sélectionnez Parcourir.

  4. Recherchez Azure.Search.Documents et sélectionnez la dernière version stable.

  5. Sélectionnez Installer pour ajouter l’assembly à votre projet et à votre solution.

Créer un client de recherche

  1. Dans Program.cs, ajoutez les directives using suivantes.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Créez deux clients : SearchIndexClient crée l’index et SearchClient charge et interroge un index existant. Tous deux ont besoin du point de terminaison de service et d’une clé API d’administration pour l’authentification avec des droits de création/suppression.

    Étant donné que le code génère l’URI pour vous, spécifiez uniquement le nom du service de recherche dans la propriété « serviceName ».

     static void Main(string[] args)
     {
         string serviceName = "<YOUR-SEARCH-SERVICE-NAME>";
         string apiKey = "<YOUR-SEARCH-ADMIN-API-KEY>";
         string indexName = "hotels-quickstart";
    
    
         // Create a SearchIndexClient to send create/delete index commands
         Uri serviceEndpoint = new Uri($"https://{serviceName}.search.windows.net/");
         AzureKeyCredential credential = new AzureKeyCredential(apiKey);
         SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, credential);
    
         // Create a SearchClient to load and query documents
         SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, credential);
         . . . 
     }
    

Création d'un index

Créez ou mettez à jour un schéma d’index pour inclure un SemanticConfiguration. Si vous mettez à jour un index existant, cette modification ne nécessite pas de réindexation, car la structure de vos documents est inchangée.

// Create hotels-quickstart index
private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{

    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);
    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);
    definition.SemanticSearch = new SemanticSearch
    {
        Configurations =
        {
            new SemanticConfiguration("my-semantic-config", new()
            {
                TitleField = new SemanticField("HotelName"),
                ContentFields =
                {
                    new SemanticField("Description"),
                    new SemanticField("Description_fr")
                },
                KeywordsFields =
                {
                    new SemanticField("Tags"),
                    new SemanticField("Category")
                }
            })
        }
    };

    adminClient.CreateOrUpdateIndex(definition);
}

Le code suivant crée l’index sur votre service de recherche :

// Create index
Console.WriteLine("{0}", "Creating index...\n");
CreateIndex(indexName, adminClient);

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Chargement de documents

Recherche Azure AI effectue des recherches parmi les contenus stockés dans le service. Le code de chargement de documents est identique à celui du guide de démarrage rapide C# pour la recherche en texte intégral. Nous n’avons donc pas besoin de le dupliquer ici. Vous devriez obtenir quatre hôtels ainsi que leurs noms, leurs adresses et leurs descriptions. Votre solution devrait présenter des types d’hôtels et d’adresses.

Rechercher dans un index

Voici une requête qui appelle le classement sémantique par ordre de priorité avec des options de recherche permettant de spécifier des paramètres :

Console.WriteLine("Example of a semantic query.");

options = new SearchOptions()
{
    QueryType = Azure.Search.Documents.Models.SearchQueryType.Semantic,
    SemanticSearch = new()
    {
        SemanticConfigurationName = "my-semantic-config",
        QueryCaption = new(QueryCaptionType.Extractive)
    }
};
options.Select.Add("HotelName");
options.Select.Add("Category");
options.Select.Add("Description");

// response = srchclient.Search<Hotel>("*", options);
response = srchclient.Search<Hotel>("what hotel has a good restaurant on site", options);
WriteDocuments(response);

À titre de comparaison, voici les résultats d’une requête qui utilise le classement BM25 par défaut en fonction de la fréquence et de la proximité des termes. À partir de la requête « hôtel qui propose un bon restaurant sur place », l’algorithme de classement BM25 retourne des correspondances dans l’ordre indiqué dans cette capture d’écran :

Screenshot showing matches ranked by BM25.

En revanche, lorsque le classement sémantique est appliqué à la même requête (« hôtel qui propose un bon restaurant sur place »), les résultats sont reclassés en fonction de la pertinence sémantique de la requête. Cette fois, le premier résultat est l’hôtel avec le restaurant, qui s’aligne mieux sur les attentes des utilisateurs.

Screenshot showing matches ranked based on semantic ranking.

Exécuter le programme

Appuyez sur F5 pour regénérer l’application et exécuter le programme dans son intégralité.

La sortie comprend des messages de la méthode Console.WriteLine, avec en plus des informations et des résultats de requête.

Nettoyer les ressources

Lorsque vous travaillez dans votre propre abonnement, il est recommandé, à la fin de chaque projet, de déterminer si vous avez toujours besoin des ressources que vous avez créées. Les ressources laissées en cours d’exécution peuvent vous coûter de l’argent. Vous pouvez supprimer les ressources une par une, ou choisir de supprimer le groupe de ressources afin de supprimer l’ensemble des ressources.

Vous pouvez rechercher et gérer les ressources dans le portail à l’aide des liens Toutes les ressources ou Groupes de ressources situés dans le volet de navigation de gauche.

Étapes suivantes

Dans ce guide de démarrage rapide, vous avez découvert comment appeler le classement sémantique sur un index existant. Nous vous recommandons de tester après cela le classement sémantique sur vos propres index. Si vous préférez poursuivre votre examen des démonstrations, consultez le lien suivant.