To, Co Zjada Tokenizator, Staje Się Tym, Co Zna
Dieta Tokenizera: Definicja
Tokenizator Harrisa trenuje na próbce korpusu. Przeprowadza analizę dystrybucyjną na tej próbce, wybiera N segmentów, które powtarzają się najsilniej, i zapisuje je do słownictwa. Po treningu te N segmentów staje się stałym alfabetem, którego model językowy używa do wszystkiego: treningu, wnioskowania, każdego wejścia, każdego wyjścia.
Dieta tokenizera = próbka tekstu, na której trenuje tokenizator.
Dieta treningowa = korpus, na którym trenuje się model językowy.
Gdy dwie diety się różnią, tokenizator uczy się segmentów dostosowanych do tekstu, którego model nigdy nie zobaczy. Pojemność osadzeń (jedno miejsce na wpis w słowniku) jest marnowana na segmenty, które nie przynoszą nagrody podczas treningu.
BŁĄD ANDREA-12M
ANDREA-12M wytrenował swój tokenizer Harris na surowej głowie megachat-v8.txt. Ta głowa zawierała próbki kodu i dane wywołań narzędzi. Program treningowy jednak wykluczał kod i wywołania narzędzi; ANDREA-12M widział tylko tekst konwersacyjny.
Rezultat: tokenizer nauczył się segmentów z słów kluczowych Pythona, nawiasów JSON, flag powłoki. Model wytrenowany na hasłach słownikowych i dialogach. Tylko 36,4% segmentów pokrywało się z próbką ważoną programem treningowym. Pozostałe 63,6% slotów słownictwa zostało zaalokowane na segmenty, których model nigdy nie napotka w czasie treningu.
Dlaczego to ma znaczenie
Każdy wpis w słowniku zużywa parametry osadzenia: jeden wiersz macierzy osadzeń o kształcie V × d_model (omówione w aktywności 4). Przy V = 4353 i d_model = 384, każdy slot słownictwa kosztuje 384 liczby zmiennoprzecinkowe. Marnowanie 63,6% marnuje 63,6% macierzy osadzeń na dane, których model nigdy nie widzi.
Sformułuj regułę diety
Jak duży powinien być N
Przegląd nauki o słowniku
ANDREA-120M przeprowadziła eksperyment nauki o słowniku: trenuj tokenizery Harris przy różnych wartościach N (żądane segmenty) na tym samym korpusie firehose o 1,25B znakach. Zmierz, ile segmentów tokenizator faktycznie znajdzie. Narysuj wyniki.
| Żądane N | Rzeczywiste segmenty znalezione | Status |
|---|---|---|
| 2,048 | 2,048 | Nienasycony (miejsce na wzrost) |
| 4,096 | 4,096 | Nienasycony |
| 8,192 | 8,192 | Punkt nasycenia |
| 16,384 | 13,106 | Korpus wyczerpany |
Co oznacza nasycenie
Przy małym N korpus ma mnóstwo powtarzających się wzorców; tokenizator wypełnia każdy slot, o który prosi. Przy dużym N tokenizator kończą mu się statystycznie znaczące granice. Korpus liczący 1,25 miliarda znaków zawiera około 13 106 różnych segmentów w kształcie morfemów powyżej progu częstotliwości. Żądanie 16 384 daje 13 106; pozostałe 3278 slotów jest uzupełnianych lub pozostawionych pustych.
Nasycenie: punkt, w którym żądane N = znalezione N. Poza nasyceniem tokenizator nie może odkryć więcej segmentów bez rozcieńczania jakości (obniżania progów częstotliwości i akceptowania szumu).
Sweet Spot przy 8192
ANDREA-120M wybrała N = 8192. Uzasadnienie:
- Poniżej 8192 (np. 4096): słownik niedostatecznie obejmuje powszechne morfemy; sekwencje rozpadają się na więcej tokenów; przepustowość spada.
- Przy 8192: każdy slot segmentu mapuje się na rzeczywisty, powtarzający się wzorzec w korpusie.
- Powyżej 8192: malejące zwroty; 13,106 < 16,384 oznacza marnowanie slotów.
Ostateczny słownik ANDREA-120M: 256 + 8192 + 1 = 8449 tokenów. Średnia kompresja: 5,91 bajtów UTF-8 na token, co oznacza, że każdy token zastępuje ~5,9 bajtów surowego tekstu. To proporcja określa efektywny kontekst modelu: przy 1024 tokenach × 5,91 bajtów/token, ANDREA-120M odczytuje około 6050 znaków kontekstu na jedną przód-pass.
Powyżej czy poniżej saturacji
Skąd wzięło się 63,6%
Liczenie zmarnowanych slotów
Tokenizer ANDREA-12M wyszkolony na surowym pliku megachat-v8.txt (zażądano 4096 segmentów, znaleziono). Zespół pobrał próbkę ważoną curriculum: korpus ważony według częstotliwości, z jaką każdy źródło było wybierane przez bandyta. Ponownie przeprowadzili analizę Harrisa na tej ważonej próbce i zapytali: ile z oryginalnych 4096 segmentów nadal się pojawia?
Wynik: 36,4% nakładania się. 1491 z 4096 segmentów pasowało do ważenia curriculum. Pozostałe 2605 segmentów pochodziło ze źródeł wykluczonych przez model.
63,6% slotów słownictwa zostało zaalokowanych na bajty, których model nigdy nie widział.
Koszt osadzenia
Każdy wpis słownictwa zajmuje jeden wiersz macierzy osadzeń o kształcie (V, d_model). Dla ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Parametry osadzenia = V × d_model = 4353 × 384 = 1 671 552 parametrów
63,6% tych parametrów pozostało niewykorzystanych do treningu konwersacyjnego. 1 063 107 parametrów przydzielonych, 0 sygnału nagrody. ANDREA-12M przetrwało, ponieważ 256 bazowych bajtów zawsze obejmuje dowolny znak; ale pojemność na parametr spadła gwałtownie.
Jak ANDREA-120M to naprawiło
Tokenizer ANDREA-120M trenowany na pełnym strumieniu danych (1,25B znaków, 21 źródeł) przy saturacji N = 8192. Korpus treningowy = ten sam strumień danych. Wyrównanie diety: 100%. Wynikowe nakładanie się na próbce ważonej wagą czatu: 36,5%. (Uwaga: 36,5% to nakładanie się, nie pokrycie; czat sam w sobie jest podzbiorem pełnego strumienia danych, więc ta liczba zachowuje się inaczej niż 36,4% w 12M.)
Skuteczna kompresja: 5,91 bajtów UTF-8 na token. Macierz osadzeń ANDREA-120M: 8449 × 768 = 6 488 832 parametry. Każdy parametr otrzymuje sygnał nagrody, ponieważ każdy segment mapuje się na tekst, na którym model faktycznie trenuje.
Pokrycie kontra nakładanie się
Dlaczego 5,91 bajtów na token ma znaczenie
Wskaźnik kompresji
Średnia liczba bajtów UTF-8 na token mierzy, ile surowego tekstu kompresuje każdy wpis słownika. ANDREA-120M średnio 5,91. Model z krótszymi kawałkami (3 bajty/token) odczytuje mniej kontekstu na przejście w przód; model z dłuższymi kawałkami (8 bajtów/token) odczytuje więcej, ale trenuje wolniej (każdy kawałek potrzebuje więcej próbek, by dobrze się nauczyć).
Skuteczny kontekst
| Ilość | Wartość |
|---|---|
| Okno kontekstu tokenów | 1,024 tokeny |
| Średnia liczba bajtów na token | 5.91 |
| Skuteczny kontekst znakowy | 1024 × 5.91 ≈ 6,050 |
Około 6000 znaków UTF-8 mieści się w jednym forward passie ANDREA-120M. Strona gęstej prozy angielskiej ma ~3000-4000 znaków; ANDREA czyta około półtorej strony na pass.
Dieta Zacieśnia Kompresję
Dobrze wyrównany tokenizer kompresuje lepiej. Gdy tokenizer uczy się segmentów, które powtarzają się w korpusie treningowym, więcej tekstu mieści się na token. Słabo wyrównany tokenizer ANDREA-12M kompresował gorzej na czacie (więcej bajtów zużytych na fragmenty byte-fallback, ponieważ segmenty czatu były rzadsze w słowniku). Dieta-wyrównany tokenizer ANDREA-120M trzyma kawałek w kształcie czatu na szybkiej ścieżce & rzadkie skrypty na byte fallback.
Aktywność 4 Kontynuowana
Aktywność 4 (grow_a_language_model_embeddings) omawia, co dzieje się z tymi 8449 wpisami słownika: stają się one wierszami macierzy embeddingów o kształcie V × d_model, następnie dodawane są uczone embeddingi pozycyjne, zanim popłyną do pierwszego bloku transformera.