Ringkasan penelusuran vektor Spanner Omni

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.

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.

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 vektor

  • EUCLIDEAN_DISTANCE(): Mengukur jarak garis lurus terpendek antara dua vektor

  • DOT_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.

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 BY menggunakan fungsi jarak perkiraan.

  • Klausa LIMIT untuk 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_leaves dan num_leaves_to_search berdasarkan 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.