Bagikan melalui


Menambahkan profil penilaian untuk meningkatkan skor pencarian

Profil penilaian memungkinkan Anda meningkatkan peringkat dokumen yang cocok berdasarkan kriteria. Dalam artikel ini, pelajari cara menentukan dan menetapkan profil penilaian yang meningkatkan skor pencarian berdasarkan parameter yang Anda berikan.

Anda dapat menggunakan profil penilaian untuk pencarian kata kunci, pencarian vektor, dan pencarian hibrid. Namun, profil penilaian hanya berlaku untuk bidang nonvektor, jadi pastikan indeks Anda memiliki teks atau bidang numerik yang dapat digunakan dalam profil penilaian. Dukungan profil penilaian untuk pencarian vektor dan hibrid tersedia dalam 2024-05-01-preview dan 2024-07-01 REST API dan dalam paket Azure SDK yang menargetkan rilis tersebut.

Poin-poin penting tentang profil penilaian

Parameter profil penilaian adalah:

  • Bidang tertimbang, di mana kecocokan ditemukan di bidang string tertentu. Misalnya, Anda mungkin ingin kecocokan yang ditemukan di bidang "ringkasan" lebih relevan daripada kecocokan yang sama yang ditemukan di bidang "konten".

  • Fungsi untuk data numerik, termasuk tanggal, rentang, dan koordinat geografis. Ada juga fungsi Tag yang beroperasi di bidang yang menyediakan kumpulan string arbitrer. Anda dapat memilih pendekatan ini di atas bidang tertimbang jika Anda ingin meningkatkan skor berdasarkan apakah kecocokan ditemukan di bidang tag.

Anda dapat membuat beberapa profil lalu mengubah logika kueri untuk memilih profil mana yang digunakan.

Anda dapat memiliki hingga 100 profil penilaian dalam indeks (lihat Batas layanan), tetapi Anda hanya dapat menentukan satu profil pada waktu dalam kueri tertentu.

Catatan

Tidak terbiasa dengan konsep relevansi? Kunjungi Relevansi dan penilaian di Azure AI Cari latar belakang. Anda juga dapat menonton segmen video ini di YouTube untuk profil penilaian atas hasil peringkat BM25.

Definisi profil penilaian

Profil penilaian diberi nama objek yang ditentukan dalam skema indeks. Profil penilaian terdiri dari bidang, fungsi, dan parameter tertimbang.

Definisi berikut menunjukkan profil sederhana bernama "geo". Contoh ini meningkatkan hasil yang memiliki istilah pencarian di bidang hotelName. Ini juga menggunakan distance fungsi untuk mendukung hasil yang berada dalam jarak 10 kilometer dari lokasi saat ini. Jika seseorang mencari dengan istilah 'penginapan', dan 'penginapan' kebetulan menjadi bagian dari nama hotel, dokumen yang mencakup hotel dengan 'penginapan' dalam radius 10 KM dari lokasi saat ini akan tampak lebih tinggi dalam hasil pencarian.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Untuk menggunakan profil penilaian ini, kueri Anda dirumuskan agar menentukan parameter scoringProfile dalam permintaan. Jika Anda menggunakan REST API, kueri ditentukan melalui permintaan GET dan POST. Dalam contoh berikut, "currentLocation" memiliki pemisah satu tanda hubung (-). Ini diikuti oleh koordinat bujur dan lintang, di mana bujur adalah nilai negatif.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2024-07-01

Perhatikan perbedaan sintaksis saat menggunakan POST. Di POST, "scoringParameters" bersifat jamak dan merupakan array.

POST /indexes/hotels/docs&api-version=2024-07-01
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Kueri ini mencari istilah "penginapan" dan meneruskan lokasi saat ini. Perhatikan bahwa kueri ini menyertakan parameter lain, seperti scoringParameter. Parameter kueri, termasuk "scoringParameter", dijelaskan dalam Dokumen Pencarian (REST API).

Lihat Contoh yang diperluas untuk pencarian vektor dan hibrid dan Contoh yang diperluas untuk pencarian kata kunci untuk skenario lainnya.

Profil penilaian melengkapi algoritma penilaian default dengan meningkatkan skor kecocokan yang memenuhi kriteria profil. Fungsi penilaian berlaku untuk pencarian kata kunci, kueri vektor murni, dan pada kueri hibrid.

Saat Anda menggunakan profil penilaian atau fitur peningkatan lainnya di Azure AI Search, algoritma Fungsi Peringkat Timbal Balik (RRF) menetapkan skor, termasuk untuk kueri teks dan vektor mandiri. Pasca-RRF, semua penilaian/peningkatan, peringkat semantik, dan penyesuaian bobot vektor terjadi.

Diagram yang menunjukkan bidang mana yang memiliki profil penilaian dan saat peringkat terjadi.

Tip

Anda dapat menggunakan parameter featuresMode (pratinjau) untuk meminta detail penilaian tambahan dengan hasil pencarian (termasuk skor tingkat bidang).

Menambahkan profil penilaian ke indeks pencarian

  1. Mulailah dengan definisi indeks. Anda dapat menambahkan dan memperbarui profil penilaian pada indeks yang sudah ada tanpa harus membangunnya kembali. Gunakan permintaan Buat atau Perbarui Indeks untuk memposting revisi.

  2. Tempelkan templat yang disediakan dalam artikel ini.

  3. Berikan nama yang mematuhi konvensi penamaan.

  4. Tentukan kriteria peningkatan. Satu profil dapat berisi bidang tertimbang teks, fungsi, atau keduanya.

Anda harus bekerja secara berulang, menggunakan himpunan data yang akan membantu Anda membuktikan atau menyangkal efektivitas profil tertentu.

Profil penilaian dapat ditentukan di portal Azure sebagaimana yang ditunjukkan dalam cuplikan layar berikut, atau secara terprogram melalui REST API atau di Azure SDK, seperti kelas Profil Penilaian di Azure SDK untuk .NET.

Menambahkan halaman profil penilaian

Menggunakan bidang tertimbang teks

Gunakan bidang berbobot teks saat konteks bidang penting dan kueri menyertakan searchable bidang string. Misalnya, jika kueri menyertakan istilah "bandara", Anda mungkin ingin agar "bandara" di bidang Description memiliki bobot lebih dari di HotelName.

Bidang tertimbang adalah pasangan nilai nama yang searchable terdiri dari bidang dan angka positif yang digunakan sebagai pengali. Jika skor bidang asli HotelName adalah 3, skor yang ditingkatkan untuk bidang itu menjadi 6, yang berkontribusi pada skor keseluruhan yang lebih tinggi untuk dokumen induk itu sendiri.

"scoringProfiles": [  
    {  
      "name": "boostSearchTerms",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

Gunakan fungsi

Gunakan fungsi ketika bobot relatif sederhana tidak mencukupi atau tidak berlaku, seperti halnya jarak dan kesegaran, yang merupakan perhitungan atas data numerik. Anda dapat menentukan beberapa fungsi per profil penilaian. Untuk informasi selengkapnya tentang jenis data EDM yang digunakan dalam Pencarian Azure AI, lihat Jenis data yang didukung.

Fungsi Deskripsi Kasus penggunaan
jarak Tingkatkan berdasarkan kedekatan atau lokasi geografis. Fungsi ini hanya dapat digunakan dengan bidang Edm.GeographyPoint. Gunakan untuk skenario "temukan di dekat saya".
Kesegaran Tingkatkan menurut nilai dalam bidang datetime (Edm.DateTimeOffset). Atur boostingDuration untuk menentukan nilai yang mewakili rentang waktu di mana peningkatan terjadi. Gunakan saat Anda ingin meningkatkan berdasarkan tanggal yang lebih baru atau yang lebih lama. Peringkatkan item seperti acara kalender dengan tanggal mendatang sehingga item yang lebih dekat dengan saat ini dapat diberi peringkat lebih tinggi daripada item lebih jauh di masa mendatang. Salah satu akhir rentang diperbaiki ke waktu saat ini. Untuk meningkatkan berbagai waktu di masa lalu, gunakan boostingDuration positif. Untuk meningkatkan rentang waktu di masa mendatang, gunakan boostingDuration negatif.
Besarnya Mengubah peringkat berdasarkan rentang nilai untuk bidang numerik. Nilai harus berupa bilangan bulat atau angka floating-point. Untuk peringkat bintang 1 sampai 4, ini akan menjadi 1. Untuk margin lebih dari 50%, ini akan menjadi 50. Fungsi ini hanya dapat digunakan dengan bidang Edm.Double dan Edm.Int. Untuk fungsi magnitude ini, Anda dapat membalikkan rentang, tinggi ke rendah, jika Anda menginginkan pola terbalik (misalnya, untuk meningkatkan item dengan harga lebih rendah lebih dari item dengan harga lebih tinggi). Mengingat kisaran harga dari $ 100 hingga $ 1, Anda akan menetapkan boostingRangeStart pada 100 dan boostingRangeEnd pada 1 untuk meningkatkan item dengan harga lebih rendah. Gunakan saat Anda ingin meningkatkan berdasarkan margin laba, peringkat, jumlah klik-jalan, jumlah unduhan, harga tertinggi, harga terendah, atau hitungan unduhan. Jika dua item relevan, item dengan peringkat yang lebih tinggi akan ditampilkan terlebih dahulu.
tag Tingkatkan menurut tag yang umum untuk dokumen pencarian dan string kueri. Tag disediakan dalam tagsParameter. Fungsi ini hanya dapat digunakan dengan bidang pencarian jenis Edm.String dan Collection(Edm.String). Gunakan saat Anda memiliki bidang tag. Jika tag tertentu dalam daftar itu sendiri adalah daftar yang dibatasi koma, Anda dapat menggunakan normalizer teks pada bidang untuk menghapus koma pada waktu kueri (memetakan karakter koma ke spasi). Pendekatan ini akan "meratakan" daftar sehingga semua istilah adalah string panjang tunggal dari istilah yang dibatasi koma.

Aturan untuk menggunakan fungsi

  • Fungsi hanya dapat diterapkan ke bidang yang dikaitkan sebagai filterable.
  • Jenis fungsi ("freshness", "magnitude", "distance", "tag") harus huruf kecil.
  • Fungsi tidak dapat menyertakan nilai null atau kosong.
  • Fungsi hanya dapat memiliki satu bidang per definisi fungsi. Untuk menggunakan besaran dua kali dalam profil yang sama, berikan besaran dua definisi, satu untuk setiap bidang.

Templat

Bagian ini memperlihatkan sintaksis dan templat untuk mencetak profil. Untuk deskripsi properti, lihat referensi REST API.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Mengatur interpolasi

Interpolasi mengatur bentuk kelopak yang digunakan untuk penilaian. Karena penilaiannya tinggi ke rendah, kemiringan selalu menurun, tetapi interpolasinya menentukan kurva kemiringan turun. Interpolasi berikut dapat digunakan:

Interpolasi Deskripsi
linear Untuk item yang berada dalam rentang maks dan min, peningkatan diterapkan dalam jumlah yang terus menurun. Linear adalah interpolasi default untuk profil penilaian.
constant Untuk item yang berada dalam rentang awal dan akhir, peningkatan konstanta diterapkan ke hasil peringkat.
quadratic Dibandingkan dengan interpolasi linier yang memiliki peningkatan yang terus menurun, Quadratic awalnya menurun pada kecepatan yang lebih kecil dan kemudian ketika mendekati rentang akhir, itu menurun pada interval yang jauh lebih tinggi. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.
logarithmic Dibandingkan dengan interpolasi linier yang memiliki peningkatan yang terus menurun, logaritmik awalnya menurun pada kecepatan yang lebih tinggi dan kemudian ketika mendekati rentang akhir, ia menurun pada interval yang jauh lebih kecil. Opsi interpolasi ini tidak diizinkan dalam fungsi penilaian tag.

Baris konstanta, linear, kuadrat, log10 pada grafik

Mengatur boostingDuration untuk fungsi kesegaran

boostingDuration adalah atribut fungsi freshness. Anda menggunakannya untuk menetapkan periode kedaluwarsa, setelah itu peningkatan akan berhenti untuk dokumen tertentu. Misalnya, untuk meningkatkan lini produk atau merek untuk periode promosi 10 hari, Anda akan menentukan periode 10 hari sebagai "P10D" untuk dokumen tersebut.

boostingDuration harus diformat sebagai nilai “dayTimeDuration” XSD (subset terbatas dari nilai durasi ISO 8601). Pola untuk ini adalah: "P[nD][T[nH][nM][nS]]".

Tabel berikut ini menyediakan beberapa contoh.

Durasi boostingDuration
1 hari "P1D"
2 hari dan 12 jam "P2DT12H"
15 menit "PT15M"
30 hari, 5 jam, 10 menit, dan 6,334 detik "P30DT5H10M6.334S"

Untuk contoh selengkapnya, lihat Skema XML: Jenis data (situs web W3.org).

Lihat posting blog dan notebook ini untuk demonstrasi menggunakan profil penilaian dan peningkatan dokumen dalam skenario AI vektor dan generatif.

Contoh ini memperlihatkan skema indeks dengan dua profil penilaian (boostGenre, newAndHighlyRated). Setiap kueri terhadap indeks ini yang menyertakan profil sebagai parameter kueri akan menggunakan profil untuk menilai tataan hasil.

Profil boostGenre menggunakan bidang teks tertimbang, meningkatkan kecocokan yang ditemukan di bidang albumTitle, genre, dan artistName. Bidang tersebut masing-masing ditingkatkan 1,5, 5, dan 2. Mengapa genre meningkat jauh lebih tinggi daripada yang lain? Jika pencarian dilakukan melalui data yang agak homogen (seperti halnya dengan 'genre' dalam musicstoreindex), Anda mungkin memerlukan ragam yang lebih besar dalam bobot relatif. Misalnya, dalam musicstoreindex, 'rock' muncul sebagai genre dan dalam deskripsi genre yang diungkapkan secara identik. Jika Anda ingin agar genre melebihi bobot deskripsi genre, bidang genre akan membutuhkan bobot relatif yang jauh lebih tinggi.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Lihat juga