Udostępnij za pośrednictwem


Szybki start: klasyfikacja semantyczna przy użyciu platformy .NET lub języka Python

W usłudze Azure AI Search semantyczna klasyfikacja to funkcja po stronie zapytania, która wykorzystuje zrozumienie odczytu maszynowego od firmy Microsoft w celu ponownego podkreślenia wyników wyszukiwania, promując najbardziej semantycznie istotne dopasowania na początku listy. W zależności od zawartości i zapytania semantyczny ranking może znacznie poprawić istotność wyszukiwania, przy minimalnej pracy dla dewelopera.

Ten przewodnik Szybki start przeprowadzi Cię przez modyfikacje indeksu i zapytań, które wywołują semantyczny ranger.

Uwaga

Aby zapoznać się z przykładem rozwiązania azure AI Search z interakcją ChatGPT, zobacz ten pokaz lub ten akcelerator.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Możesz bezpłatnie utworzyć konto.

  • Zasób usługi Azure AI Search w warstwie Podstawowa lub nowsza z włączonym semantycznym rankerem.

  • Klucz interfejsu API i punkt końcowy usługi wyszukiwania. Zaloguj się do witryny Azure Portal i znajdź usługę wyszukiwania.

    W obszarze Przegląd skopiuj adres URL i zapisz go w późniejszym kroku. Przykładowy punkt końcowy może wyglądać podobnie jak https://mydemo.search.windows.net.

    W obszarze Klucze skopiuj i zapisz klucz administratora, aby uzyskać pełne prawa do tworzenia i usuwania obiektów. Istnieją dwa zamienne klucze podstawowe i pomocnicze. Wybierz jedną z nich.

    Zrzut ekranu przedstawiający miejsce znalezienia punktu końcowego HTTP usługi wyszukiwania i klucza dostępu.

Dodawanie klasyfikacji semantycznej

Aby użyć klasyfikatora semantycznego, dodaj semantyczną konfigurację do indeksu wyszukiwania i dodaj parametry do zapytania. Jeśli masz istniejący indeks, możesz wprowadzić te zmiany bez konieczności ponownego indeksowania zawartości, ponieważ nie ma to wpływu na strukturę zawartości z możliwością wyszukiwania.

  • Konfiguracja semantyczna określa kolejność priorytetu dla pól, które współtworzyją tytuł, słowa kluczowe i zawartość używaną w semantycznej rerankingu. Priorytetyzacja pól umożliwia szybsze przetwarzanie.

  • Zapytania, które wywołują semantyczny rangą, obejmują parametry typu zapytania i informację, czy zwracane są podpisy i odpowiedzi. Te parametry można dodać do istniejącej logiki zapytań. Brak konfliktu z innymi parametrami.

Utwórz aplikację konsolową przy użyciu biblioteki klienta Azure.Search.Documents , aby dodać semantyczną klasyfikację do istniejącego indeksu wyszukiwania.

Alternatywnie możesz pobrać kod źródłowy, aby rozpocząć od gotowego projektu.

Konfigurowanie środowiska

  1. Uruchom program Visual Studio i utwórz nowy projekt dla aplikacji konsolowej.

  2. W obszarze Narzędzia>Menedżer pakietów NuGet wybierz pozycję Zarządzaj pakietami NuGet dla rozwiązania....

  3. Wybierz przycisk Przeglądaj.

  4. Wyszukaj pakiet Azure.Search.Documents i wybierz najnowszą stabilną wersję.

  5. Wybierz pozycję Zainstaluj , aby dodać zestaw do projektu i rozwiązania.

Tworzenie klienta wyszukiwania

  1. W Program.cs dodaj następujące using dyrektywy.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Utwórz dwóch klientów: Element SearchIndexClient tworzy indeks, a element SearchClient ładuje i wykonuje zapytania dotyczące istniejącego indeksu.

    Oba klienci potrzebują punktu końcowego usługi i klucza interfejsu API administratora do uwierzytelniania z uprawnieniami tworzenia/usuwania. Jednak kod tworzy identyfikator URI dla Ciebie, dlatego określ tylko nazwę usługi wyszukiwania dla serviceName właściwości. Nie dołączaj https:// ani .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);
         . . . 
     }
    

Tworzenie indeksu

Utwórz lub zaktualizuj schemat indeksu, aby uwzględnić SemanticConfigurationelement . Jeśli aktualizujesz istniejący indeks, ta modyfikacja nie wymaga ponownego indeksowania, ponieważ struktura dokumentów pozostaje niezmieniona.

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

Poniższy kod tworzy indeks w usłudze wyszukiwania:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Ładowanie dokumentów

Usługa Azure AI Search wyszukuje zawartość przechowywaną w usłudze. Kod do przekazywania dokumentów jest identyczny z przewodnikiem Szybki start języka C# na potrzeby wyszukiwania pełnotekstowego, więc nie musimy go duplikować tutaj. Powinny istnieć cztery hotele z nazwami, adresami i opisami. Twoje rozwiązanie powinno mieć typy hoteli i adresów.

Przeszukiwanie indeksu

Oto zapytanie, które wywołuje semantyczny ranger z opcjami wyszukiwania określającymi parametry:

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

Dla porównania poniżej przedstawiono wyniki zapytania korzystającego z domyślnego rankingu BM25 na podstawie częstotliwości terminów i zbliżenia. Biorąc pod uwagę zapytanie "co hotel ma dobrą restaurację na miejscu", algorytm klasyfikacji BM25 zwraca dopasowania w kolejności pokazanej na tym zrzucie ekranu:

Zrzut ekranu przedstawiający dopasowania sklasyfikowane przez BM25.

Natomiast gdy klasyfikacja semantyczna jest stosowana do tego samego zapytania ("co hotel ma dobrą restaurację na miejscu"), wyniki są ponownie klasyfikowane na podstawie semantycznego istotności zapytania. Tym razem najlepszym wynikiem jest hotel z restauracją, która lepiej odpowiada oczekiwaniom użytkowników.

Zrzut ekranu przedstawiający dopasowania sklasyfikowane na podstawie klasyfikacji semantycznej.

Uruchamianie programu

Naciśnij F5, aby ponownie skompilować aplikację i uruchomić program w całości.

Dane wyjściowe obejmują komunikaty z elementu Console.WriteLine z dodawaniem informacji o zapytaniu i wynikach.

Czyszczenie zasobów

Jeśli pracujesz w ramach własnej subskrypcji, dobrym pomysłem po zakończeniu projektu jest sprawdzenie, czy dalej potrzebujesz utworzonych zasobów. Uruchomione zasoby mogą generować koszty. Zasoby możesz usuwać pojedynczo lub jako grupę zasobów, usuwając cały zestaw zasobów.

Zasoby można znaleźć w portalu i zarządzać nimi, korzystając z linku Wszystkie zasoby lub Grupy zasobów w okienku nawigacji po lewej stronie.

Następne kroki

W tym przewodniku Szybki start przedstawiono sposób wywoływania klasyfikacji semantycznej w istniejącym indeksie. Zalecamy wypróbowanie klasyfikacji semantycznej na własnych indeksach jako następnego kroku. Jeśli jednak chcesz kontynuować pokazy, odwiedź następujący link.