🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda
  • Panduan Pengguna
  • Home
  • Docs
  • Panduan Pengguna

  • Indeks

  • Indeks Vektor

  • IVF_FLAT

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 ini menunjukkan cara kerjanya:

ivf-flat-1.png ivf-flat-1.png

Metode pengindeksan ini mempercepat proses pencarian, tetapi memiliki kelemahan potensial: kandidat yang ditemukan sebagai yang terdekat dengan penyematan kueri mungkin bukan yang terdekat. Hal ini dapat terjadi jika embedding terdekat dengan embedding kueri berada di klaster yang berbeda dengan 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 dan bukan 1, kita mendapatkan hasil sebagai berikut:

ivf-flat-2.png ivf-flat-2.png

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 ke IVF_FLAT.

  • metric_type: Metode yang digunakan untuk menghitung jarak antara vektor. Nilai yang didukung termasuk COSINE, L2, dan IP. 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
    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.

ParameterDeskripsiRentang NilaiSaran Penyetelan
nlistJumlah cluster yang akan dibuat menggunakan algoritma k-means selama pembuatan indeks Setiap cluster, 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 Bilangan bulat
Rentang: [1, 65536]
Nilai default: 128
Nilai nlist yang lebih besar meningkatkan daya ingat dengan membuat klaster yang lebih halus, tetapi meningkatkan waktu pembuatan indeks. Optimalkan berdasarkan ukuran set data dan sumber daya yang tersedia, dalam kebanyakan kasus, kami menyarankan Anda menetapkan nilai dalam kisaran ini: [32, 4096].

Parameter pencarian khusus indeks

Tabel berikut mencantumkan parameter yang dapat dikonfigurasi di search_params.params saat melakukan pencarian di indeks.

ParameterDeskripsiRentang NilaiSaran Penyetelan
nprobeJumlah 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: 8
Menambah nilai ini akan meningkatkan daya ingat namun dapat memperlambat pencarian Tetapkan nprobe secara proporsional dengan nlist untuk menyeimbangkan kecepatan dan akurasi.
Pada kebanyakan kasus, kami sarankan Anda menetapkan nilai dalam kisaran ini: [1, nlist].

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?