Bagikan melalui


Mulai cepat: Peringkat semantik dengan .NET atau Python

Di Azure AI Search, peringkat semantik adalah fungsionalitas sisi kueri yang menggunakan pemahaman pembacaan mesin dari Microsoft untuk mengodekan ulang hasil pencarian, mempromosikan kecocokan yang paling relevan secara semantik ke bagian atas daftar. Bergantung pada konten dan kueri, peringkat semantik dapat secara signifikan meningkatkan relevansi pencarian, dengan pekerjaan minimal untuk pengembang.

Mulai cepat ini memandu Anda melalui modifikasi indeks dan kueri yang memanggil peringkat semantik.

Catatan

Mencari solusi Azure AI Search dengan interaksi ChatGPT? Lihat demo ini atau akselerator ini untuk detailnya.

Prasyarat

  • Akun Azure dengan langganan aktif. Buat akun secara gratis.

  • Azure AI Search, di tingkat Dasar atau lebih tinggi, dengan peringkat semantik diaktifkan.

  • Kunci API dan titik akhir layanan pencarian. Masuk ke portal Azure dan temukan layanan pencarian Anda.

    Di Gambaran Umum, salin URL dan simpan ke Notepad untuk langkah selanjutnya. Contoh titik akhir mungkin terlihat sepertihttps://mydemo.search.windows.net.

    Di Kunci, salin dan simpan kunci admin untuk hak penuh untuk membuat dan menghapus objek. Ada dua kunci primer dan sekunder yang dapat dipertukarkan. Pilih salah satu.

    Get an HTTP endpoint and access key

Menambahkan peringkat semantik

Untuk menggunakan peringkat semantik, tambahkan konfigurasi semantik ke indeks pencarian, dan tambahkan parameter ke kueri. Jika Anda memiliki indeks yang sudah ada, Anda dapat membuat perubahan ini tanpa harus mengindeks ulang konten Anda karena tidak ada dampak pada struktur konten yang dapat dicari.

  • Konfigurasi semantik menetapkan urutan prioritas untuk bidang yang menyumbangkan judul, kata kunci, dan konten yang digunakan dalam reranking semantik. Prioritas bidang memungkinkan pemrosesan yang lebih cepat.

  • Kueri yang memanggil peringkat semantik menyertakan parameter untuk jenis kueri dan apakah keterangan dan jawaban dikembalikan. Anda dapat menambahkan parameter ini ke logika kueri yang sudah ada. Tidak ada konflik dengan parameter lain.

Buat aplikasi konsol menggunakan pustaka klien Azure.Search.Documents untuk menambahkan peringkat semantik ke indeks pencarian yang ada.

Atau, Anda dapat mengunduh kode sumber untuk memulai dengan proyek yang sudah selesai atau mengikuti langkah-langkah ini untuk membuat sendiri.

Menyiapkan lingkungan Anda

  1. Mulai Visual Studio dan buat proyek baru untuk aplikasi konsol.

  2. Pada Tools>Paket Pengelolah NuGet , Pilih Kelola Paket NuGet Packages untuk Solusi....

  3. Pilih Telusur.

  4. Cari paket Azure.Search.Documents dan pilih versi stabil terbaru.

  5. Pilih Instal untuk menambahkan rakitan ke proyek dan solusi Anda.

Buat klien pencarian

  1. Di Program.cs, tambahkan arahan berikut using .

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Buat dua klien: SearchIndexClient membuat indeks, dan SearchClient memuat dan menanyakan indeks yang ada. Keduanya memerlukan titik akhir layanan dan kunci API admin untuk autentikasi dengan hak buat/hapus.

    Karena kode membangun URI untuk Anda, tentukan hanya nama layanan pencarian di properti "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);
         . . . 
     }
    

Buat indeks

Buat atau perbarui skema indeks untuk menyertakan SemanticConfiguration. Jika Anda memperbarui indeks yang ada, modifikasi ini tidak memerlukan pengindeksan ulang karena struktur dokumen Anda tidak berubah.

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

Kode berikut membuat indeks pada layanan pencarian Anda:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Muat dokumen

Pencarian Azure AI mencari konten yang disimpan dalam layanan. Kode untuk mengunggah dokumen identik dengan mulai cepat C# untuk pencarian teks lengkap sehingga kita tidak perlu menduplikasinya di sini. Anda harus memiliki empat hotel dengan nama, alamat, dan deskripsi. Solusi Anda harus memiliki jenis untuk Hotel dan Alamat.

Mencari indeks

Berikut adalah kueri yang memanggil peringkat semantik, dengan opsi pencarian untuk menentukan parameter:

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

Sebagai perbandingan, berikut adalah hasil dari kueri yang menggunakan peringkat BM25 default, berdasarkan frekuensi istilah dan kedekatan. Mengingat kueri "hotel apa yang memiliki restoran yang bagus di situs", algoritma peringkat BM25 mengembalikan kecocokan dalam urutan yang ditunjukkan dalam cuplikan layar ini:

Screenshot showing matches ranked by BM25.

Sebaliknya, ketika peringkat semantik diterapkan ke kueri yang sama ("hotel apa yang memiliki restoran yang bagus di situs"), hasilnya dirank ulang berdasarkan relevansi semantik dengan kueri. Kali ini, hasil teratas adalah hotel dengan restoran, yang lebih selaras dengan harapan pengguna.

Screenshot showing matches ranked based on semantic ranking.

Jalankan program

Tekan F5 untuk membangun kembali aplikasi dan menjalankan program secara keseluruhan.

Output mencakup pesan dari Console.WriteLine, dengan penambahan informasi dan hasil permintaan.

Membersihkan sumber daya

Saat bekerja dengan langganan Anda sendiri, sebaiknya identifikasi apakah Anda masih membutuhkan sumber daya yang Anda buat di akhir proyek. Sumber daya yang dibiarkan berjalan dapat menghabiskan uang Anda. Anda dapat menghapus sumber daya satu per satu atau menghapus grup sumber daya untuk menghapus seluruh rangkaian sumber daya.

Anda dapat menemukan dan mengelola sumber daya di portal, menggunakan tautan Semua sumber daya atau Grup sumber daya di panel navigasi kiri.

Langkah berikutnya

Dalam mulai cepat ini, Anda mempelajari cara memanggil peringkat semantik pada indeks yang ada. Sebaiknya coba peringkat semantik pada indeks Anda sendiri sebagai langkah berikutnya. Namun, jika Anda ingin melanjutkan demo, kunjungi tautan berikut.