Bagikan melalui


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:

  1. Navigasi ke halaman sumber daya Azure Cosmos DB for NoSQL Anda.

  2. Pilih panel "Fitur" di bawah item menu "Pengaturan".

  3. Pilih untuk "Pencarian Vektor di Azure Cosmos DB for NoSQL".

  4. Baca deskripsi fitur untuk mengonfirmasi bahwa Anda ingin mendaftar dalam pratinjau.

  5. 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 dan quantizedFlat menggunakan indeks Azure Cosmos DB untuk menyimpan dan membaca setiap vektor saat melakukan pencarian vektor. Pencarian vektor dengan flat indeks adalah pencarian brute-force dan menghasilkan akurasi atau pengenalan 100%. Artinya, dijamin untuk menemukan vektor yang paling mirip dalam himpunan data. Namun, ada batasan 505 dimensi untuk vektor pada indeks datar.

  • Indeks quantizedFlat menyimpan vektor kuantisasi (terkompresi) pada indeks. Pencarian vektor dengan quantizedFlat indeks juga merupakan pencarian brute-force, namun akurasinya mungkin sedikit kurang dari 100% karena vektor diukur sebelum ditambahkan ke indeks. Namun, pencarian vektor dengan quantized flat harus memiliki latensi yang lebih rendah, throughput yang lebih tinggi, dan biaya RU yang lebih rendah daripada pencarian vektor pada flat 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 dari quantizedFlat atau flat. 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 dengan quantizedFlat jenis indeks atau DiskANN 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