IVF_SQ8
Indeks IVF_SQ8 adalah algoritme pengindeksan berbasis kuantisasi yang dirancang untuk mengatasi tantangan pencarian kemiripan berskala besar. Jenis indeks ini menghasilkan pencarian yang lebih cepat dengan jejak memori yang jauh lebih kecil dibandingkan dengan metode pencarian yang lengkap.
Gambaran Umum
Indeks IVF_SQ8 dibangun di atas dua komponen utama:
Inverted File (IVF): Mengatur data ke dalam kelompok-kelompok, memungkinkan algoritme pencarian hanya berfokus pada subset vektor yang paling relevan.
Kuantisasi Skalar (SQ8): Mengompresi vektor ke bentuk yang lebih ringkas, secara drastis mengurangi penggunaan memori sekaligus mempertahankan presisi yang cukup untuk perhitungan kemiripan yang cepat.
IVF
IVF seperti membuat indeks dalam sebuah buku. Alih-alih memindai setiap halaman (atau, dalam kasus kami, setiap vektor), Anda mencari kata kunci tertentu (kelompok) dalam indeks untuk menemukan halaman (vektor) yang relevan dengan cepat. Dalam skenario kami, vektor dikelompokkan ke dalam kluster, dan algoritme akan mencari dalam beberapa kluster yang dekat dengan vektor kueri.
Berikut cara kerjanya:
Pengelompokan: Kumpulan data vektor Anda dibagi ke dalam sejumlah klaster tertentu, menggunakan algoritme pengelompokan seperti k-means. Setiap klaster memiliki centroid (vektor representatif untuk klaster).
Penugasan: Setiap vektor ditugaskan ke klaster yang memiliki centroid yang paling dekat dengannya.
Indeks Terbalik: Sebuah indeks dibuat, memetakan setiap centroid klaster ke daftar vektor yang ditugaskan ke klaster tersebut.
Pencarian: Saat Anda mencari tetangga terdekat, algoritme pencarian membandingkan vektor kueri Anda dengan centroid klaster dan memilih klaster yang paling menjanjikan. Pencarian kemudian dipersempit menjadi vektor dalam klaster yang dipilih.
Untuk mempelajari lebih lanjut tentang detail teknisnya, lihat IVF_FLAT.
SQ8
Kuantisasi Skalar (SQ) adalah teknik yang digunakan untuk mengurangi ukuran vektor berdimensi tinggi dengan mengganti nilainya dengan representasi yang lebih kecil dan lebih ringkas. Varian SQ8 menggunakan bilangan bulat 8-bit, bukan bilangan floating point 32-bit yang biasa digunakan untuk menyimpan setiap nilai dimensi vektor. Hal ini sangat mengurangi jumlah memori yang diperlukan untuk menyimpan data.
Berikut cara kerja SQ8:
Identifikasi Rentang: Pertama, identifikasi nilai minimum dan maksimum dalam vektor. Rentang ini mendefinisikan batas-batas untuk kuantisasi.
Normalisasi: Menormalkan nilai vektor ke kisaran antara 0 dan 1 dengan menggunakan rumus:
Hal ini memastikan semua nilai dipetakan secara proporsional dalam rentang standar, mempersiapkannya untuk kompresi.
Kompresi 8-Bit: Kalikan nilai yang dinormalisasi dengan 255 (nilai maksimum untuk bilangan bulat 8-bit) dan bulatkan hasilnya ke bilangan bulat terdekat. Hal ini secara efektif memampatkan setiap nilai ke dalam representasi 8-bit.
Misalkan Anda memiliki nilai dimensi 1,2, dengan nilai minimum -1,7 dan nilai maksimum 2,3. Gambar berikut menunjukkan bagaimana SQ8 diterapkan untuk mengubah nilai float32 menjadi bilangan bulat int8.
Ivf Sq8
IVF + SQ8
Indeks IVF_SQ8 menggabungkan IVF dan SQ8 untuk melakukan pencarian kemiripan secara efisien:
IVF mempersempit cakupan pencarian: Kumpulan data dibagi menjadi beberapa kluster, dan ketika kueri dikeluarkan, IVF pertama-tama membandingkan kueri dengan pusat kluster, memilih kluster yang paling relevan.
SQ8 mempercepat penghitungan jarak: Di dalam cluster yang dipilih, SQ8 memampatkan vektor menjadi bilangan bulat 8-bit, sehingga mengurangi penggunaan memori dan mempercepat perhitungan jarak.
Dengan menggunakan IVF untuk memfokuskan pencarian dan SQ8 untuk mempercepat komputasi, IVF_SQ8 mencapai waktu pencarian yang cepat dan efisiensi memori.
Membangun indeks
Untuk membangun indeks IVF_SQ8 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="IVF_SQ8", # 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={
"nlist": 64, # Number of clusters to create using the k-means algorithm during index building
} # Index building params
)
Dalam konfigurasi ini:
index_type: Jenis indeks yang akan dibangun. Dalam contoh ini, tetapkan nilainya keIVF_SQ8.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.nlist: Jumlah cluster yang akan dibuat menggunakan algoritme k-means selama pembuatan indeks.
Untuk mempelajari lebih lanjut parameter pembuatan yang tersedia untuk indeks
IVF_SQ8, 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": {
"nprobe": 8, # Number of clusters to search for candidates
}
}
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.nprobe: Jumlah cluster untuk mencari kandidat.
Untuk mempelajari lebih lanjut parameter pencarian yang tersedia untuk indeks
IVF_SQ8, 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 |
|
|---|---|---|---|---|
IVF |
|
Jumlah klaster yang akan dibuat menggunakan algoritme k-means selama pembuatan indeks. |
Jenis: Rentang bilangan bulat: [1, 65536] Nilai default: |
Nilai |
Parameter pencarian khusus indeks
Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di search_params.params saat melakukan pencarian di indeks.
Parameter |
Deskripsi |
Rentang Nilai |
Saran Penyetelan |
|
|---|---|---|---|---|
IVF |
|
Jumlah cluster untuk mencari kandidat. |
Tipe Bilangan bulat Rentang: [1, nlist] Nilai default: |
Nilai yang lebih tinggi memungkinkan lebih banyak klaster untuk dicari, meningkatkan daya ingat dengan memperluas cakupan pencarian, namun dengan biaya peningkatan latensi kueri. Tetapkan Pada kebanyakan kasus, kami menyarankan Anda menetapkan nilai dalam kisaran ini: [1, nlist]. |