Back to archive
#ai#llm#glossary#aigen

Token Embedding

Komputer dostaje numer oznaczający fragment tekstu. Sam numer 17 nie mówi mu, czym ten fragment jest ani jak wiąże się z innymi. Potrzebuje użytecznego opisu liczbowego, który będzie mógł przekształcać podczas obliczeń.

Token Embedding zamienia identyfikator tokena — kawałka tekstu ze słownika — na wektor, czyli listę liczb. W typowym rozwiązaniu numer wskazuje wiersz wyuczonej tabeli. Jeśli token ma numer 17, odczytujemy siedemnasty odpowiedni wiersz, a nie traktujemy liczby 17 jako miary znaczenia.

Wartości tabeli są dopasowywane podczas uczenia. Ten sam token początkowo dostaje ten sam opis niezależnie od zdania. Dopiero dalsze warstwy mogą przekształcić go z użyciem kontekstu: „zamek w drzwiach” i „zamek na wzgórzu” wymagają różnego otoczenia.

Embedding nie jest więc gotową definicją słowa ani dowodem zrozumienia znaczenia. To wejściowy opis, na którym pracują kolejne mechanizmy, np. Self-attention.

Źródło mechanizmu: warstwa Embedding w Keras.

Mechanizm i szczegóły

Od identyfikatora do wektora

Wyobraźmy sobie fragment tabeli o trzech współrzędnych:

IdentyfikatorWektor
6[0,2; −0,1; 0,5]
9[−0,4; 0,3; 0,8]

Dla wejścia [6, 9, 6] pobieramy kolejno pierwszy, drugi i ponownie pierwszy z pokazanych wierszy. To wymyślone wartości, a średniki oddzielają współrzędne. Powtórzony identyfikator daje ten sam wektor z tej samej tabeli, nawet jeśli występuje w innym miejscu zdania.

Token Embedding nie zawiera jeszcze wyniku analizy sąsiednich tokenów. Self-attention może później nadać dwóm wystąpieniom różne reprezentacje zależne od kontekstu. Positional Encoding dostarcza osobno informacji o miejscu w sekwencji.

Laboratorium: od tokena do uczenia

Poniżej można prześledzić odczyt tabeli, przemianować identyfikatory, zmienić współrzędną i wykonać krok uczenia. Wszystkie cztery części korzystają z tej samej tabeli. Własny przykład ma sześć tokenów i sześć współrzędnych na token; słowa traktujemy jako niepodzielne jednostki. Rzeczywisty tokenizer może dzielić słowa na mniejsze fragmenty.

Laboratorium wymaga JavaScript. Opis mechanizmu i przykład kroku uczenia znajdują się również w tekście poniżej.

Skąd biorą się wartości wektorów

W oryginalnym Transformer uczono embeddings razem z modelem; nie wymagano wcześniejszego treningu Word2Vec. Opisuje to Attention Is All You Need, §3.4.

Tabela EE o wymiarach V×dV \times d przechowuje VdVd parametrów: VV to liczba tokenów w słowniku, a dd to długość każdego wektora. Odczyt trzech identyfikatorów daje macierz 3×d3 \times d. Przemianowanie ID razem z przestawieniem odpowiednich wierszy zachowuje wynik odczytu. Zmiana zawartości wiersza zmienia natomiast wektor pobierany przy każdym wystąpieniu tego tokena. Kształt i wyuczany charakter tabeli opisuje również dokumentacja PyTorch Embedding.

W części o uczeniu wejściem jest „kamienny”, a poprawnym następnym tokenem „zamek”. Model ma tylko dwie możliwe odpowiedzi: „zamek” i „klucz”. Dwa stałe wektory wag przekształcają wejściowy embedding w wyniki liczbowe, zwane logitami. Softmax zamienia je w prawdopodobieństwa. Cross-entropy dla tej próbki wynosi L=−ln⁡p(zamek)L=-\ln p(\text{zamek}); jest to szczególny przypadek straty opisanej w dokumentacji PyTorch.

Przycisk uczenia oblicza gradient tej straty względem sześciu współrzędnych wejściowego wektora i odejmuje od nich gradient pomnożony przez 0,4. Przy początkowych ustawieniach pierwszy krok zwiększa prawdopodobieństwo celu z około 47,0% do 61,0%, a stratę zmniejsza z około 0,755 do 0,495. Zmienia się wiersz „kamienny”, bo to on był wejściem; „zamek” był etykietą celu. Te liczby pochodzą z obliczeń przykładu.

W tym eksperymencie wagi wyjściowe są zamrożone i osobne od tabeli wejściowej, bez momentum i weight decay. Dzięki temu widać samą aktualizację jednego odczytanego wiersza. W pełnym modelu sposób uczenia i współdzielenie wag mogą sprawić, że zmieniają się także inne parametry. Poprawa na jednej próbce pokazuje działanie optymalizacji, nie jakość modelu językowego.

Gdzie pojawia się kontekst

„Oto kamienny zamek” i „oto metalowy zamek” używają w laboratorium tego samego tokena „zamek” na tej samej pozycji. Odczyt tabeli daje identyczny wektor. Dodanie tego samego Positional Encoding również zachowuje równość obu wejść. Dopiero obliczenie Self-attention uwzględnia różnicę między poprzedzającymi tokenami.

Demonstracja oblicza jedną głowę attention z jednostkowymi projekcjami Q, K i V oraz sinusoidalnym Positional Encoding według Attention Is All You Need, §3.2 i §3.5. Można odczytać wszystkie wagi attention i ujednolicić zdania, aby wyniki ponownie były identyczne. To model wpływu kontekstu z ustalonymi wagami, a nie wytrenowany klasyfikator dwóch znaczeń „zamku”.

Szerzej o późniejszym przekształcaniu wektorów mówi artykuł o attention. Jego określenie „updated embeddings” odnosi się do reprezentacji po obliczeniach, które należy odróżnić od samego odczytu tabeli.

Źródła