SCANN
Didukung oleh pustaka ScaNN dari Google, indeks SCANN di Milvus dirancang untuk mengatasi tantangan penskalaan pencarian kemiripan vektor, dengan menyeimbangkan antara kecepatan dan akurasi, bahkan pada dataset besar yang secara tradisional akan menjadi tantangan bagi sebagian besar algoritme pencarian.
Gambaran Umum
ScaNN dibangun untuk memecahkan salah satu tantangan terbesar dalam pencarian vektor: secara efisien menemukan vektor yang paling relevan dalam ruang dimensi tinggi, bahkan ketika set data tumbuh lebih besar dan lebih kompleks. Arsitekturnya memecah proses pencarian vektor menjadi beberapa tahap yang berbeda:
Memindai
Pemilahan: Membagi set data menjadi beberapa kelompok. Metode ini mempersempit ruang pencarian dengan hanya berfokus pada subset data yang relevan daripada memindai seluruh dataset, sehingga menghemat waktu dan sumber daya pemrosesan. ScaNN sering menggunakan algoritme pengelompokan, seperti k-means, untuk mengidentifikasi klaster, yang memungkinkannya melakukan pencarian kemiripan dengan lebih efisien.
Kuantisasi: ScaNN menerapkan proses kuantisasi yang dikenal sebagai kuantisasi vektor anisotropik setelah melakukan partisi. Kuantisasi tradisional berfokus pada meminimalkan jarak keseluruhan antara vektor asli dan vektor yang dikompresi, yang tidak ideal untuk tugas-tugas seperti Maximum Inner Product Search (MIPS), di mana kemiripan ditentukan oleh hasil kali dalam vektor, bukan jarak langsung. Sebaliknya, kuantisasi anisotropik memprioritaskan pemeliharaan komponen paralel di antara vektor, atau bagian yang paling penting untuk menghitung inner product yang akurat. Pendekatan ini memungkinkan ScaNN untuk mempertahankan akurasi MIPS yang tinggi dengan menyelaraskan vektor yang dikompresi dengan kueri secara hati-hati, sehingga memungkinkan pencarian kemiripan yang lebih cepat dan lebih tepat.
Pemeringkatan ulang: Fase pemeringkatan ulang adalah langkah terakhir, di mana ScaNN menyempurnakan hasil pencarian dari tahap partisi dan kuantisasi. Pemeringkatan ulang ini menerapkan perhitungan inner product yang tepat pada vektor kandidat teratas, untuk memastikan hasil akhir yang sangat akurat. Pemeringkatan ulang sangat penting dalam mesin rekomendasi berkecepatan tinggi atau aplikasi pencarian gambar di mana pemfilteran dan pengelompokan awal berfungsi sebagai lapisan kasar, dan tahap akhir memastikan bahwa hanya hasil yang paling relevan yang dikembalikan kepada pengguna.
Kinerja SCANN dikendalikan oleh dua parameter utama yang memungkinkan Anda menyempurnakan keseimbangan antara kecepatan dan akurasi:
with_raw_data: Mengontrol apakah data vektor asli disimpan bersama dengan representasi yang dikuantisasi. Mengaktifkan parameter ini akan meningkatkan akurasi selama pemeringkatan ulang, tetapi meningkatkan kebutuhan penyimpanan.reorder_k: Menentukan berapa banyak kandidat yang disempurnakan selama fase pemeringkatan ulang akhir. Nilai yang lebih tinggi meningkatkan akurasi tetapi meningkatkan latensi pencarian.
Untuk panduan terperinci tentang cara mengoptimalkan parameter ini untuk kasus penggunaan spesifik Anda, lihat Parameter indeks.
Membangun indeks
Untuk membangun indeks SCANN pada bidang vektor di Milvus, gunakan metode add_index(), tentukan index_type, metric_type, dan parameter tambahan untuk indeks.
from pymilvus import MilvusClient
# Prepare index building params
index_params = MilvusClient.prepare_index_params()
index_params.add_index(
field_name="your_vector_field_name", # Name of the vector field to be indexed
index_type="SCANN", # Type of the index to create
index_name="vector_index", # Name of the index to create
metric_type="L2", # Metric type used to measure similarity
params={
"with_raw_data": True, # Whether to hold raw data
} # Index building params
)
Dalam konfigurasi ini:
index_type: Jenis indeks yang akan dibangun. Dalam contoh ini, tetapkan nilainya keSCANN.metric_type: Metode yang digunakan untuk menghitung jarak antara vektor. Nilai yang didukung termasukCOSINE,L2, danIP. Untuk detailnya, lihat Jenis Metrik.params: Opsi konfigurasi tambahan untuk membangun indeks.with_raw_data: Apakah akan menyimpan data vektor asli di samping representasi yang dikuantisasi.
Untuk mempelajari lebih lanjut parameter pembuatan yang tersedia untuk indeks
SCANN, lihat Parameter pembuatan indeks.
Setelah parameter indeks dikonfigurasi, Anda dapat membuat indeks dengan menggunakan metode create_index() secara langsung atau mengoper parameter indeks dalam metode create_collection. Untuk detailnya, lihat Membuat Koleksi.
Mencari di indeks
Setelah indeks dibuat dan entitas dimasukkan, Anda dapat melakukan pencarian kemiripan pada indeks.
search_params = {
"params": {
"reorder_k": 10, # Number of candidates to refine
"nprobe": 8 # Number of clusters to search
}
}
res = MilvusClient.search(
collection_name="your_collection_name", # Collection name
anns_field="vector_field", # Vector field name
data=[[0.1, 0.2, 0.3, 0.4, 0.5]], # Query vector
limit=10, # TopK results to return
search_params=search_params
)
Dalam konfigurasi ini:
params: Opsi konfigurasi tambahan untuk pencarian pada indeks.reorder_k: Jumlah kandidat yang akan disaring selama fase pemeringkatan ulang.nprobe: Jumlah kluster yang akan dicari.
Untuk mempelajari lebih lanjut parameter pencarian yang tersedia untuk indeks
SCANN, lihat Parameter pencarian khusus indeks.
Parameter indeks
Bagian ini memberikan gambaran umum tentang parameter yang digunakan untuk membangun indeks dan melakukan pencarian pada indeks.
Parameter pembangunan indeks
Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di params saat membangun indeks.
Parameter |
Deskripsi |
Rentang Nilai |
Saran Penyetelan |
|---|---|---|---|
|
Jumlah unit cluster |
[1, 65536] |
Nlist yang lebih tinggi meningkatkan efisiensi pemangkasan dan biasanya mempercepat pencarian kasar, tetapi partisi dapat menjadi terlalu kecil, yang dapat mengurangi penarikan; nlist yang lebih rendah memindai cluster yang lebih besar, meningkatkan penarikan tetapi memperlambat pencarian. |
|
Apakah akan menyimpan data vektor asli bersama dengan representasi terkuantisasi. Jika diaktifkan, ini memungkinkan penghitungan kemiripan yang lebih akurat selama fase pemeringkatan ulang dengan menggunakan vektor asli, bukan perkiraan terkuantisasi. |
Jenis: Boolean Rentang Nilai default: |
Setel ke Atur ke Direkomendasikan: Gunakan |
Parameter pencarian khusus indeks
Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di search_params.params saat melakukan pencarian pada indeks.
Parameter |
Deskripsi |
Rentang Nilai |
Saran Penyetelan |
|---|---|---|---|
|
Mengontrol jumlah vektor kandidat yang disempurnakan selama tahap pemeringkatan ulang. Parameter ini menentukan berapa banyak kandidat teratas dari tahap pemartisian dan kuantisasi awal yang dievaluasi ulang menggunakan perhitungan kemiripan yang lebih tepat. |
Tipe Bilangan bulat Rentang: [1, int_max] Nilai default: Tidak ada |
Pertimbangkan untuk meningkatkan Pertimbangkan untuk mengurangi Dalam kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini:[batas, batas * 5]. |
|
Jumlah cluster untuk mencari kandidat. |
Jenis Bilangan bulat Rentang: [1, nlist] Nilai default: |
Nilai yang lebih tinggi memungkinkan lebih banyak klaster untuk dicari, meningkatkan daya ingat dengan memperluas cakupan pencarian, tetapi dengan biaya peningkatan latensi kueri. Tetapkan Pada kebanyakan kasus, kami menyarankan Anda menetapkan nilai dalam kisaran ini: [1, nlist]. |