Pilih Strategi Pencarian EmbeddingList
Strategi pencarian EmbeddingList menentukan cara Milvus membangun indeks kandidat perkiraan untuk pencarian EmbeddingList. Strategi default adalah " tokenann". Anda dapat beralih ke " muvera " atau " lemur " jika daftar embedding sangat besar, TokenANN terlalu mahal, atau representasi baris yang dipelajari/terkompresi lebih sesuai. Hasil akhir tetap dihasilkan oleh MaxSim reranking saat opsi " emb_list_rerank " diaktifkan.
Mengapa Strategi Pencarian Ada
Daftar Embedding dirancang untuk baris yang berisi beberapa vektor, seperti embedding token dalam dokumen teks, embedding patch dalam dokumen visual, atau embedding klip dalam video. Alih-alih membandingkan satu vektor kueri dengan satu vektor baris, MaxSim membandingkan daftar embedding kueri dengan daftar embedding dokumen dan mengagregasi kecocokan terbaik.
Hal ini memberikan kemampuan representasi yang lebih baik, tetapi MaxSim yang tepat membutuhkan biaya yang mahal dalam skala besar. Pencarian MaxSim dengan metode brute-force perlu membandingkan vektor kueri dengan setiap vektor di setiap baris kandidat. Hal ini biasanya terlalu lambat untuk pencarian produksi.
| ### Masalah - Setiap baris mungkin berisi banyak vektor. - MaxSim yang tepat pada semua baris memakan sumber daya. - Ukuran indeks dan latensi pencarian dapat meningkat dengan cepat. | ### Strategi - Gunakan metode pengambilan tahap pertama yang mendekati. - Ambil lebih banyak kandidat daripada topK yang diminta. - Urutkan ulang kandidat dengan MaxSim yang tepat. |
|---|
Dalam hal ini, " emb_list_strategy " pada dasarnya merupakan strategi pembuatan indeks dan pengambilan kandidat. Strategi ini dikonfigurasi saat membangun indeks, dan menentukan bagaimana himpunan kandidat ANN tahap pertama dihasilkan. Parameter waktu pencarian seperti " retrieval_ann_ratio " dan " emb_list_rerank " kemudian mengontrol berapa banyak kandidat yang diambil serta apakah penataan ulang MaxSim diterapkan.
Strategi yang Tersedia
| Strategi | Unit pengambilan kandidat | Masalah yang diselesaikan | Kesesuaian terbaik | Pertimbangan utama |
|---|---|---|---|---|
tokenann | Vektor individual di dalam setiap baris | Menjaga vektor asli dan menghindari kehilangan akibat kompresi. | Pencarian yang mengutamakan kualitas, daftar embedding pendek atau sedang, embedding dengan daya diskriminasi tinggi. | Indeks yang lebih besar dan biaya pencarian kandidat yang lebih tinggi. |
muvera | Satu vektor terenkode per baris | Mengompres daftar embedding menjadi representasi FDE berdimensi tetap tanpa pelatihan. | Dokumen yang lebih panjang, embedding dengan tingkat diskriminasi tinggi, kasus di mana TokenANN terlalu berat. | Proyeksi acak menimbulkan kerugian akibat aproksimasi; dimensi FDE memengaruhi latensi. |
lemur | Satu vektor yang dipelajari per baris | Mempelajari kompresi khusus korpus dari daftar embedding ke vektor baris berdimensi tetap. | Embedding dengan tingkat diskriminasi rendah, pencarian dokumen multimodal atau visual, daftar embedding yang besar. | Membutuhkan pelatihan dan dapat dipengaruhi oleh distribusi korpus serta bias panjang dokumen. |
TokenANN
tokenann mengindeks setiap vektor dalam daftar embedding. Selama pencarian, setiap vektor kueri melakukan pencarian ANN, vektor yang cocok dikumpulkan kembali ke barisnya, dan kandidat baris yang dihasilkan diurutkan ulang dengan MaxSim.
Gunakan TokenANN ketika kualitas menjadi prioritas utama. Ini adalah aproksimasi terdekat dengan perhitungan MaxSim asli karena menjaga semua vektor tetap tersedia dalam indeks tahap pertama.
Cocok untuk: potongan teks pendek, baris dengan jumlah vektor kecil atau sedang, pemisahan semantik tingkat token yang kuat, baseline yang sensitif terhadap kualitas.
Kurang cocok: dokumen yang sangat panjang, halaman visual dengan ribuan vektor patch, batasan memori atau latensi yang ketat.
Perilaku tingkat elemen: TokenANN dapat mengambil kandidat dari vektor individual sebelum menggabungkannya kembali ke baris. Hasil pencarian EmbeddingList akhir tetap berada pada tingkat baris setelah penilaian MaxSim.
MUVERA
muvera mengkodekan setiap daftar embedding menjadi vektor berdimensi tetap menggunakan proyeksi acak. Hal ini mengubah pencarian tahap pertama menjadi pencarian vektor tingkat baris standar. Kandidat kemudian diurutkan ulang dengan MaxSim.
Gunakan MUVERA ketika TokenANN terlalu berat tetapi Anda tidak ingin melalui tahap pelatihan. Ini merupakan jalan tengah yang praktis antara kualitas dan biaya.
Cocok untuk: dokumen teks panjang, ruang embedding dengan tingkat diskriminasi tinggi, beban kerja yang membutuhkan ukuran indeks lebih kecil daripada TokenANN.
Kurang cocok: ruang embedding dengan tingkat diskriminasi rendah atau kasus di mana representasi FDE menjadi terlalu berdimensi tinggi untuk anggaran latensi.
Parameter penting:
muvera_num_projections,muvera_num_repeats, danmuvera_seed.
LEMUR
lemur melatih model untuk mengompres setiap daftar embedding menjadi representasi berdimensi tetap. Pencarian ANN tahap pertama dijalankan pada vektor tingkat baris yang telah dipelajari, dan kandidat diurutkan ulang menggunakan MaxSim.
Gunakan LEMUR jika kompresi yang dipelajari sebanding dengan biaya pelatihan. Metode ini dapat bekerja dengan baik untuk ruang embedding dengan diskriminasi rendah dan pencarian multimodal, tetapi harus divalidasi terhadap korpus target karena dapat sensitif terhadap distribusi panjang dokumen.
Cocok untuk: pencarian dokumen visual, embedding patch multimodal, ruang embedding dengan tingkat diskriminasi rendah, daftar embedding besar di mana TokenANN tidak praktis.
Kurang cocok: korpus yang sering berubah, embedding dengan tingkat diskriminasi tinggi dan distribusi panjang dokumen yang sangat tidak seimbang, serta beban kerja di mana biaya pelatihan tidak dapat diterima.
Parameter penting:
lemur_hidden_dim,lemur_num_train_samples,lemur_num_epochs,lemur_batch_size,lemur_learning_rate,lemur_seed, danlemur_num_layers.
Perilaku dan Konfigurasi Default
Strategi EmbeddingList default di Knowhere adalah tokenann. Jika Anda tidak menentukan emb_list_strategy, Knowhere akan menggunakan TokenANN. Pengaturan default saat pencarian mencakup retrieval_ann_ratio=3.0 dan emb_list_rerank=true.
Item Konfigurasi Berdasarkan Strategi
Tabel berikut mencantumkan item konfigurasi khusus strategi. Di Milvus, item saat pembuatan biasanya disertakan dalam peta ` params ` saat membuat indeks. Jika Anda memerlukan nilai default di sisi server, nilai tersebut harus didefinisikan dalam berkas konfigurasi Milvus di bawah bagian ` knowhere `.
| Strategi | Item konfigurasi | Tahap | Default | Kapan harus mengubahnya |
|---|---|---|---|---|
tokenann | emb_list_strategy="tokenann" | Pembuatan indeks | tokenann | Gunakan secara eksplisit jika Anda menginginkan perilaku pengindeksan vektor elemen default atau saat DiskANN digunakan. |
muvera | emb_list_strategy="muvera" | Pembuatan indeks | tokenann | Gunakan saat Anda menginginkan pengambilan data yang dikodekan pada tingkat baris tanpa pelatihan. |
muvera | muvera_num_projections | Pembuatan indeks | 4 | Mengontrol jumlah proyeksi SimHash. Nilai yang lebih tinggi akan membuat lebih banyak bucket dan dapat meningkatkan kualitas pengkodean, tetapi juga meningkatkan dimensi yang dikodekan. |
muvera | muvera_num_repeats | Pembuatan indeks | 7 | Mengontrol berapa banyak pengkodean FDE independen yang digabungkan. Nilai yang lebih tinggi mungkin meningkatkan ketahanan tetapi meningkatkan biaya indeks/pencarian. |
muvera | muvera_seed | Pembuatan indeks | 42 | Ditetapkan untuk proyeksi acak yang dapat direproduksi, terutama dalam pengujian dan perbandingan benchmark. |
lemur | emb_list_strategy="lemur" | Pembuatan indeks | tokenann | Gunakan ketika kompresi tingkat baris yang dipelajari diperkirakan akan bekerja lebih baik daripada proyeksi acak tetap. |
lemur | lemur_hidden_dim | Pembuatan indeks | 256 | Mengontrol ukuran representasi terkompresi. Tingkatkan untuk kapasitas yang lebih besar; kurangi untuk penggunaan memori yang lebih rendah dan pengambilan data yang lebih cepat. |
lemur | lemur_num_train_samples | Pembuatan indeks | 20000 | Tingkatkan jika korpusnya beragam dan kompresi yang dipelajari tidak cukup memadai; kurangi hanya untuk pengujian kecil atau pembuatan indeks yang lebih cepat. |
lemur | lemur_num_epochs | Pembuatan indeks | 50 | Tingkatkan jika pelatihan belum konvergen; kurangi jika waktu pembuatan menjadi kendala utama. |
lemur | lemur_batch_size | Pembuatan indeks | 512 | Sesuaikan untuk throughput pelatihan dan penggunaan memori. |
lemur | lemur_learning_rate | Pembuatan indeks | 0.001 | Sesuaikan saat pelatihan tidak stabil atau konvergensi terlalu lambat. |
lemur | lemur_seed | Pembuatan indeks | 42 | Atur untuk menjalankan pelatihan yang dapat direproduksi. |
lemur | lemur_num_layers | Pembuatan indeks | 2 | Tingkatkan hanya jika korpus memerlukan ekstraktor fitur yang lebih ekspresif dan Anda mampu menanggung biaya pelatihan tambahan. |
| Semua strategi | retrieval_ann_ratio | Pencarian | 3.0 | Tingkatkan untuk mendapatkan lebih banyak kandidat tahap pertama dan meningkatkan recall; kurangi untuk mengurangi latensi. |
| Semua strategi | emb_list_rerank | Pencarian | true | Biarkan tetap diaktifkan untuk penataan ulang peringkat MaxSim. Nonaktifkan hanya untuk eksperimen terkontrol di mana kualitas ANN tahap pertama diukur secara langsung. |
Konfigurasikan Strategi di Milvus
Di Milvus, strategi diteruskan sebagai parameter indeks saat membuat indeks pada bidang EmbeddingList, seperti sub-bidang vektor StructArray.
index_params = client.prepare_index_params()
index_params.add_index(
field_name="clips[clip_embedding]",
index_type="HNSW",
metric_type="MAX_SIM_COSINE",
params={
"M": 16,
"efConstruction": 96,
"emb_list_strategy": "muvera",
"muvera_num_projections": 4,
"muvera_num_repeats": 7,
"muvera_seed": 42,
},
)
Untuk LEMUR, berikan parameter pelatihan LEMUR dalam peta " params " yang sama.
params={
"M": 16,
"efConstruction": 96,
"emb_list_strategy": "lemur",
"lemur_hidden_dim": 256,
"lemur_num_train_samples": 20000,
"lemur_num_epochs": 50,
"lemur_batch_size": 512,
"lemur_learning_rate": 0.001,
"lemur_seed": 42,
"lemur_num_layers": 2,
}
Konfigurasi Pengaturan Default Sisi Server di Milvus
Milvus juga dapat mengisi parameter indeks dari ` milvus.yaml`. Bagian yang relevan adalah ` knowhere`. Parameter disusun berdasarkan jenis indeks dan tahap, menggunakan pola ` knowhere.<INDEX_TYPE>.<stage>.<parameter>`. Parameter indeks yang disediakan pengguna memiliki prioritas lebih tinggi daripada nilai default ini.
knowhere:
enable: true
HNSW:
build:
emb_list_strategy: muvera
muvera_num_projections: 4
muvera_num_repeats: 7
muvera_seed: 42
search:
retrieval_ann_ratio: 3.0
emb_list_rerank: true
Gunakan parameter per-indeks untuk pemilihan strategi. Pengaturan default dalam berkas konfigurasi Milvus berlaku secara luas untuk indeks dengan jenis dan tahap yang sama. Gunakan parameter create_index jika koleksi atau bidang yang berbeda memerlukan strategi EmbeddingList yang berbeda.
Konfigurasikan Pengambilan Kandidat pada Saat Pencarian
Strategi ini menentukan cara indeks dibangun. Pada saat pencarian, gunakan retrieval_ann_ratio untuk mengontrol berapa banyak kandidat tahap pertama yang diambil sebelum pemeringkatan ulang MaxSim. Nilai yang lebih tinggi biasanya meningkatkan recall tetapi meningkatkan latensi.
results = client.search(
collection_name=collection_name,
data=[query_embedding_list],
anns_field="clips[clip_embedding]",
search_params={
"metric_type": "MAX_SIM_COSINE",
"params": {
"ef": 64,
"retrieval_ann_ratio": 3.0,
"emb_list_rerank": True,
},
},
limit=10,
)
| Parameter | Tahap | Default | Arti |
|---|---|---|---|
emb_list_strategy | Pembuatan indeks | tokenann | Memilih cara kandidat EmbeddingList diindeks dan diambil. |
retrieval_ann_ratio | Pencarian | 3.0 | Faktor ekspansi kandidat untuk putaran ANN pertama. |
emb_list_rerank | Pencarian | true | Apakah kandidat yang diambil akan diurutkan ulang menggunakan MaxSim. |
Catatan kompatibilitas: MUVERA dan LEMUR saat ini mendukung data fp32 di Knowhere. DiskANN hanya mendukung EmbeddingList dengan strategi TokenANN. Jika Anda menggunakan tipe vektor non-fp32 atau DiskANN, pastikan strategi tersebut didukung sebelum mengubah pengaturan default.
Cara Memilih Strategi
Tidak ada strategi yang secara universal terbaik. Pilihlah berdasarkan panjang daftar embedding, diskriminasi ruang embedding, anggaran latensi, ukuran indeks, dan apakah Anda dapat melakukan langkah pelatihan.
| Pertanyaan | Sinyal | Titik awal yang direkomendasikan |
|---|---|---|
| Apakah Anda memerlukan baseline berkualitas tinggi? | Anda ingin mengukur perkiraan praktis terbaik sebelum mengoptimalkan biaya. | tokenann |
| Apakah jumlah vektor pada setiap baris sedikit atau sedang? | Setiap baris memiliki sejumlah kecil vektor token, patch, atau klip. | tokenann |
| Apakah TokenANN terlalu besar atau terlalu lambat? | Ukuran indeks atau latensi pengambilan tahap pertama menjadi titik leher botol. | muvera |
| Apakah Anda ingin kompresi tanpa pelatihan? | Anda memerlukan model operasional yang lebih sederhana dan pengkodean yang dapat direproduksi. | muvera |
| Apakah ruang embedding memiliki tingkat diskriminasi yang rendah? | Kandidat ANN tingkat token berisik, dan proyeksi acak tidak mempertahankan sinyal yang cukup. | lemur |
| Apakah beban kerjanya bersifat visual atau multimodal? | Baris berisi banyak vektor patch, dan TokenANN terlalu mahal. | lemur atau muvera |
| Apakah panjang dokumen sangat tidak merata? | Beberapa baris berisi vektor yang jauh lebih banyak daripada yang lain. | Mulailah dengan muvera; validasi lemur dengan cermat. |
Alur Kerja Evaluasi yang Disarankan
Mulailah dengan
tokenannsebagai patokan kualitas jika ukuran dataset memungkinkannya.Jalankan kueri yang sama dengan
muveradan bandingkan recall, nDCG, latensi, dan ukuran indeks.Cobalah
lemurjika daftar embedding besar, ruang embedding berisik, atau beban kerjanya bersifat visual atau multimodal.Sesuaikan nilai `
retrieval_ann_ratio` sebelum mengubah terlalu banyak parameter saat proses pembuatan. Tingkatkan nilainya jika recall rendah; kurangi nilainya jika latensi terlalu tinggi.Selalu lakukan validasi pada kueri yang representatif dan distribusi panjang dokumen. Strategi yang berhasil pada teks pendek mungkin tidak berhasil pada dokumen visual atau korpus long-tail.
### Utamakan Kualitas Mulailah dengan ` tokenann`. Gunakan sebagai patokan untuk kualitas aproksimasi MaxSim. | ### Seimbang Cobalah muvera saat Anda membutuhkan biaya yang lebih rendah tanpa perlu menambahkan pipeline pelatihan. | ### Terkompresi Cobalah lemur jika kompresi tingkat baris yang dipelajari kemungkinan akan mengungguli proyeksi acak tetap. |
|---|
Referensi yang Digunakan untuk Draf Ini
Pengujian Milvus untuk
emb_list_strategy,retrieval_ann_ratio, danemb_list_rerank.Penanganan berkas konfigurasi Milvus untuk nilai default indeks sisi server di bawah bagian "
knowhere".Definisi parameter Knowhere untuk nilai default dan nama strategi yang didukung.
Pemeriksaan kompatibilitas Knowhere untuk dukungan MUVERA/LEMUR yang hanya mendukung fp32 dan dukungan DiskANN yang hanya mendukung TokenANN.
Catatan evaluasi internal yang membandingkan TokenANN, MUVERA, dan LEMUR untuk pengambilan kandidat MaxSim.
Catatan penerbitan: Sebelum mempublikasikan secara eksternal, pastikan parameter mana yang secara resmi didukung dalam rilis Milvus yang dituju dan apakah produk ingin mengekspos semua parameter Knowhere tingkat rendah atau hanya subset yang lebih kecil dan terdokumentasi.