Přeskočit na obsah

Jak funguje jazykový model · lekce 4 z 10 · 12 min čtení

Tokeny: jak model vidí text

Jazykový model nečte písmena ani slova, ale tokeny – očíslované kousky textu. Uvidíš je na vlastní oči a pochopíš, proč kvůli nim čeština stojí víc, proč se platí „za tokeny“ a proč model neumí spočítat písmena ve slově.

Když čteš tuhle větu, vidíš písmena, která skládáš do slov, a slova do významu. Zní to samozřejmě, a proto většinu lidí překvapí, že jazykový model (třeba ten, který stojí za ChatGPT, Claudem nebo Gemini) takhle text nevidí vůbec. Nevidí písmena a nevidí ani celá slova. Vidí řadu čísel. Každé číslo zastupuje kousek textu, kterému se říká token.

V téhle lekci zjistíš, co přesně token je, podíváš se na skutečné tokeny skutečného modelu a pochopíš, proč na nich záleží víc, než by se zdálo: kvůli nim se AI účtuje, kvůli nim má limity a kvůli nim dělá chyby, které by u tak schopného systému nikdo nečekal.

Proč model nečte písmena

Počítač umí pracovat jen s čísly. Neuronová síť, o které ses dozvěděl v lekci Jak se stroje učí, je ve skutečnosti obrovský výpočet: na vstupu čísla, uvnitř násobení a sčítání, na výstupu zase čísla. Než model může s textem cokoli udělat, musí ho někdo převést na čísla. Otázka zní jen: na jak velké kousky ho rozsekat?

Nabízejí se dvě krajní možnosti a obě mají háček:

  • Po písmenech. Písmen je málo (pár desítek plus interpunkce), takže by slovník byl malý. Jenže text by byl strašně dlouhý: každá věta by se rozpadla na stovky kousků a model by musel teprve složitě zjišťovat, že „k“, „o“, „č“, „k“, „a“ dohromady znamená zvíře.
  • Po celých slovech. Text by byl krátký, ale slovník by byl nekonečný. Jen čeština má obrovské množství tvarů slov (kočka, kočky, kočce, kočkou, kočkám…), k tomu jména, překlepy, nová slova a cizí jazyky. Model by nikdy nemohl znát všechna.

Praxe zvolila střední cestu: kousky slov. Časté slovo dostane vlastní kousek celé, méně časté slovo se složí ze dvou nebo tří kousků a úplně neznámé slovo se v nejhorším případě poskládá z jednotlivých písmen nebo bajtů. Tak se dá zapsat úplně jakýkoli text, a přitom zůstane rozumně krátký.

Token(token)
Kousek textu, se kterým jazykový model pracuje jako s jednou jednotkou. Může to být celé slovo, část slova, jedno písmeno, mezera s několika písmeny nebo interpunkční znaménko. Každý token má ve slovníku modelu své číslo (ID).
Tokenizér(tokenizer)
Program, který text rozseká na tokeny a převede je na čísla (a na konci zase zpátky na text). Není to součást „inteligence“ modelu, je to pevně daný převodník, který vznikl ještě před tréninkem.

Podívej se sám

Níže je skutečný tokenizér, který používají modely GPT-4o od OpenAI. Do pole můžeš napsat cokoli. Každý barevný dílek je jeden token a malé číslo pod ním je jeho ID, tedy pořadové číslo ve slovníku modelu. Znak ␣ označuje mezeru, která k tokenu patří.

Vyzkoušej si: jak model vidí text

Napiš cokoli. Každý barevný dílek je jeden token, číslo pod ním je jeho ID ve slovníku modelu.

… tokenů12 slov92 znaků

Načítám tokenizér…

Znak ␣ je mezera, která patří k tokenu. Tokenizér je skutečný (modely GPT-4o od OpenAI); jiné modely dělí text trochu jinak, princip je stejný.

Všimni si několika věcí, které vidíš hned v ukázkové větě:

  • Mezera obvykle patří na začátek tokenu. Token není „ani“, ale „␣ani“. Pro model je slovo na začátku věty a totéž slovo uprostřed věty (s mezerou před sebou) technicky jiný token.
  • Anglická slova zůstávají celá. „␣Artificial“, „␣intelligence“, „␣reads“, „␣tokens“: každé slovo jeden token.
  • Česká slova se lámou. „Umělá“ se rozpadne na tři kousky („Um“, „ěl“, „á“), „nečte“ také na tři, „písmena“ na tři. A „tokeny“ je „␣token“ plus „y“: model zná anglické slovo token a českou koncovku k němu musí přilepit.
  • Čísla pod dílky nic neznamenají sama o sobě. ID 13 není „menší“ ani „důležitější“ než ID 50 000. Je to jen pořadí ve slovníku, jako číslo šuplíku v obrovské skříni.

Slovník modelu: desítky až stovky tisíc kousků

Každý model má pevně daný slovník tokenů (vocabulary). Je to prostě seznam všech kousků, které zná, a každý má své číslo. Velikost slovníku se liší model od modelu a v průběhu let rostla. Starší GPT-2 z roku 2019 měl něco přes 50 tisíc tokenů, Llama 3 od Mety má podle jejích autorů 128 tisíc a tokenizér GPT-4o, který máš v ukázce, jich má zhruba 200 tisíc (proto v ukázce vidíš i ID přes sto tisíc).

Ze slovníku plyne důležitá věc: model nikdy „nevidí“ text, který jsi napsal. Dostane jen řadu čísel, třeba 18783, 47856, 449… a všechno, co s textem dělá, se odehrává nad těmito čísly. Když pak odpovídá, také produkuje čísla, která tokenizér na konci převede zpátky na text, který čteš.

Proč čeština potřebuje víc tokenů

Zkus si v ukázce napsat stejnou větu česky a anglicky. Třeba „Dobrý den, jak se máte?“ a „Hello, how are you?“. Pak porovnej údaj „tokenu na slovo“. U angličtiny vychází nižší (interpunkce se počítá jako samostatný token, takže ani tam to není přesně jedna), u češtiny obvykle znatelně vyšší. Proč?

Slovník se učil hlavně na angličtině. Tokenizér vzniká tak, že se z obrovského množství textu vybírají kousky, které se v něm nejčastěji opakují (jak přesně, uvidíš v rozbalovacím rámečku níže). Velká část textu na internetu je anglicky, a tak se do slovníku dostala anglická slova celá. Česká slova jsou v trénovacích textech vzácnější, takže pro ně ve slovníku zbylo méně „hotových dílů“.

Čeština skloňuje a časuje. Angličtina má „cat“ a „cats“. Čeština má kočka, kočky, kočce, kočku, kočko, kočkou, kočkám, kočkách, kočkami. Všechny tyhle tvary se ve slovníku těžko vejdou zvlášť, a tak se slovo rozloží na kmen a koncovku. Zkus si napsat „kočka“, „kočkám“ a „cats“ a sleduj, kolik dílků vznikne.

Diakritika. Písmena jako ě, ř, ů nejsou v počítači jeden bajt, ale dva. Tokenizér proto někdy samotné „ě“ nebo „ř“ drží jako samostatný token (v ukázce uvidíš „ě“ jako vlastní dílek třeba ve slově „jahodě“).

Přesný poměr tu schválně neuvádím, protože se liší podle tokenizéru, podle textu (úřední dopis, chat, programový kód) i podle verze modelu a novější tokenizéry češtině pomáhají víc než starší. Nejlepší je ho změřit: vlož do ukázky odstavec ze svého běžného firemního textu a podívej se.

Co z toho plyne v praxi

Platí se za tokeny a limity jsou v tokenech

Když firma používá AI přes API (tedy napojenou do vlastních systémů, ne přes chatovací okno), platí podle počtu tokenů: zvlášť za tokeny, které modelu pošle (vstup), a zvlášť za tokeny, které model napíše (výstup). Výstupní tokeny bývají dražší. Ceníky výrobců proto uvádějí ceny „za milion tokenů“.

Také limity jsou v tokenech: kolik textu model zvládne najednou přečíst (o tom bude lekce Kontextové okno) a kolik maximálně napíše v jedné odpovědi. A protože čeština spotřebuje víc tokenů na stejný obsah, stejná práce v češtině typicky stojí víc a do limitu se jí vejde méně než v angličtině.

Pro hrubý odhad uvádějí výrobci pravidla pro angličtinu. Google v dokumentaci Gemini píše, že token odpovídá zhruba 4 znakům a 100 tokenů zhruba 60–80 anglickým slovům. Pro češtinu tato pravidla neplatí, tam počítej s víc tokeny a raději si to změř.

Jak si udělat vlastní odhad

Chceš vědět, kolik bude stát nechat AI shrnout tisíc zákaznických e-mailů měsíčně?

  1. Vezmi deset typických e-mailů a vlož je do tokenizéru (do ukázky výše nebo do nástroje výrobce, kterého chceš používat).
  2. Zjisti průměrný počet tokenů na e-mail a přičti tokeny instrukce a odhad délky shrnutí.
  3. Vynásob tisícem a ceníkem výrobce za vstupní a výstupní tokeny.

Vyjde ti řádový odhad, který je mnohem přesnější než jakékoli „jedno slovo je asi token“.

Proč model neumí spočítat písmena ve slově

Slavným příkladem je anglická otázka „How many r's are in strawberry?“ (kolik písmen r je ve slově jahoda). Modely na ni dlouho a sebevědomě odpovídaly špatně. Když teď víš o tokenech, chápeš proč: model slovo „strawberry“ nevidí jako s-t-r-a-w-b-e-r-r-y. Napiš si ho do ukázky. Samotné se rozpadne na tři tokeny („st“, „raw“, „berry“), a když je uprostřed věty s mezerou před sebou, je to dokonce jediný token. Model tedy dostane jedno číslo a má říct, kolikrát je v něm písmeno r.

Je to, jako by ti někdo ukázal obrázek jahody a zeptal se, kolik je v něm písmen r. Odpověď můžeš znát jen tehdy, když sis někdy dřív zapamatoval, jak se to slovo píše. Model se pravopis jednotlivých tokenů během tréninku částečně naučí (z textů, kde se slova hláskují), ale nespolehlivě. Proto má potíže s úlohami jako:

  • spočítat písmena nebo slabiky ve slově,
  • napsat slovo pozpátku,
  • najít slova, která začínají nebo končí určitým písmenem,
  • dodržet přesný počet znaků (třeba u nadpisu „maximálně 60 znaků“),
  • rýmy a slovní hříčky postavené na pravopisu.

Novější modely v tom bývají lepší. Částečně proto, že si úlohu mohou rozepsat po písmenech (každé písmeno je pak samostatný token), a částečně proto, že na podobných úlohách byly cíleně trénované. Princip ale platí dál: počítání znaků je pro model nepřirozené.

Čísla a překlepy

Tokenizér rozděluje i čísla, a to ne vždy po logických jednotkách. Dlouhé číslo se může rozpadnout na skupinky číslic, které nesouvisejí s řády (jednotky, tisíce…). I to je jeden z důvodů, proč jazykové modely historicky chybovaly v aritmetice s velkými čísly. A překlep? Ten rozbije známé slovo na neobvyklé kousky. Model si s tím většinou poradí, protože se během tréninku setkal s nespočtem překlepů, ale čím zvláštnější tokeny, tím větší šance na nedorozumění.

Do hloubkyJak vzniká slovník tokenů: byte-pair encoding

Většina dnešních jazykových modelů používá metodu zvanou byte-pair encoding (BPE), česky zhruba „kódování párů bajtů“. Do zpracování přirozeného jazyka ji v roce 2015 přinesli Rico Sennrich, Barry Haddow a Alexandra Birch v článku o strojovém překladu vzácných slov. Původně šlo o jednoduchou metodu komprese dat.

Princip je překvapivě prostý. Představ si, že máš obrovské množství textu a chceš slovník o velikosti, řekněme, 200 000 položek:

  1. Začni od nejmenších kousků. Na začátku slovník obsahuje jen jednotlivé znaky. Moderní tokenizéry (už od GPT-2) začínají dokonce od jednotlivých bajtů, kterých je jen 256. Díky tomu jde zapsat úplně jakýkoli text, včetně emoji nebo čínštiny, a nikdy nenastane situace „tohle neznám“.
  2. Spočítej sousední dvojice. Projdi celý text a zjisti, která dvojice sousedních kousků se vyskytuje nejčastěji. V angličtině to může být třeba „t“ + „h“.
  3. Slep ji. Nejčastější dvojici přidej do slovníku jako nový kousek („th“) a všude v textu ji nahraď.
  4. Opakuj. Znovu spočítej dvojice (teď už třeba „th“ + „e“ = „the“) a slep tu nejčastější. A znovu. A znovu.
  5. Skonči, až má slovník požadovanou velikost.

Výsledkem je seznam „slepovacích pravidel“ v pořadí, jak vznikala. Když pak tokenizér dostane nový text, rozdělí ho na bajty a aplikuje stejná pravidla ve stejném pořadí. Časté sekvence (celá anglická slova, běžné předpony a koncovky) se slepí do jednoho tokenu, vzácné zůstanou rozdrobené.

Z toho přímo plyne, proč je čeština „dražší“: nejčastější dvojice se počítají na textu, ze kterého se tokenizér učí, a když v něm převládá angličtina, slepují se hlavně anglické kousky. Novější tokenizéry s větším slovníkem a vícejazyčnými daty dávají jiným jazykům víc prostoru, proto se poměr časem zlepšuje.

Dvě technické poznámky navíc:

  • Před samotným BPE se text obvykle hrubě rozdělí podle pravidel (mezery, interpunkce, číslice), aby se třeba neslepil konec jednoho slova se začátkem dalšího. Odtud pochází to, že mezera bývá na začátku tokenu.
  • Kromě BPE existují příbuzné metody (WordPiece, Unigram, nástroj SentencePiece). Liší se tím, jak vybírají, co slepit, ale výsledek je podobný: slovník kousků slov.

Shrnutí pro praxi

Tokeny jsou neviditelná vrstva mezi tebou a modelem. Většinou na ně nemusíš myslet, ale když něco nefunguje, často je vysvětlení právě tady. Zapamatuj si tři situace, kdy se o tokeny zajímat: když počítáš náklady nebo narážíš na limity, když model selhává v úloze na úrovni písmen nebo čísel, a když porovnáváš, jak se modelu daří v češtině oproti angličtině.

V další lekci se podíváš, co model s řadou tokenů vlastně dělá: předpovídá, jaký token přijde dál.

Co si odnést

  • Jazykový model nečte písmena ani slova, ale tokeny: kousky textu, z nichž každý má ve slovníku své číslo. Model pracuje jen s těmito čísly.
  • Slovník má podle modelu desítky až stovky tisíc tokenů a vzniká předem z velkého množství textu (nejčastěji metodou BPE).
  • Čeština obvykle potřebuje víc tokenů na slovo než angličtina (skloňování, diakritika, méně češtiny v datech). Změř si to na vlastním textu.
  • Ceny a limity se počítají v tokenech, takže stejná práce v češtině bývá dražší a do limitu se jí vejde méně.
  • Protože model nevidí jednotlivá písmena, spolehlivě nepočítá znaky, neobrací slova a chybuje v úlohách na úrovni pravopisu. Na takovou přesnost použij nástroj.

Zdroje a další čtení