Memilih di antara fungsi jarak vektor untuk mengukur kemiripan penyematan vektor

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.

FungsiDeskripsiFormulaHubungan 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