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.

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.

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 of prefilters.

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"
}

Baca juga