Wróć do ścieżek
Moduł 2

Embedding: zakodowana informacja

W tym pokoju dowiesz się, czemu nie możemy dać od razu tokenów dla modelu i jaki problem to powoduje. Zobaczysz jak badacze sobie z tym poradzili, i przejdziemy przez II etap: embedding.

II etap

Po poprzednim pokoju wiesz już doskonale, co to jest Token ID. Byłoby jednak zbyt pięknie, gdyby na tym się kończyło. Wiemy, że Token ID to liczby — a liczby mają taką naturę, że same z siebie niosą pewną informację: token 156 jest większy od 23. Model to zapamięta i potraktuje jako fakt o tych tokenach, a nie o to nam chodzi — numer w słowniku jest przecież arbitralny. Trzeba więc token zakodować inaczej.

Może znasz one-hot encoding. Traktujemy wtedy każdy token jak osobną kategorię: przy 100 tokenach dostajemy 100-wymiarowy wektor z jedną jedynką i samymi zerami. To rozwiązuje problem fałszywej wielkości — żaden token nie jest już „większy" od innego — ale za cenę ogromnego nadmiaru. Wektor jest tak długi jak cały słownik, w większości pusty, a do tego każde dwa tokeny są tak samo odległe: nie ma w tym żadnej struktury znaczeniowej (Przykład został pokazany na zdjęciu 1).

Cennik modeli Claude — ceny za tokeny wejściowe i wyjściowe
Zdj. 1 — Przykład one-hot encoding: każda kategoria to osobna kolumna, a przynależność kwiatka zaznaczamy jedynką.

Sam embedding jako pomysł powstał już dawno temu, a jego celem było takie zakodowanie kategorii, które dzięki odpowiednim operacjom mogło nieść ze sobą znaczenie. Sposób kodowania ograniczał się do zapisu wektorowego, czyli np. [1.23,1.32,1.54], przy czym wymiar był stały, niezależny od liczby kategorii. Zamiast długiego, pustego wektora token dostaje krótki, gęsty wektor liczb — uczony razem z modelem. Pojawił się jednak pewien problem: choć sam pomysł był znany, trenowanie takich reprezentacji na wielkich korpusach tekstu było w tamtym czasie bardzo kosztowne obliczeniowo. Dotychczasowe metody nie skalowały się do miliardów słów — nauczenie dobrych wektorów trwało zbyt długo i wymagało zbyt dużej mocy. Dlatego w tamtym czasie embeddingi były ciekawym konceptem, ale nie stosowano ich na większą skalę..

Przełom przyniosła praca "Efficient Estimation of Word Representations in Vector Space" (Mikolov i in., 2013) i algorytm znany jako word2vec. Autorzy pokazali jak uczyć embeddingi szybko i tanio nawet na ogromnych zbiorach danych. Okazało się przy tym, że tak nauczone wektory mają zaskakującą własność — kierunki w przestrzeni odpowiadają realnym relacjom między słowami. Na embeddingach można wręcz wykonywać operacje algebraiczne:

vector("King")vector("Man") + vector("Woman")vector("Queen")

Autorzy zaproponowali dwie proste architektury sieci neuronowych służące do uczenia reprezentacji słów — znacznie prostsze niż dzisiejsze modele językowe. Należy zapamiętać, że właściwym celem nie było jednak samo przewidywanie wyrazów, lecz nauczenie embeddingów, które były parametrami sieci i dostrajały się podczas treningu. Warto dodać, że pracowano wtedy na całych wyrazach, a nie na tokenach, jakie znamy dziś.

Czyli czym w końcu są te embeddingi? Odpowiedź brzmi: wektorami — i to takimi, że jeśli umieścimy je na pewnej płaszczyźnie (jest to tylko uproszczenie, ponieważ typowe embeddingi potrafia mieć nawet więcej niż 300 wymiarów), to słowa o podobnym znaczeniu znajdą się blisko siebie, a te niezwiązane — daleko. Kot wyląduje koło słowa pies, oba w innym rejonie niż samochód. Co więcej, w tej przestrzeni sens mają nie tylko odległości, ale i kierunki: przesunięcie od mężczyzny do kobiety jest podobne jak od króla do królowej — dlatego działają wspomniane operacje algebraiczne. Znaczenie słowa przestaje być etykietą, a staje się położeniem w przestrzeni (Przykład embeddingów znajduje się na zdjęciu 2)

Przykład embeddingów
Zdj. 2 — Przykład embeddingów: każda kolumna to wymiar wektora, który nie zależy od liczby kategorii. Każdy kwiatek ma swój wektor.

W dzisiejszych modelach (np. GPT) embeddingi nie są trenowane osobno, jako oddzielny cel — tak jak było to w Word2Vec, gdzie całym zadaniem było nauczenie się dobrych reprezentacji słów. Teraz warstwa embeddingu jest po prostu jednym z wielu zbiorów parametrów wielkiej sieci, a jedyny cel treningu to przewidywanie kolejnego tokenu. Embeddingi uczą się „przy okazji" — optymalizacja dostraja je tak, by pomagały trafnie przewidywać następny token, i dopiero jako efekt uboczny tego procesu kodują informację znaczeniową. Innymi słowy: model nie dąży do tego, by kot i pies miały podobne wektory — dąży do tego, by dobrze zgadywać następne słowo, a podobieństwo wektorów wychodzi samo, bo akurat pomaga w tym zadaniu (jeśli są słowa o podobnym znaczeniu to też ten sam następny token będzie bardziej prawdopodobny). Znaczenie nie jest więc celem, lecz produktem ubocznym generowania tekstu.

Zaloguj się, aby czytać dalej

To tylko początek modułu. Załóż darmowe konto lub zaloguj się, aby mieć dostęp do bezpłatnych modułów.