Halaman ini menjelaskan cara memilih di antara fungsi jarak vektor yang disediakan di Spanner untuk mengukur kemiripan antara embedding vektor.
Setelah membuat embedding dari data Spanner, Anda dapat melakukan penelusuran kemiripan menggunakan fungsi jarak vektor. Tabel berikut menjelaskan fungsi jarak vektor di Spanner.
Fungsi | Deskripsi | Formula | Hubungan dengan peningkatan kemiripan |
---|---|---|---|
Perkalian titik | Menghitung kosinus sudut \(\theta\) yang dikalikan dengan produk dari besar vektor yang sesuai. | \(a_1b_1+a_2b_2+...+a_nb_n\) \(=|a||b|cos(\theta)\) | Meningkatkan |
Jarak kosinus | Fungsi jarak kosinus mengurangi kemiripan kosinus dari satu (cosine_distance() = 1 - cosine similarity ). Kemiripan kosinus mengukur kosinus sudut \(\theta\) antara dua vektor.
|
1 - \(\frac{a^T b}{|a| \cdot |b|}\) | Menurun |
Jarak Euclidean | Mengukur jarak garis lurus antara dua vektor. | \(\sqrt{(a_1-b_1)^2+(a_2-b_2)^2+...+(a_N-b_N)^2}\) | Menurun |
Memilih ukuran kesamaan
Anda dapat menentukan ukuran kesamaan yang akan digunakan untuk menemukan kesamaan, bergantung pada apakah semua embedding vektor Anda dinormalisasi atau tidak. Embedding vektor yang dinormalisasi memiliki besaran (panjang) tepat 1,0.
Selain itu, jika Anda mengetahui fungsi jarak yang digunakan untuk melatih model, gunakan fungsi jarak tersebut untuk mengukur kemiripan antara embedding vektor Anda.
Data yang dinormalisasi
Jika Anda memiliki set data tempat semua embedding vektor dinormalisasi, ketiga
fungsi akan memberikan hasil penelusuran semantik yang sama. Pada dasarnya, meskipun setiap
fungsi menampilkan nilai yang berbeda, nilai tersebut diurutkan dengan cara yang sama. Saat
embedding dinormalisasi, DOT_PRODUCT()
biasanya paling efisien
secara komputasi, tetapi perbedaannya dapat diabaikan dalam sebagian besar kasus. Namun, jika
aplikasi Anda sangat sensitif terhadap performa, DOT_PRODUCT()
dapat membantu
penyesuaian performa.
Data yang tidak dinormalisasi
Jika Anda memiliki set data yang tidak melakukan normalisasi pada embedding vektor,
maka secara matematis tidak benar untuk menggunakan DOT_PRODUCT()
sebagai fungsi jarak
karena perkalian titik sebagai fungsi tidak mengukur jarak. Bergantung
pada cara pembuatan penyematan dan jenis penelusuran yang lebih disukai,
fungsi COSINE_DISTANCE()
atau EUCLIDEAN_DISTANCE()
akan menghasilkan
hasil penelusuran yang secara subjektif lebih baik daripada fungsi lainnya.
Eksperimen dengan COSINE_DISTANCE()
atau EUCLIDEAN_DISTANCE()
mungkin
diperlukan guna menentukan pilihan terbaik untuk kasus penggunaan Anda.
Tidak yakin apakah data dinormalisasi atau tidak
Jika Anda tidak yakin apakah data dinormalisasi atau tidak dan ingin menggunakan
DOT_PRODUCT()
, sebaiknya gunakan COSINE_DISTANCE()
.
COSINE_DISTANCE()
mirip dengan DOT_PRODUCT()
dengan normalisasi bawaan.
Kesamaan yang diukur menggunakan COSINE_DISTANCE()
berkisar dari 0
hingga 2
. Hasil
yang mendekati 0
menunjukkan bahwa vektor sangat mirip.
Langkah selanjutnya
- Pelajari lebih lanjut cara melakukan penelusuran vektor dengan menemukan k-nearest neighbor.
- Pelajari cara mengekspor penyematan ke Vertex AI Vector Search.
- Pelajari lebih lanjut fungsi
COSINE_DISTANCE()
,EUCLIDEAN_DISTANCE()
, danDOT_PRODUCT()
GoogleSQL. - Pelajari lebih lanjut fungsi
spanner.cosine_distance()
,spanner.euclidean_distance(), and spanner.dot_product()
PostgreSQL.