4. Podobieństwo wektorów

Podobieństwo kosinusowe porównuje kierunki wektorów. Dzięki prostemu przykładowi zobaczysz, dlaczego sama długość wektora nie rozstrzyga rankingu i dlaczego wynik 0,82 nie jest prawdopodobieństwem poprawnej odpowiedzi.

1. Długość i kierunek

Wektor [3, 4] ma długość 5, ponieważ pierwiastek z 3² + 4² wynosi 5. Wektor [6, 8] jest dwa razy dłuższy, lecz wskazuje ten sam kierunek. Jeśli chcesz porównywać kierunki, musisz uwzględnić obie długości. Iloczyn skalarny mnoży odpowiadające sobie współrzędne i sumuje wyniki.

a · b = a_1 × b_1 + a_2 × b_2 + ... + a_D × b_D
||a|| = √(a_1² + a_2² + ... + a_D²)
cosine_similarity(a, b) = (a · b) / (||a|| × ||b||)

Wzór wymaga wektorów tego samego wymiaru oraz niezerowych norm. Dla wektora zerowego mianownik wynosi zero, więc miara nie jest określona. Nie traktuj takiego przypadku jako „braku podobieństwa”; to niepoprawne wejście, które trzeba wyjaśnić.

2. Rachunek na małych wektorach

Nie są to embeddingi tekstów ani wartości z BGE-M3. Przyjmij pytanie reprezentowane przez q = [1, 0] i cztery wektory kontrolne.

Wektor Iloczyn q · v Długość v Kosinus
A = [2, 0] 2 2 1
B = [1, 1] 1 √2 1/√2 ≈ 0,7071
C = [0, 3] 0 3 0
D = [-2, 0] -2 2 -1

Kierunki identyczne dają 1, prostopadłe 0, a przeciwne -1. Matematyczny zakres to od -1 do 1. W rzeczywistych reprezentacjach rozkład wartości zależy od modelu i danych. Nie odczytuj ujemnego wyniku jako logicznego zaprzeczenia zdania ani zera jako gwarancji braku związku między tekstami.

3. Co zmienia normalizacja L2

Normalizacja dzieli wszystkie współrzędne przez długość wektora. Z [3, 4] otrzymujesz [0.6, 0.8]; długość nowego wektora wynosi 1, a kierunek się nie zmienia. W kodzie kursu odpowiada za to normalize_vector().

v_norm = v / ||v||
Jeżeli ||a_norm|| = ||b_norm|| = 1,
to cosine_similarity(a_norm, b_norm) = a_norm · b_norm.

Pełny wzór kosinusowy już uwzględnia długości, dlatego osobna normalizacja nie jest konieczna przy każdym jego użyciu. Jest za to wygodna przed obliczaniem wielu podobieństw operacją macierzową. W rozdziale 5 znormalizujesz wiersze macierzy i wektor pytania. Nie normalizuj wektora zerowego i nie zastępuj błędu dopisaniem drobnej liczby bez wyjaśnienia.

4. Wynik liczbowy wymaga tekstu

cosine_similarity(vector_a, vector_b) zwraca jedną liczbę. Pozwala porównać pary w danej konfiguracji, ale nie wie, czy dokument jest aktualny ani czy zawiera dokładne polecenie. Score 0,82 nie oznacza 82% pewności, 82% prawdy ani 82% informacji potrzebnych do odpowiedzi.

Do interpretacji zapisz pytanie, chunk_id, tekst, metadane i wartość podobieństwa. Porównuj wynik z przewidywaniem zapisanym przed obliczeniami. Jeśli ranking jest zaskakujący, sprawdź warunki, negacje, nazwy obiektów oraz zgodność modelu. Zaokrąglaj wartości do wyświetlenia, zachowując pełną precyzję w pliku.

Ćwiczenie 3. Oblicz i zinterpretuj

Praca samodzielna offline

Użyj wyłącznie geometrii. W tej części nie musisz znać żadnego tekstu źródłowego.

  1. Dla q = [3, 4] oblicz kosinus z A = [6, 8], B = [4, -3] oraz C = [-3, -4]. Zapisz iloczyny skalarne i długości.
  2. Znormalizuj q. Wyjaśnij, czy pomnożenie A przez 10 zmieni podobieństwo kosinusowe.
  3. Oceń możliwość porównania q z [0, 0] oraz [3, 4, 0].
  4. Popraw zdanie: „Fragment o score 0,82 odpowiada poprawnie na 82% pytania”.
Sprawdź rozumienie

Czy potrafisz oddzielić błąd danych od poprawnie obliczonego, ale nieprzydatnego wyniku?

Przejście do pakietu ćwiczeniowego

Jeżeli pracujesz również na komputerze, wykorzystaj kartę R3 oraz notebook M12_M3_R3_kosinus_start.ipynb.

Wybierz trzy rzeczywiste fragmenty i zapisz przewidywania przed porównaniem. Wyniki trafiają do podobienstwa.csv, a interpretacja do wnioski.md. Własne funkcje możesz porównać z implementacją w kod/m3_tools.py.

ENHANCER+ · Politechnika Warszawska · podręcznik do samodzielnej nauki offline