Pencarian Vektor di Azure Cosmos DB untuk NoSQL (pratinjau)
BERLAKU UNTUK: NoSQL
Azure Cosmos DB for NoSQL sekarang menawarkan pengindeksan vektor dan pencarian dalam pratinjau. Fitur ini dirancang untuk menangani vektor dimensi tinggi, memungkinkan pencarian vektor yang efisien dan akurat dalam skala apa pun. Sekarang Anda dapat menyimpan vektor langsung di dokumen bersama data Anda. Ini berarti bahwa setiap dokumen dalam database Anda tidak hanya dapat berisi data bebas skema tradisional, tetapi juga vektor dimensi tinggi sebagai properti dokumen lainnya. Kolokasi data dan vektor ini memungkinkan pengindeksan dan pencarian yang efisien, karena vektor disimpan dalam unit logis yang sama dengan data yang mereka wakili. Ini menyederhanakan manajemen data, arsitektur aplikasi AI, dan efisiensi operasi berbasis vektor.
Azure Cosmos DB for NoSQL menawarkan fleksibilitas yang ditawarkannya dalam memilih metode pengindeksan vektor:
- Pencarian persis tetangga "datar" atau k-terdekat (kadang-kadang disebut brute-force) dapat memberikan 100% pengenalan pengambilan untuk pencarian vektor yang lebih kecil dan berfokus. terutama ketika dikombinasikan dengan filter kueri dan kunci partisi.
- Indeks datar terukur yang mengompresi vektor menggunakan metode kuantisasi berbasis DiskANN untuk efisiensi yang lebih baik dalam pencarian kNN.
- DiskANN, serangkaian algoritma pengindeksan vektor canggih yang dikembangkan oleh Microsoft Research untuk mendukung pencarian vektor akurasi tinggi yang efisien dalam skala apa pun.
Pelajari selengkapnya tentang pengindeksan vektor di sini
Pencarian vektor di Azure Cosmos DB dapat dikombinasikan dengan semua filter dan indeks kueri NoSQL Azure Cosmos DB lainnya yang didukung menggunakan WHERE
klausa. Ini memungkinkan pencarian vektor Anda menjadi data yang paling relevan untuk aplikasi Anda.
Fitur ini meningkatkan kemampuan inti Azure Cosmos DB, membuatnya lebih serbaguna untuk menangani data vektor dan persyaratan pencarian dalam aplikasi AI.
Apa itu penyimpanan vektor?
Penyimpanan vektor atau database vektor adalah database yang dirancang untuk menyimpan dan mengelola penyematan vektor, yang merupakan representasi matematika data dalam ruang dimensi tinggi. Dalam ruang ini, setiap dimensi sesuai dengan fitur data, dan puluhan ribu dimensi mungkin digunakan untuk mewakili data canggih. Posisi vektor dalam ruang ini mewakili karakteristiknya. Kata, frasa, atau seluruh dokumen, dan gambar, audio, dan jenis data lainnya semuanya dapat di-vektorisasi.
Bagaimana cara kerja penyimpanan vektor?
Di penyimpanan vektor, algoritma pencarian vektor digunakan untuk mengindeks dan mengkueri penyematan. Beberapa algoritma pencarian vektor terkenal termasuk Hierarkis Navigable Small World (HNSW), Inverted File (IVF), DiskANN, dll. Pencarian vektor adalah metode yang membantu Anda menemukan item serupa berdasarkan karakteristik datanya daripada dengan kecocokan yang tepat pada bidang properti. Teknik ini berguna dalam aplikasi seperti mencari teks serupa, menemukan gambar terkait, membuat rekomendasi, atau bahkan mendeteksi anomali. Ini digunakan untuk mengkueri penyematan vektor data yang Anda buat dengan menggunakan model pembelajaran mesin dengan menggunakan API penyematan. Contoh API penyematan adalah Azure OpenAI Embeddings atau Hugging Face di Azure. Pencarian vektor mengukur jarak antara vektor data dan vektor kueri Anda. Vektor data yang paling dekat dengan vektor kueri Anda adalah vektor yang ditemukan paling mirip secara semantik.
Dalam Database Vektor Terintegrasi di Azure Cosmos DB untuk NoSQL, penyematan dapat disimpan, diindeks, dan dikueri bersama data asli. Pendekatan ini menghilangkan biaya tambahan untuk mereplikasi data dalam database vektor murni terpisah. Selain itu, arsitektur ini menjaga penyematan vektor dan data asli bersama-sama, yang lebih memfasilitasi operasi data multi-modal, dan memungkinkan konsistensi, skala, dan performa data yang lebih besar.
Mendaftar di Fitur Pratinjau Pencarian Vektor
Pencarian vektor untuk Azure Cosmos DB untuk NoSQL memerlukan pendaftaran fitur pratinjau di halaman Fitur Azure Cosmos DB Anda. Ikuti langkah-langkah di bawah ini untuk mendaftar:
Navigasi ke halaman sumber daya Azure Cosmos DB for NoSQL Anda.
Pilih panel "Fitur" di bawah item menu "Pengaturan".
Pilih untuk "Pencarian Vektor di Azure Cosmos DB for NoSQL".
Baca deskripsi fitur untuk mengonfirmasi bahwa Anda ingin mendaftar dalam pratinjau.
Pilih "Aktifkan" untuk mendaftar di pratinjau.
Catatan
Permintaan pendaftaran akan disetujui secara otomatis, namun mungkin perlu waktu beberapa menit untuk diterapkan.
Catatan
DiskANN tersedia dalam pratinjau terjaga awal dan memerlukan pengisian formulir ini. Anda akan dihubungi oleh anggota tim Azure Cosmos DB saat sumber daya Anda telah di-onboarding untuk menggunakan indeks DiskANN.
Tip
Atau, gunakan Azure CLI untuk memperbarui kemampuan akun Anda untuk mendukung pencarian vektor NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
Kebijakan Vektor Kontainer
Melakukan pencarian vektor dengan Azure Cosmos DB for NoSQL mengharuskan Anda menentukan kebijakan vektor untuk kontainer. Ini memberikan informasi penting bagi mesin database untuk melakukan pencarian kesamaan yang efisien untuk vektor yang ditemukan dalam dokumen kontainer. Ini juga menginformasikan kebijakan pengindeksan vektor informasi yang diperlukan, jika Anda memilih untuk menentukannya. Informasi berikut disertakan dalam kebijakan vektor yang terkandung:
- "path": properti yang berisi vektor (diperlukan).
- "datatype": jenis data properti vektor (default Float32).
- "dimensi": Dimensi atau panjang setiap vektor di jalur. Semua vektor dalam jalur harus memiliki jumlah dimensi yang sama. (default 1536).
- "distanceFunction": Metrik yang digunakan untuk menghitung jarak/kesamaan. Metrik yang didukung adalah:
- kosinus, yang memiliki nilai dari -1 (paling tidak mirip) dengan +1 (paling mirip).
- dotproduct, yang memiliki nilai dari -inf (paling sedikit simialr) ke +inf (paling mirip).
- euclidean, yang memiliki nilai dari 0 (paling mirip) dengan +inf) (paling tidak serupa).
Catatan
Setiap jalur unik dapat memiliki paling banyak satu kebijakan. Namun, beberapa kebijakan dapat ditentukan asalkan semuanya menargetkan jalur yang berbeda.
Kebijakan vektor kontainer dapat dijelaskan sebagai objek JSON. Berikut adalah dua contoh kebijakan vektor kontainer yang valid:
Kebijakan dengan satu jalur vektor
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Kebijakan dengan dua jalur vektor
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"int8",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Kebijakan pengindeksan vektor
Indeks vektor meningkatkan efisiensi saat melakukan pencarian vektor menggunakan VectorDistance
fungsi sistem. Pencarian vektor memiliki latensi yang lebih rendah, throughput yang lebih tinggi, dan konsumsi RU yang lebih sedikit saat menggunakan indeks vektor. Anda dapat menentukan jenis kebijakan indeks vektor berikut:
Tipe | Deskripsi | Dimensi maks |
---|---|---|
flat |
Menyimpan vektor pada indeks yang sama dengan properti terindeks lainnya. | 505 |
quantizedFlat |
Mengukur (mengompresi) vektor sebelum menyimpan pada indeks. Ini dapat meningkatkan latensi dan throughput dengan biaya akurasi dalam jumlah kecil. | 4096 |
diskANN |
Membuat indeks berdasarkan DiskANN untuk perkiraan pencarian yang cepat dan efisien. | 4096 |
Beberapa poin yang perlu diperhatikan:
Jenis
flat
indeks danquantizedFlat
menggunakan indeks Azure Cosmos DB untuk menyimpan dan membaca setiap vektor saat melakukan pencarian vektor. Pencarian vektor denganflat
indeks adalah pencarian brute-force dan menghasilkan akurasi atau pengenalan 100%. Artinya, dijamin untuk menemukan vektor yang paling mirip dalam himpunan data. Namun, ada batasan505
dimensi untuk vektor pada indeks datar.Indeks
quantizedFlat
menyimpan vektor kuantisasi (terkompresi) pada indeks. Pencarian vektor denganquantizedFlat
indeks juga merupakan pencarian brute-force, namun akurasinya mungkin sedikit kurang dari 100% karena vektor diukur sebelum ditambahkan ke indeks. Namun, pencarian vektor denganquantized flat
harus memiliki latensi yang lebih rendah, throughput yang lebih tinggi, dan biaya RU yang lebih rendah daripada pencarian vektor padaflat
indeks. Ini adalah opsi yang baik untuk skenario yang lebih kecil, atau skenario di mana Anda menggunakan filter kueri untuk mempersempit pencarian vektor ke sekumpulan vektor yang relatif kecil.quantizedFlat
harus digunakan ketika setidaknya ada 1.000 vektor dan kurang dari 100.000 vektor dalam kontainer.Indeks
diskANN
adalah indeks terpisah yang didefinisikan khusus untuk vektor yang menggunakan DiskANN, serangkaian algoritma pengindeksan vektor performa tinggi yang dikembangkan oleh Microsoft Research. Indeks DiskANN dapat menawarkan beberapa latensi terendah, throughput tertinggi, dan kueri biaya RU terendah, sambil tetap mempertahankan akurasi tinggi. Namun, karena DiskANN adalah perkiraan indeks tetangga terdekat (ANN), akurasinya bisa lebih rendah dariquantizedFlat
atauflat
. DiskANN tersedia dalam pratinjau terjaga awal dan memerlukan pengisian formulir ini.
Berikut adalah contoh kebijakan indeks vektor yang valid:
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "DiskANN"
}
]
}
Catatan
Indeks Datar yang Dikuantisasi dan DiskANN mengharuskan setidaknya 1.000 vektor dimasukkan. Hal ini untuk memastikan akurasi proses kuantisasi. Jika ada kurang dari 1.000 vektor, pemindaian penuh dijalankan sebagai gantinya, dan akan menyebabkan biaya RU yang lebih tinggi untuk kueri pencarian vektor.
Penting
Saat ini dalam pratinjau pencarian vektor tidak menggunakan jalur berlapis atau karakter kartubebas di jalur kebijakan vektor. Operasi penggantian pada kebijakan vektor saat ini tidak didukung.
Melakukan pencarian vektor dengan kueri menggunakan VectorDistance()
Setelah Anda membuat kontainer dengan kebijakan vektor yang diinginkan, dan menyisipkan data vektor ke dalam kontainer, Anda dapat melakukan pencarian vektor menggunakan fungsi sistem Jarak Vektor dalam kueri. Contoh kueri NoSQL yang memproyeksikan skor kesamaan sebagai alias SimilarityScore
, dan mengurutkan dalam urutan paling mirip dengan yang paling tidak mirip ditunjukkan di bawah ini:
SELECT c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Batas dan batasan saat ini
Pengindeksan dan pencarian vektor di Azure Cosmos DB for NoSQL memiliki beberapa batasan saat dalam tahap awal pratinjau publik.
- Anda dapat menentukan, paling banyak, satu jenis indeks per jalur dalam kebijakan indeks vektor
- Anda dapat menentukan, paling banyak, satu jenis indeks DiskANN per kontainer
- Pengindeksan vektor hanya didukung pada kontainer baru.
- Vektor yang diindeks dengan
flat
jenis indeks dapat mencapai paling banyak 505 dimensi. Vektor yang diindeks denganquantizedFlat
jenis indeks atauDiskANN
dapat mencapai paling banyak 4.096 dimensi. quantizedFlat
menggunakan metode kuantisasi yang sama dengan DiskANN dan tidak dapat dikonfigurasi saat ini.- Database throughput bersama tidak dapat menggunakan fitur pratinjau pencarian vektor saat ini.
- Tingkat penyerapan harus dibatasi saat menggunakan pratinjau awal DiskANN.
Langkah selanjutnya
- DiskANN + Azure Cosmos DB - Microsoft Mechanics Video
- .NET - Cara Mengindeks dan mengkueri data vektor
- Python - Cara Mengindeks dan mengkueri data vektor
- JavaScript - Cara Mengindeks dan mengkueri data vektor
- Java - Cara Mengindeks dan mengkueri data vektor
- Fungsi sistem VectorDistance
- Gambaran umum indeks vektor
- Kebijakan indeks vektor
- Mengelola indeks
- Integrasi:
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk