Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Database vektor menyimpan dan mengelola data dalam bentuk vektor, yang merupakan array numerik titik data.
Penggunaan vektor memungkinkan kueri dan analisis yang kompleks, karena vektor dapat dibandingkan dan dianalisis menggunakan teknik lanjutan seperti pencarian kesamaan vektor, kuantisasi, dan pengklusteran. Database tradisional tidak cocok untuk menangani data dimensi tinggi yang menjadi semakin umum dalam analitik data. Namun, database vektor dirancang untuk menangani data dimensi tinggi, seperti teks, gambar, dan audio, dengan mewakilinya sebagai vektor. Database vektor berguna untuk tugas seperti pembelajaran mesin, pemrosesan bahasa alami, dan pengenalan gambar, di mana tujuannya adalah untuk mengidentifikasi pola atau kesamaan dalam himpunan data besar.
Artikel ini memberikan beberapa latar belakang tentang database vektor dan menjelaskan secara konseptual bagaimana Anda dapat menggunakan Eventhouse sebagai database vektor dalam Real-Time Intelligence di Microsoft Fabric. Untuk contoh praktis, lihat Tutorial: Menggunakan Eventhouse sebagai database vektor.
Konsep kunci
Konsep utama berikut digunakan dalam database vektor:
Kesamaan vektor
Kesamaan vektor adalah ukuran seberapa berbeda (atau serupa) dua vektor atau lebih. Pencarian kesamaan vektor adalah teknik yang digunakan untuk menemukan vektor serupa dalam himpunan data. Vektor dibandingkan menggunakan metrik jarak, seperti jarak Euclidean atau kesamaan kosinus. Semakin dekat dua vektor, semakin mirip.
Penyematan
Penyematan adalah cara umum untuk mewakili data dalam format vektor untuk digunakan dalam database vektor. Penyematan adalah representasi matematika dari sepotong data, seperti kata, dokumen teks, atau gambar, yang dirancang untuk menangkap makna semantiknya. Penyematan dibuat menggunakan algoritma yang menganalisis data dan menghasilkan sekumpulan nilai numerik yang mewakili fitur utamanya. Misalnya, penyematan untuk kata mungkin mewakili maknanya, konteksnya, dan hubungannya dengan kata lain. Proses pembuatan penyematan sangat mudah. Meskipun dapat dibuat menggunakan paket python standar (misalnya, spaCy, sent2vec, Gensim), Large Language Models (LLM) menghasilkan penyematan kualitas tertinggi untuk pencarian teks semantik. Misalnya, Anda dapat mengirim teks ke model penyematan di Azure OpenAI, dan menghasilkan representasi vektor yang dapat disimpan untuk analisis. Untuk informasi selengkapnya, lihat Memahami penyematan di Azure OpenAI Service.
Alur kerja umum
Alur kerja umum untuk menggunakan database vektor adalah sebagai berikut:
- Menyematkan data: Mengonversi data menjadi format vektor menggunakan model penyematan. Misalnya, Anda dapat menyematkan data teks menggunakan model OpenAI.
- Menyimpan vektor: Simpan vektor yang disematkan dalam database vektor. Anda dapat mengirim data yang disematkan ke Eventhouse untuk menyimpan dan mengelola vektor.
- Menyematkan kueri: Mengonversi data kueri menjadi format vektor menggunakan model penyematan yang sama yang digunakan untuk menyematkan data yang disimpan.
- Vektor kueri: Gunakan pencarian kesamaan vektor untuk menemukan entri dalam database yang mirip dengan kueri.
Eventhouse sebagai Database Vektor
Pada inti Pencarian Kesamaan Vektor adalah kemampuan untuk menyimpan, mengindeks, dan mengkueri data vektor. Eventhouses menyediakan solusi untuk menangani dan menganalisis data dalam jumlah besar, terutama dalam skenario yang membutuhkan analitik dan eksplorasi real-time, menjadikannya pilihan yang sangat baik untuk menyimpan dan mencari vektor.
Komponen berikut dari mengaktifkan penggunaan database vektor Eventhouse:
- Jenis data dinamis, yang dapat menyimpan data yang tidak terstruktur seperti array dan tas properti. Dengan demikian, jenis data direkomendasikan untuk menyimpan nilai vektor. Anda dapat menambah nilai vektor lebih lanjut dengan menyimpan metadata yang terkait dengan objek asli sebagai kolom terpisah dalam tabel Anda.
- Jenis
Vector16pengodean yang dirancang untuk menyimpan vektor angka floating-point dalam presisi 16-bit, yang menggunakanBfloat16alih-alih default 64 bit. Pengodean ini direkomendasikan untuk menyimpan penyematan vektor ML karena mengurangi persyaratan penyimpanan dengan faktor empat dan mempercepat fungsi pemrosesan vektor seperti series_dot_product() dan series_cosine_similarity() berdasarkan urutan besarnya. - Fungsi series_cosine_similarity , yang dapat melakukan pencarian kesamaan vektor di atas vektor yang disimpan di Eventhouse.
Optimalkan untuk skala
Untuk informasi selengkapnya tentang mengoptimalkan pencarian kesamaan vektor, baca blog.
Untuk memaksimalkan performa dan waktu pencarian yang dihasilkan, ikuti langkah-langkah berikut:
- Atur pengodean kolom penyematan ke Vector16, pengodean 16-bit koefisien vektor (bukan default 64-bit).
- Simpan tabel vektor penyematan pada semua node kluster dengan setidaknya satu shard per prosesor, yang dilakukan dengan langkah-langkah berikut:
- Batasi jumlah vektor penyematan per shard dengan mengubah ShardEngineMaxRowCount dari kebijakan sharding. Kebijakan sharding menyeimbangkan data pada semua simpul dengan beberapa tingkat per simpul sehingga pencarian dapat menggunakan semua prosesor yang tersedia.
- Ubah RowCountUpperBoundForMerge dari kebijakan penggabungan. Kebijakan penggabungan diperlukan untuk menekan tingkat penggabungan setelah penyerapan.
Contoh langkah-langkah pengoptimalan
Dalam contoh berikut, tabel vektor statis didefinisikan untuk menyimpan vektor 1M. Kebijakan penyematan didefinisikan sebagai Vector16, dan kebijakan sharding dan penggabungan diatur untuk mengoptimalkan tabel untuk pencarian kesamaan vektor. Untuk ini mari kita asumsikan kluster memiliki 20 simpul masing-masing memiliki 16 prosesor. Pecahan tabel harus berisi paling banyak 1000000/(20*16)=3125 baris.
Perintah KQL berikut dijalankan satu per satu untuk membuat tabel kosong dan mengatur kebijakan dan pengodean yang diperlukan:
.create table embedding_vectors(vector_id:long, vector:dynamic) // This is a sample selection of columns, you can add more columns .alter column embedding_vectors.vector policy encoding type = 'Vector16' // Store the coefficients in 16 bits instead of 64 bits accelerating calculation of dot product, suppress redundant indexing .alter-merge table embedding_vectors policy sharding '{ "ShardEngineMaxRowCount" : 3125 }' // Balanced data on all nodes and, multiple extents per node so the search can use all processors .alter-merge table embedding_vectors policy merge '{ "RowCountUpperBoundForMerge" : 3125 }' // Suppress merging extents after ingestionSerap data ke tabel yang dibuat dan ditentukan di langkah sebelumnya.
