まとめ
- Kesamaan kosinus mengukur kedekatan vektor melalui sudut di antara keduanya.
- Hitung kesamaan/jarak kosinus di Python untuk embedding atau vektor TF-IDF yang jarang.
- Perhatikan normalisasi, penanganan vektor nol, dan catatan praktis lainnya.
1. Definisi dan intuisi #
Untuk \(\mathbf{a}, \mathbf{b}\):
$$ \cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}| , |\mathbf{b}|} $$
- Nilai mendekati 1: arah sama (kemiripan tinggi).
- Mendekati 0: ortogonal (tidak berkorelasi).
- Mendekati –1: arah berlawanan.
- Jarak kosinus: \(d = 1 - \cos(\theta)\).
Karena magnitudo ternormalisasi, kosinus fokus pada arah vektor.
2. Contoh Python #
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, cosine_distances
embeddings = np.array(
[
[0.1, 0.4, 0.5],
[0.2, 0.2, 0.6],
[0.6, 0.3, 0.1],
]
)
sim_matrix = cosine_similarity(embeddings)
dist_matrix = cosine_distances(embeddings)
print(sim_matrix.round(3))
print(dist_matrix.round(3))
Untuk pasangan tunggal, gunakan scipy.spatial.distance.cosine. Matriks jarang bekerja efisien dengan kesamaan kosinus di scikit-learn.
3. Karakteristik utama #
- Invarian terhadap skala: cocok untuk TF-IDF atau embedding dengan magnitudo berbeda.
- Bersahabat dengan sparsity: stabil meski sebagian besar entri nol.
- Komponen negatif: interpretasi perlu hati-hati; mungkin butuh sentralisasi atau normalisasi.
4. Penerapan #
- Pencarian & rekomendasi: rank item berdasarkan kesamaan kosinus terhadap kueri atau profil pengguna.
- Clustering topik: gunakan jarak kosinus pada k-means (atau spherical k-means) untuk mengelompokkan teks.
- Evaluasi embedding: bandingkan distribusi kesamaan untuk pasangan positif/negatif.
5. Catatan praktis #
- Kesamaan kosinus tidak terdefinisi untuk vektor nol; buang atau tambahkan epsilon kecil.
- Jarak kosinus bisa melanggar ketidaksetaraan segitiga; pastikan cocok dengan algoritme turunannya.
- Kombinasikan dengan standardisasi atau reduksi dimensi bila orientasi sangat sensitif terhadap skala fitur.
Kesamaan kosinus adalah ukuran sederhana namun kuat untuk membandingkan arah vektor; perhatikan asumsi metrik dan keberadaan vektor nol saat dipakai di pipeline produksi.