Delen via


Quickstart: Semantische rangschikking met .NET of Python

In Azure AI Search is semantische classificatie functionaliteit aan de queryzijde die gebruikmaakt van leesbegrip van machines van Microsoft om zoekresultaten opnieuw te scoren, waardoor de meest semantisch relevante overeenkomsten boven aan de lijst worden gepromoot. Afhankelijk van de inhoud en de query kan semantische classificatie de relevantie van de zoekfunctie aanzienlijk verbeteren, met minimale hoeveelheid werk voor de ontwikkelaar.

In deze quickstart worden de index- en querywijzigingen beschreven die semantische rangschikking aanroepen.

Notitie

Zie deze demo of deze accelerator voor een Voorbeeld van een Azure AI Search-oplossing met chatGPT-interactie.

Vereisten

  • Een Azure-account met een actief abonnement. U kunt gratis een account maken.

  • Een Azure AI Search-resource, op de Basic-laag of hoger, met een semantische rangschikking ingeschakeld.

  • Een API-sleutel en zoekservice-eindpunt. Meld u aan bij Azure Portal en zoek uw zoekservice.

    Kopieer in Overzicht de URL en sla deze op voor een latere stap. Een eindpunt ziet er bijvoorbeeld uit als https://mydemo.search.windows.net.

    Kopieer en sla in Sleutels een beheerderssleutel op voor volledige rechten voor het maken en verwijderen van objecten. Er zijn twee uitwisselbare primaire en secundaire sleutels. Kies een van beide.

    Schermopname die laat zien waar u het HTTP-eindpunt en de toegangssleutel van uw zoekservice kunt vinden.

Semantische rangschikking toevoegen

Als u een semantische rangschikking wilt gebruiken, voegt u een semantische configuratie toe aan een zoekindex en voegt u parameters toe aan een query. Als u een bestaande index hebt, kunt u deze wijzigingen aanbrengen zonder dat u de inhoud opnieuw hoeft te indexeren, omdat de structuur van de doorzoekbare inhoud geen invloed heeft.

  • Met een semantische configuratie wordt een prioriteitsvolgorde ingesteld voor velden die een titel, trefwoorden en inhoud bijdragen die worden gebruikt in semantische rerankering. Met veld prioritering kunt u sneller verwerken.

  • Query's die semantische rangschikking aanroepen, bevatten parameters voor het querytype en of bijschriften en antwoorden worden geretourneerd. U kunt deze parameters toevoegen aan uw bestaande querylogica. Er is geen conflict met andere parameters.

Bouw een consoletoepassing met behulp van de clientbibliotheek Azure.Search.Documents om semantische classificatie toe te voegen aan een bestaande zoekindex.

U kunt ook de broncode downloaden om te beginnen met een voltooid project.

Uw omgeving instellen

  1. Start Visual Studio en maak een nieuw project voor een console-app.

  2. Selecteer onder Hulpprogramma's>NuGet-pakketbeheer de optie NuGet-pakketten voor oplossing beheren....

  3. Selecteer Bladeren.

  4. Zoek het pakket Azure.Search.Documents en selecteer de meest recente stabiele versie.

  5. Selecteer Installeren om de assembly toe te voegen aan uw project en oplossing.

Een zoekclient maken

  1. Voeg in Program.cs de volgende using instructies toe.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Maak twee clients: SearchIndexClient maakt de index en SearchClient laadt en voert query's uit op een bestaande index.

    Beide clients hebben het service-eindpunt en een beheerders-API-sleutel nodig voor verificatie met rechten voor maken/verwijderen. De code bouwt echter de URI voor u uit, dus geef alleen de naam van de zoekservice voor de serviceName eigenschap op. Neem deze niet op https:// of .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);
         . . . 
     }
    

Een index maken

Een indexschema maken of bijwerken om een SemanticConfiguration. Als u een bestaande index bijwerkt, hoeft deze wijziging niet opnieuw te worden geïndexeerd omdat de structuur van uw documenten ongewijzigd is.

// 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);
}

Met de volgende code wordt de index voor uw zoekservice gemaakt:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Documenten laden

Azure AI Search zoekt naar inhoud die is opgeslagen in de service. De code voor het uploaden van documenten is identiek aan de C#-snelstartgids voor zoeken in volledige tekst, zodat we deze hier niet hoeven te dupliceren. U moet vier hotels met namen, adressen en beschrijvingen hebben. Uw oplossing moet typen hebben voor hotels en adressen.

Een index doorzoeken

Hier volgt een query die semantische rangschikking aanroept, met zoekopties voor het opgeven van parameters:

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);

Ter vergelijking zijn hier resultaten van een query die gebruikmaakt van de standaard BM25-classificatie, op basis van de termfrequentie en nabijheid. Gezien de query 'welk hotel een goed restaurant op locatie heeft', retourneert het BM25-classificatie-algoritme overeenkomsten in de volgorde die wordt weergegeven in deze schermopname:

Schermopname van overeenkomsten gerangschikt op BM25.

Wanneer daarentegen semantische classificatie wordt toegepast op dezelfde query ('welk hotel heeft een goed restaurant op site'),worden de resultaten opnieuw gerangschikt op basis van semantische relevantie voor de query. Dit keer is het belangrijkste resultaat het hotel met het restaurant, dat beter aansluit op de verwachtingen van de gebruiker.

Schermopname van overeenkomsten gerangschikt op basis van semantische rangschikking.

Het programma uitvoeren

Druk op F5 om de app opnieuw te bouwen en het programma in zijn geheel uit te voeren.

De uitvoer bevat berichten van Console.WriteLine, met toevoeging van query-informatie en -resultaten.

Resources opschonen

Wanneer u in uw eigen abonnement werkt, is het een goed idee om aan het einde van een project te bepalen of u de gemaakte resources nog nodig hebt. Resources die actief blijven, kunnen u geld kosten. U kunt resources afzonderlijk verwijderen, maar u kunt ook de resourcegroep verwijderen als u de volledige resourceset wilt verwijderen.

U kunt resources vinden en beheren in Azure Portal met behulp van de koppeling Alle resources of resourcegroepen in het linkernavigatiedeelvenster.

Volgende stappen

In deze quickstart hebt u geleerd hoe u semantische classificatie kunt aanroepen voor een bestaande index. We raden u aan om semantische classificatie in uw eigen indexen te proberen als een volgende stap. Als u echter wilt doorgaan met demo's, gaat u naar de volgende koppeling.