Bagikan melalui


Penilaian relevansi dalam pencarian hibrid menggunakan Reciprocal Rank Fusion (RRF)

Reciprocal Rank Fusion (RRF) adalah algoritma yang mengevaluasi skor pencarian dari beberapa hasil yang sebelumnya diberi peringkat untuk menghasilkan tataan hasil terpadu. Dalam Pencarian Azure AI, RRF digunakan setiap kali ada dua kueri atau lebih yang dijalankan secara paralel. Setiap kueri menghasilkan kumpulan hasil berperingkat, dan RRF digunakan untuk menggabungkan dan membuat homogen peringkat ke dalam satu kumpulan hasil, yang dikembalikan dalam respons kueri. Contoh skenario di mana RRF selalu digunakan termasuk pencarian hibrid dan beberapa kueri vektor yang dijalankan secara bersamaan.

RRF didasarkan pada konsep peringkat timbal balik, yang merupakan kebalikan dari peringkat dokumen relevan pertama dalam daftar hasil pencarian. Tujuan dari teknik ini adalah untuk memperhitungkan posisi item dalam peringkat asli, dan memberikan kepentingan yang lebih tinggi untuk item yang diberi peringkat lebih tinggi dalam beberapa daftar. Ini dapat membantu meningkatkan kualitas keseluruhan dan keandalan peringkat akhir, membuatnya lebih berguna untuk tugas menggabungkan beberapa hasil pencarian yang diurutkan.

Cara kerja peringkat RRF

RRF bekerja dengan mengambil hasil pencarian dari beberapa metode, menetapkan skor peringkat timbal balik ke setiap dokumen dalam hasil, lalu menggabungkan skor untuk membuat peringkat baru. Konsepnya adalah bahwa dokumen yang muncul di posisi teratas di beberapa metode pencarian cenderung lebih relevan dan harus diberi peringkat lebih tinggi dalam hasil gabungan.

Berikut adalah penjelasan sederhana tentang proses RRF:

  1. Dapatkan hasil pencarian berperingkat dari beberapa kueri yang dijalankan secara paralel.

  2. Tetapkan skor peringkat timbal balik untuk hasil di setiap daftar peringkat. RRF menghasilkan baru @search.score untuk setiap kecocokan di setiap tataan hasil. Untuk setiap dokumen dalam hasil pencarian, mesin menetapkan skor peringkat timbal balik berdasarkan posisinya dalam daftar. Skor dihitung sebagai 1/(rank + k), di mana rank adalah posisi dokumen dalam daftar, dan k merupakan konstanta, yang secara eksperimental diamati untuk melakukan yang terbaik jika diatur ke nilai kecil seperti 60. Perhatikan bahwa nilai ini k adalah konstanta dalam algoritma RRF dan sepenuhnya terpisah dari k yang mengontrol jumlah tetangga terdekat.

  3. Gabungkan skor. Untuk setiap dokumen, mesin menjumlahkan skor peringkat timbal balik yang diperoleh dari setiap sistem pencarian, menghasilkan skor gabungan untuk setiap dokumen. 

  4. Mesin memberi peringkat dokumen berdasarkan skor gabungan dan mengurutkannya. Daftar yang dihasilkan adalah peringkat menyatu.

Hanya bidang yang ditandai sebagai searchable dalam indeks, atau searchFields dalam kueri, yang digunakan untuk penilaian. Hanya bidang yang ditandai sebagai retrievable, atau bidang yang ditentukan dalam select kueri, yang dikembalikan dalam hasil pencarian, bersama dengan skor pencariannya.

Eksekusi kueri paralel

RRF digunakan kapan saja ada lebih dari satu eksekusi kueri. Contoh berikut mengilustrasikan pola kueri di mana eksekusi kueri paralel terjadi:

  • Kueri teks lengkap, ditambah satu kueri vektor (skenario hibrid sederhana), sama dengan dua eksekusi kueri.
  • Kueri teks lengkap, ditambah satu kueri vektor yang menargetkan dua bidang vektor, sama dengan tiga eksekusi kueri.
  • Kueri teks lengkap, ditambah dua kueri vektor yang menargetkan lima bidang vektor, sama dengan 11 eksekusi kueri

Skor dalam hasil pencarian hibrid

Setiap kali hasil diberi peringkat, @search.score properti berisi nilai yang digunakan untuk mengurutkan hasil. Skor dihasilkan oleh algoritma peringkat yang bervariasi untuk setiap metode. Setiap algoritma memiliki rentang dan besarannya sendiri.

Bagan berikut mengidentifikasi properti penilaian yang dikembalikan pada setiap kecocokan, algoritma, dan rentang skor untuk setiap algoritma peringkat relevansi.

Metode pencarian Parameter Algoritma penilaian Rentang
pencarian teks lengkap @search.score Algoritma BM25 Tidak ada batas atas.
pencarian vektor @search.score Algoritma HNSW, menggunakan metrik kesamaan yang ditentukan dalam konfigurasi HNSW. 0,333 - 1,00 (Kosinus), 0 hingga 1 untuk Euclidean dan DotProduct.
pencarian hibrid @search.score Algoritma RRF Batas atas dibatasi oleh jumlah kueri yang menyatu, dengan setiap kueri berkontribusi maksimum sekitar 1 ke skor RRF. Misalnya, menggabungkan tiga kueri akan menghasilkan skor RRF yang lebih tinggi daripada jika hanya dua hasil pencarian yang digabungkan.
peringkat semantik @search.rerankerScore Pangkat semantik 0.00 - 4.00

Peringkat semantik tidak berpartisipasi dalam RRF. Skornya (@search.rerankerScore) selalu dilaporkan secara terpisah dalam respons kueri. Peringkat semantik dapat mererank teks lengkap dan hasil pencarian hibrid, dengan asumsi hasil tersebut mencakup bidang yang memiliki konten yang kaya secara semantik.

Skor tertimbang

Mulai pratinjau 2024-05-01, Anda dapat menimbang kueri vektor untuk meningkatkan atau mengurangi kepentingannya dalam kueri hibrid.

Ingat bahwa saat menghitung RRF untuk dokumen tertentu, mesin pencari melihat peringkat dokumen tersebut untuk setiap tataan hasil tempat dokumen muncul. Asumsikan dokumen muncul dalam tiga hasil pencarian terpisah, di mana hasilnya berasal dari dua kueri vektor dan satu teks kueri berpangkat BM25. Posisi dokumen bervariasi dalam setiap hasil.

Kecocokan ditemukan Posisi dalam hasil @search.score pengali berat @search.score (tertimbang)
hasil vektor satu posisi 1 0.8383955 0,5 0.41919775
hasil vektor dua posisi 5 0.81514114 2.0 1.63028228
Hasil BM25 posisi 10 0.8577363 NA 0.8577363

Posisi dokumen dalam setiap tataan hasil sesuai dengan skor awal, yang ditambahkan untuk membuat skor RRF akhir untuk dokumen tersebut.

Jika Anda menambahkan pembobotan vektor, skor awal disubeksikan ke pengali pembobotan yang meningkatkan atau mengurangi skor. Defaultnya adalah 1.0, yang berarti tidak ada pembobotan dan skor awal yang digunakan apa adanya dalam penilaian RRF. Namun, jika Anda menambahkan berat 0,5, skor berkurang dan hasilnya menjadi kurang penting dalam peringkat gabungan. Sebaliknya, jika Anda menambahkan bobot 2,0, skor menjadi faktor yang lebih besar dalam skor RRF keseluruhan.

Dalam contoh ini, @search.score nilai (tertimbang) diteruskan ke model peringkat RRF.

Jumlah hasil berperingkat dalam respons kueri hibrid

Secara default, jika Anda tidak menggunakan pagination, mesin pencari mengembalikan 50 kecocokan peringkat tertinggi teratas untuk pencarian teks lengkap, dan kecocokan paling mirip k untuk pencarian vektor. Dalam kueri hibrid, top menentukan jumlah hasil dalam respons. Berdasarkan default, 50 kecocokan peringkat tertinggi teratas dari kumpulan hasil terpadu dikembalikan.

Seringkali, mesin pencari menemukan lebih banyak hasil daripada top dan k. Untuk mengembalikan lebih banyak hasil, gunakan parameter tophalaman , , skipdan next. Penomoran adalah cara Anda menentukan jumlah hasil di setiap halaman logis dan menavigasi melalui payload penuh. Anda dapat mengatur maxTextRecallSize ke nilai yang lebih besar (defaultnya adalah 1.000) untuk mengembalikan lebih banyak hasil dari sisi teks kueri hibrid.

Secara default, pencarian teks lengkap tunduk pada batas maksimum 1.000 kecocokan (lihat batas respons API). Setelah 1.000 kecocokan ditemukan, mesin pencari tidak lagi mencari lebih banyak.

Untuk informasi selengkapnya, lihat Cara bekerja dengan hasil pencarian.

Diagram alur kerja penilaian pencarian

Diagram berikut mengilustrasikan kueri hibrid yang memanggil pencarian kata kunci dan vektor, dengan meningkatkan melalui profil penilaian, dan peringkat semantik.

Diagram prafilter.

Kueri yang menghasilkan alur kerja sebelumnya mungkin terlihat seperti ini:

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
   "queryType":"semantic",
   "search":"hello world",
   "searchFields":"field_a, field_b",
   "vectorQueries": [
       {
           "kind":"vector",
           "vector": [1.0, 2.0, 3.0],
           "fields": "field_c, field_d"
       },
       {
           "kind":"vector",
           "vector": [4.0, 5.0, 6.0],
           "fields": "field_d, field_e"
       }
   ],
   "scoringProfile":"my_scoring_profile"
}

Lihat juga