Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Selama eksekusi kueri vektor, mesin pencari mencari vektor serupa untuk menemukan kandidat terbaik untuk dikembalikan dalam hasil pencarian. Tergantung pada cara Anda mengindeks konten vektor, pencarian kecocokan yang relevan lengkap atau dibatasi ke tetangga terdekat untuk pemrosesan yang lebih cepat. Ketika kandidat ditemukan, metrik kesamaan digunakan untuk menilai setiap hasil berdasarkan tingkat kemiripan.
Artikel ini menjelaskan algoritma yang digunakan untuk menemukan kecocokan yang relevan dan metrik kesamaan yang digunakan untuk penilaian. Ini juga menawarkan tips untuk meningkatkan relevansi jika hasil pencarian tidak memenuhi harapan.
Algoritma yang digunakan dalam pencarian vektor
Algoritma pencarian vektor meliputi:
- Exhaustive K-Nearest Neighbors (KNN), yang melakukan pemindaian menyeluruh secara brute-force terhadap seluruh ruang vektor.
- Hierarchical Navigable Small World (HNSW), yang melakukan pencarian Tetangga Terdekat Sebagai Perkiraan (ANN).
Hanya bidang vektor yang ditandai sebagai searchable dalam indeks atau searchFields dalam kueri yang digunakan untuk pencarian dan penilaian.
Tentang KNN lengkap
KNN lengkap menghitung jarak antara semua pasangan titik data dan menemukan tetangga terdekat yang tepat k untuk titik kueri. Karena algoritma tidak memerlukan akses acak titik data yang cepat, KNN tidak menggunakan kuota ukuran indeks vektor . Namun, ini menyediakan kelompok global tetangga terdekat.
KNN Exhaustif memerlukan banyak sumber daya komputasi, jadi gunakan untuk himpunan data kecil hingga menengah atau ketika kebutuhan akan presisi melebihi kebutuhan akan performa kueri. Kasus penggunaan lain adalah membangun himpunan data untuk mengevaluasi pengenalan algoritma ANN, karena KNN lengkap dapat digunakan untuk membangun kumpulan kebenaran dasar tetangga terdekat.
Tentang HNSW
HNSW adalah algoritma ANN yang dioptimalkan untuk aplikasi latensi rendah dan pengingatan tinggi dengan distribusi data yang tidak diketahui atau berubah. Selama pengindeksan, HNSW membuat struktur data tambahan yang mengatur titik data ke dalam grafik hierarkis. Selama eksekusi kueri, HNSW menavigasi melalui grafik ini untuk menemukan kecocokan yang paling relevan, memungkinkan pencarian tetangga terdekat yang efisien.
HNSW memerlukan semua titik data berada dalam memori untuk akses acak cepat, yang menggunakan kuota penyimpanan ukuran indeks vektor. Desain ini menyeimbangkan akurasi pencarian dengan efisiensi komputasi dan membuat HNSW cocok untuk sebagian besar skenario, terutama saat mencari himpunan data yang lebih besar.
HNSW menawarkan beberapa parameter konfigurasi yang dapat disesuaikan untuk mengoptimalkan throughput, latensi, dan pengenalan untuk aplikasi pencarian Anda. Misalnya, bidang yang menentukan HNSW juga mendukung KNN lengkap menggunakan parameter permintaan kueri "exhaustive": true. Namun, bidang yang diindeks untuk exhaustiveKnn tidak mendukung kueri HNSW karena struktur data tambahan yang diperlukan untuk memungkinkan pencarian efisien tidak tersedia.
Tentang ANN
ANN adalah kelas algoritma untuk menemukan kecocokan di ruang vektor. Kelas algoritma ini menggunakan struktur data atau metode pemartisian data yang berbeda untuk mengurangi ruang pencarian dan mempercepat pemrosesan kueri secara signifikan.
Algoritma ANN mengorbankan sebagian akurasi tetapi menawarkan pengambilan yang lebih cepat dan dapat diskalakan dari estimasi tetangga terdekat, sehingga ideal untuk menyeimbangkan akurasi dan efisiensi dalam aplikasi pengambilan informasi masa kini. Anda dapat menyesuaikan parameter algoritma Anda untuk menyempurnakan persyaratan pengenalan, latensi, memori, dan jejak disk aplikasi pencarian Anda.
Azure AI Search menggunakan HNSW untuk algoritma ANN-nya.
Cara kerja pencarian tetangga terdekat
Kueri vektor dijalankan terhadap ruang penyematan yang terdiri dari vektor yang dihasilkan dari model penyematan yang sama. Umumnya, nilai input dalam permintaan kueri dimasukkan ke dalam model pembelajaran mesin yang sama yang menghasilkan penyematan dalam indeks vektor. Outputnya adalah vektor dalam ruang penyematan yang sama. Karena vektor serupa diklusterkan bersama-sama, menemukan kecocokan setara dengan menemukan vektor yang paling dekat dengan vektor kueri, dan mengembalikan dokumen terkait sebagai hasil pencarian.
Misalnya, jika permintaan kueri adalah tentang hotel, model memetakan kueri ke vektor yang ada di suatu tempat di kluster vektor yang mewakili dokumen tentang hotel. Mengidentifikasi vektor mana yang paling mirip dengan kueri, berdasarkan metrik kesamaan, menentukan dokumen mana yang paling relevan.
Ketika bidang vektor diindeks untuk KNN lengkap, kueri dijalankan terhadap "semua tetangga". Untuk bidang yang diindeks untuk HNSW, mesin pencari menggunakan grafik HNSW untuk mencari subset simpul dalam indeks vektor.
Membuat grafik HNSW
Selama pengindeksan, layanan pencarian membangun grafik HNSW. Tujuan pengindeksan vektor baru ke dalam grafik HNSW adalah untuk menambahkannya ke struktur grafik dengan cara yang mendukung pencarian tetangga terdekat yang efisien. Langkah-langkah berikut meringkas prosesnya:
Inisialisasi: Mulailah dengan grafik HNSW kosong atau, jika bukan indeks baru, grafik HNSW yang ada.
Titik masuk: Ini adalah tingkat atas grafik hierarkis dan berfungsi sebagai titik awal untuk pengindeksan.
Menambahkan ke grafik: Tingkat hierarkis yang berbeda mewakili granularitas grafik yang berbeda, dengan tingkat yang lebih tinggi menjadi lebih global, dan tingkat yang lebih rendah menjadi lebih terperinci. Setiap simpul dalam grafik mewakili titik vektor.
Setiap simpul terhubung ke
mtetangga yang berada di dekatnya. Ini adalah parameter .mParameter
efConstructionmengatur jumlah titik data yang dianggap sebagai koneksi kandidat. Daftar dinamis ini membentuk kumpulan titik terdekat dalam grafik yang ada untuk dipertimbangkan algoritma. Nilai yang lebih tinggiefConstructionmengakibatkan lebih banyak simpul dipertimbangkan, yang sering menyebabkan lingkungan lokal yang lebih padat untuk setiap vektor.Koneksi ini menggunakan kesamaan
metricyang dikonfigurasi untuk menentukan jarak. Beberapa koneksi adalah koneksi "jarak jauh" yang terhubung di berbagai tingkat hierarkis, membuat pintasan dalam grafik yang meningkatkan efisiensi pencarian.
Pemangkasan dan pengoptimalan grafik: Ini dapat terjadi setelah mengindeks semua vektor, dan meningkatkan kemampuan navigasi dan efisiensi grafik HNSW.
Menavigasi grafik HNSW pada waktu kueri
Kueri vektor menavigasi struktur grafik hierarkis untuk memindai kecocokan. Langkah-langkah berikut meringkas prosesnya:
Inisialisasi: Algoritma memulai pencarian di tingkat atas grafik hierarkis. Titik masuk ini berisi sekumpulan vektor yang berfungsi sebagai titik awal untuk pencarian.
Traversal: Selanjutnya, melintasi grafik tingkat demi tingkat, menavigasi dari tingkat atas ke tingkat yang lebih rendah. Ini memilih node kandidat yang lebih dekat dengan vektor kueri berdasarkan metrik jarak yang dikonfigurasi, seperti kesamaan kosinus.
Pemangkasan: Untuk meningkatkan efisiensi, algoritma memangkas ruang pencarian hanya dengan mempertimbangkan simpul yang cenderung berisi tetangga terdekat. Ini mempertahankan antrean prioritas kandidat potensial dan memperbaruinya saat pencarian berlangsung. Panjang antrean ini dikonfigurasi oleh parameter
efSearch.Penyempurnaan: Saat algoritma bergerak ke tingkat yang lebih rendah yang lebih terperinci, HNSW mempertimbangkan lebih banyak tetangga di sekitar pencarian. Pertimbangan ini memungkinkan sekumpulan vektor kandidat disempurnakan, meningkatkan akurasi.
Penyelesaian: Pencarian selesai ketika jumlah tetangga terdekat yang diinginkan diidentifikasi, atau ketika kriteria penghentian lainnya terpenuhi. Parameter
kquery-time mengatur jumlah tetangga terdekat yang diinginkan ini.
Metrik kesamaan yang digunakan untuk mengukur kemiripan
Algoritma menemukan vektor kandidat untuk mengevaluasi kesamaan. Untuk melakukan tugas ini, perhitungan metrik kesamaan membandingkan vektor kandidat dengan vektor kueri dan mengukur kesamaan. Algoritma melacak set terurut dari vektor-vektor yang paling mirip yang ditemukannya, yang membentuk set hasil berperingkat ketika algoritma selesai.
| Metrik | Deskripsi |
|---|---|
cosine |
Metrik ini mengukur sudut antara dua vektor dan tidak terpengaruh oleh panjang vektor yang berbeda. Secara matematis, ia menghitung sudut antara dua vektor. Cosine adalah metrik kesamaan yang digunakan oleh model penyematan Azure OpenAI, jadi jika Anda menggunakan Azure OpenAI, tentukan cosine dalam konfigurasi vektor. |
dotProduct |
Metrik ini mengukur panjang setiap pasangan dua vektor dan sudut di antara keduanya. Secara matematis, ia menghitung produk besar vektor dan sudut di antara mereka. Untuk vektor yang dinormalisasi, metrik ini identik dengan kesamaan cosine , tetapi sedikit lebih berkinerja. |
euclidean |
(juga dikenal sebagai l2 norm) Metrik ini mengukur panjang perbedaan vektor antara dua vektor. Secara matematis, ini menghitung jarak Euclidean antara dua vektor, yang merupakan norma l2 dari perbedaan kedua vektor. |
Catatan
Jika Anda menjalankan dua kueri vektor atau lebih secara paralel, atau jika Anda melakukan pencarian hibrid yang menggabungkan kueri vektor dan teks dalam permintaan yang sama, Reciprocal Rank Fusion (RRF) digunakan untuk menilai hasil pencarian akhir.
Skor dalam hasil pencarian vektor
Sistem menghitung dan menetapkan skor untuk setiap kecocokan. Hasil kecocokan tertinggi ditampilkan sebagai k hasil. Properti @search.score berisi skor. Tabel berikut ini memperlihatkan rentang di mana skor berada.
| Metode pencarian | Pengaturan | Metrik penilaian | Rentang |
|---|---|---|---|
| pencarian vektor | @search.score |
Kosinus | 0.333 - 1.00 |
Untuk metrik cosine, @search.score yang dihitung bukanlah nilai kosinus antara vektor kueri dan vektor dokumen. Sebaliknya, Azure AI Search menerapkan transformasi sehingga fungsi skor menurun secara monoton. Nilai skor selalu berkurang saat kesamaan menjadi lebih buruk. Transformasi ini memastikan bahwa skor pencarian dapat digunakan untuk tujuan peringkat.
Ada beberapa nuansa dengan skor kesamaan:
- Kesamaan kosinus didefinisikan sebagai kosinus sudut antara dua vektor.
- Jarak kosinus didefinisikan sebagai
1 - cosine_similarity.
Untuk membuat fungsi yang menurun secara monoton, didefinisikan @search.score sebagai 1 / (1 + cosine_distance).
Jika Anda memerlukan nilai kosinus alih-alih nilai sintetis, gunakan rumus untuk mengonversi skor pencarian kembali ke jarak kosinus:
double ScoreToSimilarity(double score)
{
double cosineDistance = (1 - score) / score;
return -cosineDistance + 1;
}
Memiliki nilai kosinus asli dapat berguna dalam solusi kustom yang menyiapkan ambang batas untuk memangkas hasil hasil berkualitas rendah.
Tips untuk penyetelan relevansi
Jika Anda tidak mendapatkan hasil yang relevan, coba ubah konfigurasi kueri. Kueri vektor tidak memiliki fitur penyetelan tertentu, seperti profil penilaian atau bidang atau peningkatan istilah:
Coba ukuran potongan dan pengaturan overlap yang berbeda. Tingkatkan ukuran gugus dan pastikan ada cukup tumpang tindih untuk menjaga konteks atau kelangsungan antar gugus.
Untuk HNSW, cobalah berbagai tingkat
efConstructionuntuk mengubah komposisi internal grafik kedekatan. Nilai defaultnya adalah 400. Rentangnya adalah 100 hingga 1.000.Tingkatkan
khasil untuk mengirim lebih banyak hasil pencarian ke model obrolan jika Anda menggunakannya.Coba kueri hibrid dengan peringkat semantik. Dalam pengujian tolok ukur, kombinasi ini secara konsisten menghasilkan hasil yang paling relevan.