Generowanie: cały proces tworzenia zdań
Generowanie wygląda na coś, co model robi sam z siebie. W rzeczywistości to sterowany proces, a żeby nad nim zapanować, trzeba znać parametry, które nim rządzą.
VI etap: generowanie
Załóżmy, że nasz model jest już wytrenowany i potrafi przewidywać kolejne tokeny na podstawie danego kontekstu. Trzeba jednak pamiętać, że sam pretrening nie jest jedynym etapem tworzenia modelu. W praktyce modele są zwykle dalej dostrajane, aby odpowiadały w określonym stylu oraz przestrzegały wybranych zasad. To właśnie dlatego potrafią odmówić odpowiedzi, zachowywać się jak nauczyciel czy asystent albo korzystać z narzędzi. Są to efekty kolejnych etapów treningu (takich jak SFT czy RLHF), a nie samego uczenia przewidywania kolejnego tokenu. Warto jednak podkreślić, że niezależnie od tych dodatkowych etapów podstawowy mechanizm działania modelu pozostaje taki sam. Zarówno podczas zwykłej odpowiedzi tekstowej, jak i przy korzystaniu z narzędzi model nadal generuje tekst, przewidując kolejne tokeny jeden po drugim. Różni się jedynie to, czego został nauczony podczas dostrajania, a nie sam sposób generowania.
W tym pokoju skupimy się właśnie na procesie generowania tekstu. Zacznijmy od tego, jak powiedzieć
modelowi, aby wygenerował kolejne tokeny. Weźmy przykład: podajemy zdanie
The cat sat on the mat. Cała ta sekwencja przechodzi przez model raz. Na
wyjściu, na pozycji ostatniego tokenu ("mat"), otrzymujemy wektor o długości równej rozmiarowi
słownika. Przepuszczamy go przez funkcję softmax, otrzymując rozkład prawdopodobieństwa nad wszystkimi
tokenami:
| token | p |
|---|---|
| "." | 0.41 |
| "," | 0.12 |
| "and" | 0.09 |
| "while" | 0.04 |
| ⋮ | ⋮ |
I tutaj pojawia się pytanie: czy wybieramy token o największym prawdopodobieństwie, czy wprowadzamy odrobinę losowości do generowanego tekstu? Pierwsza opcja sprawi, że dla tego samego kontekstu model będzie (teoretycznie) zawsze zwracał ten sam wynik. W niektórych zastosowaniach takie podejście ma sens, jednak znacznie ciekawsza jest druga możliwość, czyli losowanie z rozkładu prawdopodobieństwa.
Sam proces generowania wygląda następująco: wylosowany token trafia z powrotem do kontekstu. Sekwencja
The cat sat on the mat staje się The cat sat on the mat. i cały proces rozpoczyna
się od nowa. Nowe wejście przechodzi przez model, na ostatniej pozycji otrzymujemy kolejny rozkład
prawdopodobieństwa i ponownie losujemy token. Może wypaść "It" — wtedy kontekstem jest już
The cat sat on the mat. It i cały cykl powtarza się ponownie.
Pętla kończy się, gdy model wygeneruje specjalny token końca sekwencji (EOS) lub inny token kończący
wiadomość, zależnie od formatu, w jakim został wytrenowany. Generowanie może również zostać zatrzymane po
osiągnięciu narzuconego limitu max_tokens. To właśnie dlatego czasami otrzymujemy odpowiedzi
urwane w połowie zdania — model nie skończył generowania, lecz został zatrzymany z zewnątrz.
Warto zapamiętać dwie ważne konsekwencje tego procesu.
- Po pierwsze, model nie planuje całej odpowiedzi z góry — na każdym kroku podejmuje jedynie lokalną decyzję dotyczącą następnego tokenu. Spójność dłuższych wypowiedzi wynika z tego, że model za każdym razem widzi w kontekście wszystkie wcześniej wygenerowane tokeny, a nie z istnienia jakiegoś ukrytego planu.
- Po drugie, model nie może się cofać. Raz wygenerowany token staje się częścią kontekstu i wpływa na wszystkie kolejne decyzje. Jeden pechowo wylosowany token na początku może skierować całą dalszą generację na zły tor, a model będzie później konsekwentnie rozwijał tę ścieżkę, ponieważ z jego perspektywy jest to po prostu kontekst, do którego należy dopasować dalszy ciąg 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.
