Tokenization
Jak działa
1. Trening tokenizera (offline, jednorazowy): algorytm BPE/WordPiece/Unigram analizuje korpus referencyjny i buduje słownik podjednostek. BPE iteracyjnie łączy najczęstsze pary sąsiadujących symboli; WordPiece łączy te, które maksymalizują prawdopodobieństwo korpusu pod modelem unigramowym; Unigram zaczyna od dużego słownika i iteracyjnie usuwa tokeny o najmniejszym wpływie na likelihood.
2. Encoding (inferencja tokenizera): wejściowy tekst jest dzielony na sekwencję tokenów ze słownika, najczęściej greedy longest-match (WordPiece), priority-queue merges (BPE) lub Viterbi (Unigram). Wynik to lista identyfikatorów integer.
3. Decoding: odwrotny proces — identyfikatory są mapowane z powrotem na ciągi znaków. Detokenizacja musi być bezstratna, co wymaga specjalnych konwencji (np. prefiks „##" w WordPiece, „▁" w SentencePiece, prefix-space encoding w GPT).
4. Token budget: model ma stałe okno kontekstu (context window) liczone w tokenach. API komercyjne (OpenAI, Anthropic, Google) rozliczają zużycie w tokenach. Liczba tokenów per znak waha się typowo od 0.25 (proste angielskie zdania) do >2 (pisma niełacińskie, kod, struktury danych).
Rozwiązany problem
Modele neuronowe wymagają wejścia o stałej, skończonej dziedzinie reprezentowanej jako wektory. Tekst naturalny ma jednak nieograniczoną przestrzeń ciągów znaków Unicode. Tokenizacja rozwiązuje ten problem: kompresuje tę nieskończoność do skończonego słownika (typowo 32k–200k pozycji) w sposób minimalizujący długość sekwencji dla typowego korpusu treningowego, jednocześnie pokrywając wszystkie możliwe wejścia. Podejścia naiwne — tokenizacja słowna i znakowa — zawodzą w ekstremach: słowna tworzy gigantyczny słownik, nie radzi sobie z OOV (out-of-vocabulary) i morfologią, znakowa daje bardzo długie sekwencje, drogie obliczeniowo. Tokenizacja podsłowna (subword) jest kompromisem, który stał się standardem branżowym.
Kluczowe mechanizmy
Mocne strony i ograniczenia
Komponenty
Implementacja
Tokenizery trenowane głównie na korpusach angielskich produkują 2–3× więcej tokenów dla polskiego, japońskiego, arabskiego czy hindi — co podnosi koszt API i zmniejsza efektywne okno kontekstu dla tych języków.
BPE dzieli liczby na fragmenty zależne od częstotliwości w korpusie (np. "1234" jako "123" + "4" lub "12" + "34"), co utrudnia naukę arytmetyki. Llama 3 i nowsze rozwiązują to wymuszając digit-splitting.
Tokeny obecne w słowniku, ale praktycznie nieobecne w danych treningowych (np. " SolidGoldMagikarp" w GPT-3) wywołują deterministyczne, niezrozumiałe odpowiedzi modelu — surface area do prompt injection i jailbreakingu.
Pytania w stylu „ile jest liter R w słowie strawberry" zawodzą, bo model widzi „straw" + „berry" jako dwa tokeny — nie ma dostępu do reprezentacji znakowej. Klasyczny benchmark zawodności tokenizacji.
Użycie innego tokenizera niż użyty przy pretrainingu (np. dodanie nowych tokenów specjalnych bez resize embeddingów) prowadzi do silent corruption modelu — output wygląda sensownie, ale jakość drastycznie spada.