ML Atlas

08 · LLM · 6 min czytania · aktualizacja

Co to jest perpleksja modelu językowego i jak ją czytać?

W skrócie

Perpleksja to e do potęgi średniej entropii krzyżowej na token. Na małym korpusie bigram z wygładzaniem ma 14,41 na zdaniach treningowych i 114,94 na nowych.

Co to jest

Perpleksja (perplexity) mierzy, jak bardzo model językowy jest „zaskoczony” tekstem, którego wcześniej nie widział. Model czyta tekst token po tokenie i dla każdego podaje prawdopodobieństwo tego tokenu, który rzeczywiście wystąpił. Średnia z −ln tych prawdopodobieństw to entropia krzyżowa na token, czyli ta sama strata, którą minimalizuje się podczas treningu. Perpleksja to e do potęgi tej średniej: PPL = exp(−(1/N) · Σ ln p(token_i | kontekst)).

Najprostsza interpretacja: perpleksja to efektywna liczba równie prawdopodobnych możliwości, między którymi model się waha. Model, który dla każdego z 126 słów słownika podaje po 1/126, ma perpleksję dokładnie 126. Model z perpleksją 10 jest średnio tak niepewny, jakby losował spośród 10 jednakowo możliwych tokenów. Pojęcie wprowadzili Jelinek, Mercer, Bahl i Baker w 1977 roku jako miarę trudności zadań rozpoznawania mowy, lepszą niż sama wielkość słownika.

Ta sama wielkość w bitach: log₂ PPL to średnia liczba bitów na token. Perpleksja 126 to 6,98 bitu, a perpleksja 2 — jeden bit.

Mechanizm — dlaczego tak działa

perpleksja na treningu i na nowym tekściePPL = exp(średnie −ln p prawdziwego tokenu)treningnowy tekstjednostajny126126unigram k = 174,44112,41bigram k = 0,114,41114,94Niska perpleksja na treningu nic nie znaczy.
Schemat: perpleksja na treningu i na nowym tekście

Dlaczego średnia logarytmów, a nie średnia prawdopodobieństw? Bo prawdopodobieństwo całego tekstu to iloczyn prawdopodobieństw kolejnych tokenów. Logarytm zamienia iloczyn w sumę, a podzielenie przez N daje wynik niezależny od długości tekstu. Perpleksja to więc odwrotność średniej geometrycznej prawdopodobieństw przypisanych prawdziwym tokenom. Średnia geometryczna jest bezlitosna dla zer: wystarczy jeden token z prawdopodobieństwem 0, a cały tekst ma prawdopodobieństwo 0 i perpleksję nieskończoną.

Stąd potrzeba wygładzania. Model zliczający, jak często słowo b występuje po słowie a (bigram), na nowym tekście szybko natrafia na pary, których nie widział. Wygładzanie „dodaj k” dokłada k do każdego licznika, więc żadne prawdopodobieństwo nie jest zerem. Interpolacja miesza bigram z modelem pojedynczych słów (unigramem): λ · p_bigram + (1 − λ) · p_unigram. Słowa spoza słownika zamienia się na wspólny symbol ⟨unk⟩, który też dostaje kawałek prawdopodobieństwa. Chen i Goodman (1999) porównali wiele takich metod na dużych korpusach.

Perpleksja liczona na tekście treningowym jest myląca z tego samego powodu co dokładność na zbiorze treningowym: model, który zapamiętał tekst, ma niską perpleksję na nim i wysoką na nowym. Liczy się tylko perpleksja na tekście odłożonym.

Perpleksje są porównywalne tylko przy tym samym podziale tekstu na tokeny i tym samym zbiorze testowym. Model z mniejszym słownikiem albo z krótszymi tokenami ma mniej możliwości na token i zwykle niższą perpleksję na token, choć tekst jako całość przewiduje wcale nie lepiej. Uczciwszą jednostką jest liczba bitów na znak albo na bajt: łączna liczba bitów dla całego tekstu podzielona przez liczbę znaków. Dokumentacja Hugging Face zaznacza wprost, że tokenizacja bezpośrednio wpływa na perpleksję i trzeba ją uwzględnić przy porównaniach.

Na przykładzie

Korpus to 52 polskie zdania napisane do ćwiczenia w kursie (np. „Każdego ranka piję filiżankę herbaty.”). To bardzo mały tekst — wyniki ilustrują mechanizm, a nie zachowanie prawdziwych modeli. Co czwarte zdanie odkładamy do testu: 39 zdań treningowych (212 tokenów) i 13 testowych (77 tokenów). Tokeny to słowa małymi literami i znacznik końca zdania; słownik treningowy ma 125 typów, plus ⟨unk⟩.

Model jednostajny ma perpleksję 126 na każdym tekście — to dokładnie liczba możliwości. Unigram bez wygładzania ma na treningu 71,71, a na teście nieskończoność: 33 z 77 tokenów testowych (42,9%) to słowa, których w treningu nie było. Polska odmiana robi swoje — „filiżanka” jest w teście, w treningu tylko „filiżankę”.

Bigram bez wygładzania na zdaniach treningowych ma perpleksję 2,51: model waha się średnio między dwoma, trzema słowami. Na teście znów nieskończoność — 65 z 77 par testowych (84,4%) nie wystąpiło w treningu. Z wygładzaniem perpleksja na teście staje się skończona, ale luka jest ogromna. Bigram z k = 0,1: 14,41 na treningu i 114,94 na teście. Z k = 0,01: 4,14 i 161,49 — gorzej niż model jednostajny. Interpolacja z λ = 0,9: 2,77 i 526,31. Im mocniej model dopasowuje się do treningu, tym gorzej na nowym tekście.

Najlepszy na teście okazał się unigram z k = 1: 112,41, niewiele lepiej niż 126 z modelu jednostajnego. A unigram nie zna kolejności słów: „piję filiżankę herbaty” i „herbaty filiżankę piję” dostają u niego to samo prawdopodobieństwo. Niższa perpleksja nie oznacza tu lepszego tekstu. Przy innych podziałach (co czwarte zdanie od pierwszego, drugiego lub trzeciego) wyniki się przesuwają: unigram z k = 1 od 105,09 do 117,34, bigram z k = 0,1 od 98,19 do 123,12. Na tak małym korpusie kolejność modeli zależy od podziału.

Porównanie tokenizacji. Bigram znakowy (34 symbole: litery, spacja i koniec zdania) ma na tym samym teście perpleksję 12,73 na znak, czyli 3,67 bitu na znak. Bigram słowny z k = 0,1, przeliczony na znaki, daje 1,38 bitu na znak — pozornie prawie trzy razy lepiej. Ale to złudzenie: model słowny za każde z 33 nieznanych słów płaci tylko raz, za symbol ⟨unk⟩, i nie musi go przeliterować. Model znakowy przewiduje cały tekst, łącznie z nieznanymi słowami. Liczby różnią się, bo modele rozwiązują inne zadania.

Jak to policzono
  • Korpus: site-src/course/labs/next-token.corpus.js, część pl — 52 zdania, jedno na linię, napisane do kursu (nie z książki). Tokeny: wyrażenie regularne z ćwiczenia kursu ([\p{L}\p{N}]+(?:['’-][\p{L}\p{N}]+)* oraz .!? jako koniec zdania), małe litery; kontekst pierwszego słowa to znacznik początku zdania.
  • Podział: zdania o numerach i z i mod 4 = 3 → test (13 zdań, 77 tokenów), reszta → trening (39 zdań, 212 tokenów). Słownik treningowy 125 typów (z końcem zdania) + ⟨unk⟩ = 126. Słowa testowe spoza słownika: 33 tokeny, 30 różnych.
  • Perpleksja trening / test: jednostajny 126 / 126; unigram bez wygładzania 71,71 / ∞; unigram k = 1: 74,44 / 112,41; unigram k = 0,1: 71,80 / 236,07; bigram bez wygładzania 2,51 / ∞; bigram k = 1: 60,67 / 116,71; k = 0,1: 14,41 / 114,94; k = 0,01: 4,14 / 161,49. Interpolacja bigramu (bez wygładzania) z unigramem k = 1: λ = 0,3: 7,19 / 116,24; λ = 0,5: 4,68 / 145,68; λ = 0,7: 3,47 / 215,08; λ = 0,9: 2,77 / 526,31. Wygładzanie: p = (licznik + k) / (suma + 126·k).
  • Pary testowe niewidziane w treningu: 65 z 77. Pozostałe trzy podziały (i mod 4 = 0, 1, 2): słowa nieznane 44,3%, 40,8%, 33,8% tokenów testowych; jednostajny 126, 127, 132; unigram k = 1: 117,34; 109,18; 105,09; bigram k = 0,1: 123,12; 98,86; 98,19.
  • Znaki: zdanie jako znaki ze spacjami + koniec zdania, bigram znakowy k = 0,1 na 34 symbolach + ⟨unk⟩: perpleksja 12,73 na 381 znakach testu (3,67 bitu/znak, łącznie 1398 bitów). Bigram słowny k = 0,1: łącznie 527 bitów → 1,38 bitu/znak.
  • Python 3.13, tylko biblioteka standardowa (re, math, collections.Counter); bez losowości.

W praktyce

  • Porównuj perpleksję tylko przy tym samym tokenizatorze, tym samym tekście testowym i tej samej obsłudze słów nieznanych. Między różnymi tokenizatorami raportuj bity na znak lub bajt.
  • Liczy się wyłącznie perpleksja na tekście odłożonym, którego model nie widział. Sprawdź, czy tekst testowy nie wyciekł do danych treningowych — wtedy perpleksja jest zaniżona.
  • W transformers perpleksja to exp(loss) z modelu przyczynowego; przy tekstach dłuższych niż okno kontekstu licz ją oknem przesuwnym, bo wynik zależy od długości dostępnego kontekstu.
  • Perpleksja dobrze śledzi postęp pretreningu i porównuje warianty tego samego modelu. Nie mierzy prawdziwości, przydatności ani bezpieczeństwa odpowiedzi — do tego potrzebne są osobne testy zadań.
  • Gdzie się psuje: słowa nieznane zamieniane na jeden symbol ⟨unk⟩ sztucznie obniżają perpleksję; mniejszy słownik też; model może mieć niską perpleksję, a pisać tekst bez sensu, jak unigram w przykładzie.

Najczęstsze pytania

Czy niższa perpleksja oznacza lepszy model?
Tylko przy tym samym tokenizatorze i tym samym tekście testowym, i tylko w sensie „lepiej przewiduje ten rodzaj tekstu”. Model nagradzany za przewidywanie tekstu z internetu przewiduje także jego błędy. Jakość odpowiedzi na pytania trzeba mierzyć osobno.
Jak przeliczyć perpleksję na bity i stratę?
Strata (entropia krzyżowa w natach) = ln PPL, bity na token = log₂ PPL. Strata 2 naty to perpleksja e² ≈ 7,39 i 2,89 bitu na token.
Skąd nieskończona perpleksja?
Z jednego tokenu, któremu model dał prawdopodobieństwo zero. W przykładzie unigram bez wygładzania trafia na 33 słowa nieznane, a bigram na 65 niewidzianych par. Każdy praktyczny model musi zostawić trochę prawdopodobieństwa na rzeczy niewidziane.
Czy perpleksja 126 to dużo?
Zależy od słownika. Dla modelu jednostajnego na 126 słowach to dokładnie zgadywanie na ślepo. Dla modelu z 50 000 tokenów byłaby to duża poprawa nad zgadywaniem. Sama liczba bez słownika i zbioru testowego niewiele mówi.

Źródła

Zobacz też

Entropia krzyżowa (log loss) InteraktywneEntropia krzyżowa karze model ujemnym logarytmem prawdopodobieństwa poprawnej odpowiedzi. Na danych Breast Cancer najlepsza cecha daje log loss 0,222.Entropia i dywergencja KLEntropia mierzy średnią niepewność rozkładu w bitach, dywergencja KL — ile bitów tracimy złym kodem. Gatunek pingwinów Palmer ma entropię 1,514 bita.Przewidywanie następnego tokenu InteraktywneLLM liczy rozkład prawdopodobieństwa następnego tokenu i tworzy tekst, losując token po tokenie. Po „Kot siedzi na” słowo „parapecie” dostaje 35%.Tokenizacja i BPE InteraktywneTokenizacja dzieli tekst na tokeny, a BPE łączy najczęstsze pary symboli. Po 20 scaleniach „kot siedzi na kanapie” to 10 tokenów, po 80 scaleniach już tylko 4.Ewaluacja modeli językowychLLM ocenia się benchmarkami, testami kodu, porównaniami ludzi i innym modelem. Przy 80% trafności na 500 pytaniach przedział ufności 95% ma aż ±3,5 punktu.Przeuczenie i niedouczenie InteraktywnePrzeuczony model zapamiętuje szum ze zbioru treningowego i gorzej działa na nowych danych, a niedouczony jest za prosty, by uchwycić nawet główny wzorzec.Prawo Zipfa InteraktywneCzęstość słowa jest w przybliżeniu odwrotnie proporcjonalna do jego miejsca w rankingu. W tekstach Atlasu prosta log–log ma nachylenie −0,92, blisko −1.Prawo Goodharta InteraktywneGdy miara staje się celem, przestaje być dobrą miarą. Wśród 100 000 kandydatów górne 10% według zaszumionej miary ma miarę 2,49, a prawdziwą jakość tylko 1,23.