Cosine Similarity
Jak działa
cos(θ) = (A · B) / (||A|| · ||B||). Iloczyn skalarny wektorów A i B dzielony przez iloczyn ich norm euklidesowych. Wynik w zakresie [-1, 1] (dla wektorów nieujemnych, np. TF-IDF, w zakresie [0, 1]): 1 = identyczny kierunek, 0 = ortogonalność (brak wspólnych cech).
Rozwiązany problem
Odległość euklidesowa między wektorami dokumentów jest zdominowana przez ich długość — dłuższy dokument jest "dalej" mimo tej samej tematyki. Cosine similarity normalizuje ten efekt, patrząc tylko na kąt.
Implementacja
Wektor zerowy (np. dokument bez żadnego znanego terminu) daje dzielenie przez zero w normie.
Powtórne liczenie norm dla tych samych wektorów marnuje czas.
Hiperparametry (konfigurowalne osie)
Czy wektory są wcześniej znormalizowane do długości jednostkowej — wtedy cosine = iloczyn skalarny.
Złożoność obliczeniowa
Złożoność czasowa: O(d) na parę, O(n·d) batch. Złożoność przestrzenna: O(d) na wektor.
Paradygmat wykonania
Równoległość
Wymagania sprzętowe
Batchowe cosine similarity to mnożenie macierzy — idealne dla GPU przy gęstych embeddingach.
Dla wektorów rzadkich (TF-IDF) CPU z SIMD jest efektywne.