Partager 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 des modifications d’index et de requête qui appellent le classeur sémantique.

Remarque

Pour un exemple de solution Azure AI Search avec interaction ChatGPT, consultez cette démo ou cet accélérateur.

Prérequis

  • Compte Azure avec un abonnement actif. Vous pouvez créer un compte gratuitement.

  • Une ressource Azure AI Search, au niveau de base ou supérieur, avec un 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 Présentation, copiez l’URL et enregistrez-la 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.

    Capture d'écran montrant où trouver le point de terminaison HTTP et la clé d'accès de votre service de recherche.

Ajouter le classement sémantique

Pour utiliser le classeur 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 classeur sémantique incluent des paramètres indiquant le type de requête et si les légendes et les réponses sont retournées ou non. 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 console en utilisant la bibliothèque cliente Azure.Search.Documents pour ajouter un classement sémantique à un index de recherche existant.

Alternativement, vous pouvez télécharger le code source pour démarrer avec un projet terminé.

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 le package 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.

    Les deux clients ont besoin du point de terminaison de service et d’une clé API d’administrateur pour l’authentification avec des droits de création/suppression. Cependant, le code crée l'URI pour vous, spécifiez donc uniquement le nom du service de recherche pour la propriété serviceName. Ne pas inclure https:// ou .search.windows.net.

     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 classeur sémantique, 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 :

Capture d’écran des correspondances classées selon 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.

Capture d’écran des correspondances classées en fonction du classement sémantique.

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.