Pemeringkatan ulang
Milvus memungkinkan kemampuan pencarian hibrida menggunakan API hybrid_search(), yang menggabungkan strategi perangkingan ulang yang canggih untuk menyaring hasil pencarian dari beberapa contoh AnnSearchRequest
. Topik ini mencakup proses perankingan ulang, menjelaskan pentingnya dan implementasi strategi perankingan ulang yang berbeda di Milvus.
Gambaran Umum
Gambar berikut mengilustrasikan eksekusi pencarian hybrid di Milvus dan menyoroti peran perangkingan ulang dalam prosesnya.
Perangkingan ulang dalam pencarian hybrid adalah langkah penting yang mengkonsolidasikan hasil dari beberapa bidang vektor, memastikan hasil akhir relevan dan diprioritaskan secara akurat. Saat ini, Milvus menawarkan strategi perankingan ulang ini:
WeightedRanker
: Pendekatan ini menggabungkan hasil dengan menghitung rata-rata tertimbang skor (atau jarak vektor) dari pencarian vektor yang berbeda. Pendekatan ini memberikan bobot berdasarkan signifikansi setiap bidang vektor.RRFRanker
: Strategi ini menggabungkan hasil berdasarkan peringkat mereka di kolom vektor yang berbeda.
Penilaian Tertimbang (WeightedRanker)
Strategi WeightedRanker
memberikan bobot yang berbeda untuk hasil dari setiap rute pencarian vektor berdasarkan signifikansi setiap bidang vektor. Strategi pemeringkatan ulang ini diterapkan ketika signifikansi setiap bidang vektor bervariasi, sehingga Anda dapat menekankan bidang vektor tertentu di atas bidang vektor lainnya dengan memberikan bobot yang lebih tinggi. Sebagai contoh, dalam pencarian multimodal, deskripsi teks mungkin dianggap lebih penting daripada distribusi warna pada gambar.
Proses dasar WeightedRanker adalah sebagai berikut:
Kumpulkan Skor Selama Pengambilan: Mengumpulkan hasil dan skornya dari berbagai rute pengambilan vektor.
Normalisasi Skor: Menormalkan skor dari setiap rute ke rentang [0,1], di mana nilai yang mendekati 1 menunjukkan relevansi yang lebih tinggi. Normalisasi ini sangat penting karena distribusi skor bervariasi dengan jenis metrik yang berbeda. Sebagai contoh, jarak untuk IP berkisar dari [-∞,+∞], sedangkan jarak untuk L2 berkisar dari [0,+∞]. Milvus menggunakan fungsi
arctan
, yang mengubah nilai ke rentang [0,1] untuk memberikan dasar standar untuk berbagai jenis metrik.Alokasi Bobot: Menetapkan bobot
w𝑖
untuk setiap rute pengambilan vektor. Pengguna menentukan bobot, yang mencerminkan keandalan, akurasi, atau metrik terkait lainnya dari sumber data. Setiap bobot berkisar dari [0,1].Penggabungan Skor: Menghitung rata-rata tertimbang dari skor yang dinormalisasi untuk mendapatkan skor akhir. Hasilnya kemudian diberi peringkat berdasarkan skor tertinggi hingga terendah untuk menghasilkan hasil akhir yang diurutkan.
perangking-tertimbang
Untuk menggunakan strategi ini, terapkan sebuah contoh WeightedRanker
dan tetapkan nilai bobot dengan memasukkan sejumlah argumen numerik.
from pymilvus import WeightedRanker
# Use WeightedRanker to combine results with specified weights
rerank = WeightedRanker(0.8, 0.8, 0.7)
Perhatikan bahwa:
Setiap nilai bobot berkisar dari 0 (paling tidak penting) hingga 1 (paling penting), yang memengaruhi skor agregat akhir.
Jumlah total nilai bobot yang disediakan di
WeightedRanker
harus sama dengan jumlah instanceAnnSearchRequest
yang telah Anda buat sebelumnya.Perlu dicatat bahwa karena pengukuran yang berbeda dari jenis metrik yang berbeda, kami menormalkan jarak hasil penarikan sehingga berada pada interval [0,1], di mana 0 berarti berbeda dan 1 berarti serupa. Skor akhir adalah jumlah dari nilai bobot dan jarak.
Reciprocal Rank Fusion (RRFRanker)
RRF adalah metode fusi data yang menggabungkan daftar peringkat berdasarkan kebalikan dari peringkat mereka. Ini adalah cara yang efektif untuk menyeimbangkan pengaruh setiap bidang vektor, terutama ketika tidak ada prioritas yang jelas tentang kepentingan. Strategi ini biasanya digunakan ketika Anda ingin memberikan pertimbangan yang sama pada semua bidang vektor atau ketika ada ketidakpastian tentang kepentingan relatif setiap bidang.
Proses dasar RRF adalah sebagai berikut:
Kumpulkan Peringkat Selama Pengambilan: Pengambil di beberapa bidang vektor mengambil dan mengurutkan hasil.
Penggabungan Peringkat: Algoritme RRF menimbang dan menggabungkan peringkat dari setiap retriever. Rumusnya adalah sebagai berikut:
rrf-ranker
Di sini, 𝑁 mewakili jumlah rute pengambilan yang berbeda, rank𝑖(𝑑) adalah posisi peringkat dokumen yang diambil 𝑑 oleh retriever ke-𝑖, dan 𝑘 adalah parameter perataan, biasanya ditetapkan ke 60.
Pemeringkatan Komprehensif: Beri peringkat ulang hasil yang diambil berdasarkan skor gabungan untuk menghasilkan hasil akhir.
Untuk menggunakan strategi ini, gunakan contoh RRFRanker
.
from pymilvus import RRFRanker
# Default k value is 60
ranker = RRFRanker()
# Or specify k value
ranker = RRFRanker(k=100)
RRF memungkinkan menyeimbangkan pengaruh di seluruh bidang tanpa menentukan bobot secara eksplisit. Kecocokan teratas yang disepakati oleh beberapa bidang akan diprioritaskan dalam peringkat akhir.