IVF_FLAT
Indeks IVF_FLAT adalah algoritme pengindeksan yang dapat meningkatkan kinerja pencarian untuk vektor floating-point.
Jenis indeks ini ideal untuk set data berskala besar yang memerlukan respons kueri cepat dan akurasi tinggi, terutama ketika pengelompokan set data Anda dapat mengurangi ruang pencarian dan memori yang cukup tersedia untuk menyimpan data klaster.
Gambaran Umum
Istilah IVF_FLAT adalah singkatan dari Inverted File Flat, yang merangkum pendekatan berlapis ganda untuk mengindeks dan mencari vektor floating-point:
File Terbalik (Inverted File (IVF)): Mengacu pada pengelompokan ruang vektor ke dalam wilayah yang dapat dikelola menggunakan pengelompokan k-means. Setiap klaster diwakili oleh sebuah pusat, yang berfungsi sebagai titik referensi untuk vektor-vektor di dalamnya.
Flat: Menunjukkan bahwa di dalam setiap klaster, vektor disimpan dalam bentuk aslinya (struktur datar), tanpa kompresi atau kuantisasi apa pun, untuk perhitungan jarak yang tepat.
Gambar berikut menunjukkan cara kerjanya:
Alur Kerja IVF FLAT
Metode pengindeksan ini mempercepat proses pencarian, tetapi memiliki kelemahan potensial: kandidat yang ditemukan sebagai yang terdekat dengan embedding kueri mungkin bukan yang terdekat. Hal ini dapat terjadi jika embedding terdekat dengan embedding kueri berada di klaster yang berbeda dari klaster yang dipilih berdasarkan centroid terdekat (lihat visualisasi di bawah).
Untuk mengatasi masalah ini, IVF_FLAT menyediakan dua hiperparameter yang dapat kita setel:
nlist: Menentukan jumlah partisi yang akan dibuat menggunakan algoritma k-means.nprobe: Menentukan jumlah partisi yang akan dipertimbangkan selama pencarian kandidat.
Sekarang jika kita mengatur nprobe menjadi 3, bukan 1, kita mendapatkan hasil sebagai berikut:
Alur Kerja IVF FLAT 2
Dengan meningkatkan nilai nprobe, Anda dapat menyertakan lebih banyak partisi dalam pencarian, yang dapat membantu memastikan bahwa penyematan terdekat dengan kueri tidak terlewatkan, meskipun berada di partisi yang berbeda. Namun, hal ini akan meningkatkan waktu pencarian, karena lebih banyak kandidat yang perlu dievaluasi. Untuk informasi lebih lanjut tentang penyetelan parameter indeks, lihat Parameter indeks.
Membangun indeks
Untuk membangun indeks IVF_FLAT 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_FLAT", # 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 for the index
} # Index building params
)
Dalam konfigurasi ini:
index_type: Jenis indeks yang akan dibangun. Dalam contoh ini, tetapkan nilainya keIVF_FLAT.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 kluster untuk membagi set data.
Untuk mempelajari lebih lanjut parameter pembuatan yang tersedia untuk indeks
IVF_FLAT, 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": 10, # Number of clusters to search
}
}
res = MilvusClient.search(
collection_name="your_collection_name", # Collection name
anns_field="vector_field",
data=[[0.1, 0.2, 0.3, 0.4, 0.5]], # Query vector
limit=3, # TopK results to return
search_params=search_params
)
Dalam konfigurasi ini:
params: Opsi konfigurasi tambahan untuk pencarian pada indeks.nprobe: Jumlah kluster yang akan dicari.
Untuk mempelajari lebih lanjut parameter pencarian yang tersedia untuk indeks
IVF_FLAT, 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 cluster yang akan dibuat menggunakan algoritme k-means selama pembuatan indeks. Setiap klaster, yang diwakili oleh centroid, menyimpan daftar vektor. Meningkatkan parameter ini akan mengurangi jumlah vektor di setiap klaster, menciptakan partisi yang lebih kecil dan lebih terfokus. |
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 |
|---|---|---|---|
|
Jumlah klaster untuk mencari kandidat. Nilai yang lebih tinggi memungkinkan lebih banyak klaster untuk dicari, meningkatkan daya ingat dengan memperluas cakupan pencarian, tetapi dengan biaya peningkatan latensi kueri. |
Jenis: Bilangan bulat Rentang: [1, nlist] Nilai default: |
Meningkatkan nilai ini akan meningkatkan daya ingat tetapi dapat memperlambat pencarian. Tetapkan Pada kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini: [1, nlist]. |