Penelusuran vektor di Spanner Omni adalah fitur bawaan dengan performa tinggi yang memungkinkan penelusuran semantik dan pencocokan kemiripan pada data vektor berdimensi tinggi. Dengan menyimpan dan mengindeks embedding vektor secara langsung dalam database transaksional Anda, Spanner Omni menghilangkan kebutuhan akan database vektor terpisah dan pipeline ekstrak, transformasi, pemuatan (ETL) yang kompleks.
Topik dalam dokumen ini berlaku untuk Spanner Omni dengan cara yang sama seperti penerapannya pada Spanner.
Ringkasan penelusuran vektor
Penelusuran vektor memungkinkan Anda menemukan item yang serupa secara semantik dengan merepresentasikan data sebagai vektor numerik (embedding). Spanner Omni mendukung dua metode penelusuran utama:
K-tetangga terdekat (KNN): Melakukan penelusuran yang tepat dengan menghitung jarak antara kueri dan setiap vektor dalam set data. Metode ini memberikan recall tertinggi, tetapi dapat memakan biaya komputasi yang besar untuk set data besar.
Tetangga terdekat perkiraan (ANN): Menggunakan indeks vektor untuk menemukan kecocokan dengan cepat di seluruh set data besar. Fitur ini mengorbankan sedikit akurasi (recall) untuk mendapatkan peningkatan kecepatan dan skalabilitas.
Penelusuran vektor sangat efektif jika digabungkan dengan fitur lain:
| Kombinasi | Manfaat |
|---|---|
| Penelusuran vektor dengan pemfilteran SQL | Menggabungkan penelusuran vektor dengan filter secara efisien (misalnya, "Temukan gambar serupa dengan kategori = 'sepatu' dan harga < 100"). |
| Penelusuran vektor + penelusuran teks lengkap | Gabungkan kemiripan semantik dengan presisi kata kunci menggunakan penggabungan peringkat timbal balik (RRF) untuk meningkatkan relevansi penelusuran. |
| Vektor + grafik | Gunakan penelusuran vektor untuk menemukan titik entri (node) yang relevan dalam grafik properti, lalu telusuri hubungan yang kompleks. |
Untuk mengetahui informasi selengkapnya, lihat Ringkasan penelusuran vektor Spanner dalam dokumentasi Spanner.
Melakukan penelusuran K-nearest neighbors
Spanner Omni mendukung penelusuran tetangga K-terdekat (KNN) menggunakan fungsi jarak bawaan. Anda dapat memberikan embedding vektor sebagai parameter input untuk menemukan vektor terdekat dalam ruang berdimensi N.
Fungsi jarak berikut tersedia:
COSINE_DISTANCE(): Mengukur kosinus sudut antara dua vektorEUCLIDEAN_DISTANCE(): Mengukur jarak garis lurus terpendek antara dua vektorDOT_PRODUCT(): Menghitung kosinus sudut yang dikalikan dengan hasil kali besaran vektor (ideal untuk data yang dinormalisasi)
Untuk mengetahui informasi selengkapnya, lihat Melakukan penelusuran kesamaan vektor dengan menemukan K-nearest neighbors dalam dokumentasi Spanner.
Memilih fungsi jarak vektor terbaik
Pemilihan fungsi jarak yang sesuai bergantung pada data Anda dan model yang digunakan untuk membuat penyematan.
| Fungsi | Deskripsi | Hubungan dengan peningkatan kemiripan |
|---|---|---|
| Perkalian titik | Menghitung kosinus sudut yang dikalikan dengan hasil perkalian besaran vektor yang sesuai. | Meningkatkan |
| Jarak kosinus | Mengukur kosinus sudut antara dua vektor (1 - kemiripan kosinus). | Menurunkan |
| Jarak Euclidean | Mengukur jarak garis lurus antara dua vektor. | Menurunkan |
Jika sematan Anda dinormalisasi (magnitudo = 1,0), DOT_PRODUCT() biasanya merupakan pilihan yang efisien. Untuk data yang tidak dinormalisasi, lakukan eksperimen dengan
COSINE_DISTANCE() atau EUCLIDEAN_DISTANCE() untuk menentukan mana yang menghasilkan
hasil yang lebih baik untuk kasus penggunaan Anda.
Untuk mengetahui informasi selengkapnya, lihat Memilih fungsi jarak vektor dalam dokumentasi Spanner.
Approximate nearest neighbors (ANN)
Penelusuran ANN dirancang untuk set data yang sangat besar di mana penelusuran KNN yang tepat menjadi terlalu lambat atau mahal. Fitur ini menggunakan indeks vektor untuk memberikan hasil yang cepat dengan sedikit penurunan perolehan.
Penelusuran perkiraan tetangga terdekat (ANN) di Spanner Omni mendukung set data hingga 1 juta vektor untuk vektor dengan panjang hingga 128 dimensi. Jika vektor Anda memiliki lebih banyak dimensi, jumlah vektor yang didukung akan berkurang secara proporsional.
Melakukan penelusuran ANN dengan indeks vektor
Untuk melakukan penelusuran ANN, Anda menggunakan fungsi jarak perkiraan seperti
APPROX_COSINE_DISTANCE(), APPROX_EUCLIDEAN_DISTANCE(), atau
APPROX_DOT_PRODUCT(). Fungsi ini memerlukan:
Indeks vektor yang ada di kolom embedding.
Klausul
ORDER BYmenggunakan fungsi jarak perkiraan.Klausa
LIMITuntuk menentukan jumlah hasil.
Untuk mengetahui informasi selengkapnya, lihat Menemukan perkiraan tetangga terdekat (ANN) dan membuat kueri embedding vektor dalam dokumentasi Spanner.
Membuat dan mengelola indeks vektor
Saat membuat indeks vektor, Anda harus menentukan vector_length kolom penyematan dan dapat menggunakan klausa STORING untuk menyertakan kolom tambahan agar pemfilteran lebih cepat.
Berikut adalah contoh cara membuat indeks vektor:
CREATE VECTOR INDEX INDEX_NAME
ON TABLE_NAME(EMBEDDING_COLUMN)
OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);
Untuk mengetahui informasi selengkapnya, lihat Membuat dan mengelola indeks vektor dalam dokumentasi Spanner.
Praktik terbaik pengindeksan vektor
Untuk mempertahankan performa dan perolehan penelusuran yang tinggi:
Sesuaikan opsi indeks: Sesuaikan
num_leavesdannum_leaves_to_searchberdasarkan ukuran data dan persyaratan performa Anda.Bangun ulang secara berkala: Bangun ulang indeks jika distribusi vektor Anda berubah secara signifikan dari waktu ke waktu.
Gunakan pemfilteran secara efektif: Simpan kolom yang sering difilter dalam indeks untuk meningkatkan efisiensi penelusuran.
Untuk mengetahui informasi selengkapnya, lihat Praktik terbaik pengindeksan vektor dalam dokumentasi Spanner.