Mengonfigurasi penilaian relevansi BM25

Dalam artikel ini, pelajari cara mengonfigurasi algoritma penilaian relevansi BM25 yang digunakan oleh Azure AI Search untuk kueri pencarian teks lengkap. Ini juga menjelaskan cara mengaktifkan BM25 pada layanan pencarian yang lebih lama.

BM25 berlaku untuk:

  • Kueri yang menggunakan search parameter untuk pencarian teks lengkap, pada bidang teks yang memiliki searchable atribusi.
  • Penilaian dilingkup ke searchFields, atau ke semua searchable bidang jika searchFields null.

Mesin pencari menggunakan BM25 untuk menghitung @searchScore untuk setiap kecocokan dalam kueri tertentu. Dokumen yang cocok diberi peringkat berdasarkan skor pencarian mereka, dengan hasil teratas dikembalikan dalam respons kueri. Dimungkinkan untuk mendapatkan beberapa variasi skor dalam hasil, bahkan dari kueri yang sama yang dijalankan melalui indeks pencarian yang sama, tetapi biasanya variasi ini kecil dan tidak mengubah peringkat hasil secara keseluruhan.

BM25 memiliki default untuk frekuensi istilah pembobotan dan panjang dokumen. Anda dapat menyesuaikan properti ini jika default tidak cocok dengan konten Anda. Perubahan konfigurasi dilingkup ke indeks individual, yang berarti Anda dapat menyesuaikan penilaian relevansi berdasarkan karakteristik setiap indeks.

Algoritma penilaian default

Bergantung pada usia layanan pencarian Anda, Azure AI Search mendukung dua algoritma penilaian untuk kueri pencarian teks lengkap:

  • Algoritma Okapi BM25 (setelah 15 Juli 2020)
  • Algoritma kesamaan klasik (sebelum 15 Juli 2020)

Peringkat BM25 adalah default karena cenderung menghasilkan peringkat pencarian yang lebih selaras dengan harapan pengguna. Ini termasuk parameter untuk menyetel hasil berdasarkan faktor-faktor seperti ukuran dokumen. Untuk layanan pencarian yang dibuat setelah Juli 2020, BM25 adalah satu-satunya algoritma penilaian. Jika Anda mencoba mengatur "kesamaan" ke ClassicSimilarity pada layanan baru, kesalahan HTTP 400 dikembalikan karena algoritma tersebut tidak didukung oleh layanan.

Untuk layanan yang lebih lama, kesamaan klasik tetap menjadi algoritma default. Layanan lama dapat ditingkatkan ke BM25 berdasarkan per indeks. Saat beralih dari klasik ke BM25, Anda dapat mengharapkan untuk melihat beberapa perbedaan bagaimana hasil pencarian diurutkan.

Mengatur parameter BM25

Peringkat BM25 menyediakan dua parameter untuk menyetel perhitungan skor relevansi.

  1. Gunakan permintaan Buat atau Perbarui Indeks untuk mengatur parameter BM25:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Jika indeks aktif, tambahkan allowIndexDowntime=true parameter URI pada permintaan, yang ditampilkan pada contoh sebelumnya.

    Karena Azure AI Search tidak mengizinkan pembaruan ke indeks langsung, Anda perlu membuat indeks offline sehingga parameter dapat ditambahkan. Permintaan pengindeksan dan kueri gagal saat indeks offline. Durasi pemadaman adalah jumlah waktu yang diperlukan untuk memperbarui indeks, biasanya tidak lebih dari beberapa detik. Ketika pembaruan selesai, indeks kembali secara otomatis.

  3. Atur "b" dan "k1" ke nilai kustom, lalu kirim permintaan.

    Properti Tipe Deskripsi
    k1 number Mengontrol fungsi penskalaan antara frekuensi istilah dari setiap istilah yang cocok dengan skor relevansi akhir dari pasangan kueri dokumen. Nilai biasanya 0,0 hingga 3,0, dengan 1,2 sebagai default.

    Nilai 0,0 mewakili "model biner", di mana kontribusi dari satu istilah yang cocok sama untuk semua dokumen yang cocok, terlepas dari berapa kali istilah tersebut muncul dalam teks. Nilai k1 yang lebih besar memungkinkan skor terus meningkat karena lebih banyak instans dengan istilah yang sama ditemukan dalam dokumen.

    Menggunakan nilai k1 yang lebih besar penting dalam kasus di mana beberapa istilah disertakan dalam kueri pencarian. Dalam kasus tersebut, Anda mungkin ingin mendukung dokumen yang cocok dengan lebih banyak istilah kueri, melalui dokumen yang hanya cocok dengan satu istilah, beberapa kali. Misalnya, ketika mengkueri istilah "Apollo Spaceflight", Anda mungkin ingin menurunkan skor artikel tentang Mitologi Yunani yang berisi istilah "Apollo" beberapa lusin kali, tanpa menyebutkan "Spaceflight", relatif terhadap artikel lain yang secara eksplisit menyebutkan "Apollo" dan "Spaceflight" beberapa kali saja.
    b number Mengontrol bagaimana panjang dokumen memengaruhi skor relevansi. Nilai antara 0 dan 1, dengan 0,75 sebagai default.

    Nilai 0,0 berarti panjang dokumen tidak memengaruhi skor. Nilai 1,0 berarti efek frekuensi istilah pada skor relevansi dinormalisasi dengan panjang dokumen.

    Menormalkan frekuensi istilah dengan panjang dokumen berguna dalam kasus di mana Anda ingin melakukan penalti dokumen yang lebih lama. Dalam beberapa kasus, dokumen yang lebih panjang (seperti novel lengkap), lebih mungkin berisi banyak istilah yang tidak relevan, dibandingkan dengan dokumen yang lebih pendek.

Aktifkan penilaian BM25 pada layanan yang lebih lama

Jika Anda menjalankan layanan pencarian yang dibuat dari Maret 2014 hingga 15 Juli 2020, Anda dapat mengaktifkan BM25 dengan mengatur properti "kesamaan" pada indeks baru. Properti hanya diekspos pada indeks baru, jadi jika Anda ingin BM25 pada indeks yang ada, Anda harus menghilangkan dan membangun kembali indeks dengan properti "kesamaan" yang diatur ke Microsoft.Azure.Search.BM25Similarity.

Setelah indeks ada dengan properti "kesamaan", Anda dapat beralih di antara BM25Similarity atau ClassicSimilarity.

Tautan berikut ini menjelaskan Properti kesamaan di Azure SDK.

Pustaka klien Properti kesamaan
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python properti kesamaan di SearchIndex

Contoh REST

Anda juga dapat menggunakan REST API. Contoh berikut membuat indeks baru dengan properti "kesamaan" yang diatur ke BM25:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Baca juga