Podręcznik uczestnika z objaśnieniami, przykładami i ćwiczeniami do samodzielnej nauki do Modułu 3
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
Użyj wyłącznie geometrii. W tej części nie musisz znać żadnego tekstu źródłowego.
- Dla q = [3, 4] oblicz kosinus z A = [6, 8], B = [4, -3] oraz C = [-3, -4]. Zapisz iloczyny skalarne i długości.
- Znormalizuj q. Wyjaśnij, czy pomnożenie A przez 10 zmieni podobieństwo kosinusowe.
- Oceń możliwość porównania q z [0, 0] oraz [3, 4, 0].
- Popraw zdanie: „Fragment o score 0,82 odpowiada poprawnie na 82% pytania”.
Czy potrafisz oddzielić błąd danych od poprawnie obliczonego, ale nieprzydatnego wyniku?
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.