View a markdown version of this page

Pencarian vektor untuk Amazon DocumentDB - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pencarian vektor untuk Amazon DocumentDB

Pencarian vektor adalah metode yang digunakan dalam pembelajaran mesin untuk menemukan titik data serupa ke titik data tertentu dengan membandingkan representasi vektor mereka menggunakan metrik jarak atau kesamaan. Semakin dekat kedua vektor dalam ruang vektor, semakin mirip item yang mendasarinya dianggap. Teknik ini membantu menangkap makna semantik dari data. Pendekatan ini berguna dalam berbagai aplikasi, seperti sistem rekomendasi, pemrosesan bahasa alami, dan pengenalan gambar.

Pencarian vektor untuk Amazon DocumentDB menggabungkan fleksibilitas dan kemampuan query yang kaya dari database JSON-based dokumen dengan kekuatan pencarian vektor. Jika Anda ingin menggunakan data Amazon DocumentDB yang ada atau struktur data dokumen yang fleksibel untuk membangun pembelajaran mesin dan kasus penggunaan AI generatif, seperti pengalaman pencarian semantik, rekomendasi produk, personalisasi, chatbot, deteksi penipuan, dan deteksi anomali, maka pencarian vektor untuk Amazon DocumentDB adalah pilihan ideal untuk Anda. Pencarian vektor tersedia di cluster berbasis instance Amazon DocumentDB 5.0.

Menyisipkan vektor

Untuk menyisipkan vektor ke database Amazon DocumentDB Anda, Anda dapat menggunakan metode penyisipan yang ada:

Contoh

Dalam contoh berikut, kumpulan lima dokumen dalam database pengujian dibuat. Setiap dokumen mencakup dua bidang: nama produk dan penyematan vektor yang sesuai.

db.collection.insertMany([ {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]}, {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]}, {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]}, {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]}, {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]} ]);

Membuat indeks vektor

Amazon DocumentDB mendukung pengindeksan Hierarchical Navigable Small World (HNSW) dan Inverted File dengan metode pengindeksan Kompresi Datar (IVFFLAT). Indeks IVFFLAT memisahkan vektor ke dalam daftar dan kemudian mencari subset yang dipilih dari daftar yang paling dekat dengan vektor kueri. Di sisi lain, indeks HNSW mengatur data vektor menjadi grafik berlapis-lapis. Meskipun HNSW memiliki waktu pembuatan yang lebih lambat dibandingkan dengan IVFFlat, ia memberikan kinerja kueri dan ingatan yang lebih baik. Tidak seperti IVFFlat, HNSW tidak memiliki langkah pelatihan yang terlibat, memungkinkan indeks dihasilkan tanpa beban data awal. Untuk sebagian besar kasus penggunaan, gunakan tipe indeks HNSW untuk pencarian vektor.

Jika Anda tidak membuat indeks vektor, Amazon DocumentDB melakukan pencarian tetangga terdekat yang tepat, memastikan ingatan yang sempurna. Namun, dalam skenario produksi, kecepatan sangat penting. Gunakan indeks vektor, yang mungkin menukar beberapa ingatan untuk peningkatan kecepatan. Penting untuk dicatat bahwa menambahkan indeks vektor dapat menyebabkan hasil kueri yang berbeda.

Templat

Anda dapat menggunakan berikut createIndex atau runCommand templat untuk membangun indeks vektor pada bidang vektor:

Using createIndex

Dalam driver tertentu, seperti mongosh dan Java, menggunakan vectorOptions parameter di dapat meng createIndex akibatkan kesalahan. Dalam kasus seperti itu, gunakanrunCommand:

db.collection.createIndex( { "<vectorField>": "vector" }, { "name": "<indexName>", "vectorOptions": { "type": " <hnsw> | <ivfflat> ", "dimensions": <number_of_dimensions>, "similarity": " <euclidean> | <cosine> | <dotProduct> ", "lists": <number_of_lists> [applicable for IVFFlat], "m": <max number of connections> [applicable for HNSW], "efConstruction": <size of the dynamic list for index build> [applicable for HNSW] } } );
Using runCommand

Dalam driver tertentu, seperti mongosh dan Java, menggunakan vectorOptions parameter di dapat meng createIndex akibatkan kesalahan. Dalam kasus seperti itu, gunakanrunCommand:

db.runCommand( { "createIndexes": "<collection>", "indexes": [{ key: { "<vectorField>": "vector" }, vectorOptions: { type: " <hnsw> | <ivfflat> ", dimensions: <number of dimensions>, similarity: " <euclidean> | <cosine> | <dotProduct> ", lists: <number_of_lists> [applicable for IVFFlat], m: <max number of connections> [applicable for HNSW], efConstruction: <size of the dynamic list for index build> [applicable for HNSW] }, name: "myIndex" }] } );
Parameter Persyaratan Jenis data Deskripsi Nilai (s)

name

opsional

string

Menentukan nama indeks.

Alfanumerik

type

opsional

Menentukan jenis indeks.

Didukung: hnsw atau ivfflat

Default: HNSW (patch mesin 3.0.4574 dan seterusnya)

dimensions

wajib

integer

Menentukan jumlah dimensi dalam data vektor.

Maksimal 2.000 dimensi.

similarity

wajib

string

Menentukan metrik jarak yang digunakan untuk perhitungan kesamaan.

  • euclidean

  • cosine

  • dotProduct

lists

diperlukan untuk IVFFLat

integer

Menentukan jumlah cluster yang digunakan indeks IVFFLAT untuk mengelompokkan data vektor. Pengaturan yang disarankan adalah # documents/1000 untuk hingga 1 juta dokumen dan sqrt(# of documents) untuk lebih dari 1 juta dokumen.

Minimum: 1

Maksimum: Lihat daftar per tabel jenis instans di Fitur dan keterbatasan bawah ini.

m

opsional

integer

Menentukan jumlah maksimum koneksi untuk indeks HNSW

Default: 16

Rentang [2.100]

efConstruction

opsional

integer

Menentukan ukuran daftar kandidat dinamis untuk membangun grafik untuk indeks HNSW.

efConstructionharus lebih besar dari atau sama dengan (2 * m)

Default: 64

Rentang [4.1000]

Penting bagi Anda untuk mengatur nilai sub-parameter seperti lists untuk IVFFLat dan m dan efConstruction untuk HNSW dengan tepat karena akan mempengaruhi, waktu pembuatan accuracy/recall, dan kinerja pencarian Anda. Nilai daftar yang lebih tinggi meningkatkan kecepatan query karena mengurangi jumlah vektor di setiap daftar, menghasilkan wilayah yang lebih kecil. Namun, ukuran wilayah yang lebih kecil dapat menyebabkan lebih banyak kesalahan penarikan, menghasilkan akurasi yang lebih rendah. Untuk HNSW, meningkatkan nilai m dan efConstruction meningkatkan akurasi, tetapi juga meningkatkan waktu dan ukuran pembuatan indeks. Lihat contoh berikut:

Contoh

HNSW
db.collection.createIndex( { "vectorEmbedding": "vector" }, { "name": "myIndex", "vectorOptions": { "type": "hnsw", "dimensions": 3, "similarity": "euclidean", "m": 16, "efConstruction": 64 } } );
IVFFlat
db.collection.createIndex( { "vectorEmbedding": "vector" }, { "name": "myIndex", "vectorOptions": { "type": "ivfflat", "dimensions": 3, "similarity": "euclidean", "lists":1 } } )

Mendapatkan definisi indeks

Anda dapat melihat detail indeks Anda, termasuk indeks vektor, menggunakan perintah: getIndexes

Contoh

db.collection.getIndexes()

Contoh keluaran

[ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.collection" }, { "v" : 4, "key" : { "vectorEmbedding" : "vector" }, "name" : "myIndex", "vectorOptions" : { "type" : "ivfflat", "dimensions" : 3, "similarity" : "euclidean", "lists" : 1 }, "ns" : "test.collection" } ]

Mengkueri vektor

Amazon DocumentDB mendukung dua operator pencarian vektor untuk kueri vektor:

Operator pencarian vektor klasik

Gunakan template berikut untuk menanyakan vektor:

db.collection.aggregate([ { $search: { "vectorSearch": { "vector": <query vector>, "path": "<vectorField>", "similarity": "<distance metric>", "k": <number of results>, "probes":<number of probes> [applicable for IVFFlat], "efSearch":<size of the dynamic list during search> [applicable for HNSW] } } } ]);
Parameter Persyaratan Tipe Deskripsi Nilai (s)

vectorSearch

wajib

operator

Digunakan di dalam perintah $search untuk menanyakan vektor.

vector

wajib

array

Menunjukkan vektor query yang akan digunakan untuk menemukan vektor serupa.

path

wajib

string

Mendefinisikan nama bidang vektor.

k

wajib

integer

Menentukan jumlah hasil yang dikembalikan oleh pencarian.

similarity

wajib

string

Menentukan metrik jarak yang digunakan untuk perhitungan kesamaan.

  • euclidean

  • cosine

  • dotProduct

probes

opsional

integer

Jumlah cluster yang ingin Anda periksa oleh pencarian vektor. Nilai yang lebih tinggi memberikan daya ingat yang lebih baik dengan mengorbankan kecepatan. Ini dapat diatur ke jumlah daftar untuk pencarian tetangga terdekat yang tepat (di mana perencana tidak akan menggunakan indeks). Pengaturan yang disarankan untuk memulai penyetelan halus adalahsqrt(# of lists).

Default: 1

efSearch

opsional

integer

Menentukan ukuran daftar kandidat dinamis yang digunakan indeks HNSW selama pencarian. Nilai yang lebih tinggi efSearch memberikan daya ingat yang lebih baik dengan mengorbankan kecepatan.

Standar: 40

Rentang [1.1000]

Penting untuk menyempurnakan nilai efSearch (HNSW) atau probes (IVFFLAT) untuk mencapai kinerja dan akurasi yang Anda inginkan. Lihat contoh operasi berikut:

HNSW
db.collection.aggregate([ { $search: { "vectorSearch": { "vector": [0.2, 0.5, 0.8], "path": "vectorEmbedding", "similarity": "euclidean", "k": 2, "efSearch": 40 } } } ]);
IVFFlat
db.collection.aggregate([ { $search: { "vectorSearch": { "vector": [0.2, 0.5, 0.8], "path": "vectorEmbedding", "similarity": "euclidean", "k": 2, "probes": 1 } } } ]);

Contoh keluaran

Keluaran dari operasi ini terlihat seperti berikut ini:

{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] } { "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }

Operator $VectorSearch (tersedia di Amazon DocumentDB 8.0 dan seterusnya)

Gunakan template berikut untuk menanyakan vektor:

db.collection.aggregate([ { "$vectorSearch": { "exact": true | false, "index": "<index-name>" [supports only HNSW index], "limit": <number-of-results> [same as k], "path": "<vector field-to-search>", "queryVector": <array-of-numbers>, "numCandidates": <number-of-candidates> [same as efSearch], } }])

Fitur dan keterbatasan

Kompatibilitas versi

  • Pencarian vektor untuk Amazon DocumentDB hanya tersedia di Amazon DocumentDB 5.0+ cluster berbasis instance.

Vektor

  • Amazon DocumentDB dapat mengindeks vektor hingga 2.000 dimensi. Namun, hingga 16.000 dimensi dapat disimpan tanpa indeks.

Indeks

  • Untuk pembuatan indeks IVFFLAT, pengaturan yang disarankan untuk parameter daftar adalah jumlah hingga 1M dokumen dan documents/1000 sqrt(# of documents) untuk lebih dari 1 juta dokumen. Karena batas memori kerja, Amazon DocumentDB mendukung nilai maksimum tertentu dari parameter daftar tergantung pada jumlah dimensi. Untuk referensi Anda, tabel berikut menyediakan nilai maksimum parameter daftar untuk vektor dimensi 500, 1000, dan 2.000:

    Tipe instans Daftar dengan 500 dimensi Daftar dengan 1000 dimensi Daftar dengan 2000 dimensi

    t3.med

    372

    257

    150

    r5.l

    915

    741

    511

    r5.xl

    1.393

    1.196

    901

    r5.2xl

    5.460

    5.230

    4.788

    r5.4xl

    7.842

    7.599

    7.138

    r5.8xl

    11.220

    10.974

    10.498

    r5.12xl

    13.774

    13.526

    13.044

    r5.16xl

    15.943

    15.694

    15.208

    r5.24xl

    19.585

    19.335

    18.845

  • Tidak ada opsi indeks lain seperticompound, sparse atau partial didukung dengan indeks vektor.

  • Pembuatan indeks paralel tidak didukung untuk indeks HNSW di Amazon DocumentDB 5.0.

Kueri vektor

  • Untuk permintaan pencarian vektor, penting untuk menyempurnakan parameter seperti probes atau efSearch untuk hasil yang optimal. Semakin tinggi nilai probes atau efSearch parameter, semakin tinggi penarikan dan kecepatan yang lebih rendah. Pengaturan yang disarankan untuk mulai menyempurnakan parameter probe adalahsqrt(# of lists).

Praktik terbaik

Pelajari praktik terbaik untuk bekerja dengan pencarian vektor di Amazon DocumentDB. Bagian ini terus diperbarui saat praktik terbaik baru diidentifikasi.

  • Pembuatan indeks File Terbalik dengan Kompresi Datar (IVFFLAT) melibatkan pengelompokan dan mengatur titik data berdasarkan kesamaan. Agar indeks lebih efektif, muat beberapa data sebelum membuat indeks.

  • Untuk permintaan pencarian vektor, penting untuk menyempurnakan parameter seperti probes atau efSearch untuk hasil yang optimal. Semakin tinggi nilai efSearch parameter probes atau, semakin tinggi penarikan dan lebih rendah kecepatannya. Pengaturan yang disarankan untuk memulai penyetelan probes parameter adalahsqrt(lists).

Sumber daya