
Zkusili jste si někdy položit otázku: Kolik znám slov? Náš český jazyk má podle Příručního slovníku jazyka českého přibližně 250 tisíc slov[1]. Aktivní slovní zásoba, kterou používáme při běžné konverzaci v českém jazyce, čítá 5 až 10 tisíc slov. Pasivní zásoba, tedy slova, kterým rozumíme, bývá několikanásobně vyšší a pohybuje se okolo 50 tisíc slov.
Jak je na tom umělá inteligence? Pamatuje si všechna slova z textů použitých ke strojovému učení? Umí zpracovat nová slova nebo je dokonce vytvářet? Odpovědi na tyto otázky získáme rozborem způsobu, jak velké jazykové modely kódují text do elektronické podoby, aby s ním mohly efektivně pracovat.
Nejprve malé opakování. Psaný text se skládá ze znaků. Existuje celá řada abeced a znakových sad. Jejich číselnou reprezentaci máme standardizovanou pomocí UNICODE[2], kde každý znak má přiřazen jednoznačný celočíselný kód. Najdeme zde opravdu všechno, co lze zobrazit na počítači, včetně například emotikonů. Díky UNICODE můžeme jakýkoli text uložit jako sekvenci číselných kódů. Ještě zmiňme, že při ukládání textu v UNICODE obvykle šetříme místem. Pro uložení kódu jakéhokoli znaku nám stačí čtyři bajty, ale většina textu se sestává ze znaků, které můžeme uložit do jednoho či dvou bajtů. UNICODE texty proto ukládáme jako komprimované pomocí algoritmu UTF-8, případně UTF-16[3]. To však nic nemění na tom, že jakýkoli text je uložen jako sekvence bajtů a každý bajt v této sekvenci má hodnotu mezi 0 a 255.
Znaky nebo bajty však nenesou dostatečnou informaci o významu textu. Daleko užitečnější jsou slova a jejich sekvence. Kódování slov do číselných identifikátorů však standardizováno není. Slov je příliš mnoho a vznikají mnohem rychleji než znaky, takže by vytvoření takového standardu jako je UNICODE pro znaky ani nebylo v našich silách.
Autoři velkých jazykových modelů proto zvolili kompromis. Text se před zpracováním převádí na tokeny. A tokeny také velký jazykový model generuje na svém výstupu, kde se zpětně převádí na text, který vnímáme jako odpověď modelu. Tokenům se přiřazují číselné kódy podobně jako znakům v UNICODE. Bohužel však neexistuje jediný standard, stále vznikají nové sady tokenů.
Sady tokenů s kódy mají svá značení. U každého jazykového modelu můžeme zjistit, jakou sadu tokenů používá. Mezi běžné sady dnes patří například cl100k_base nebo o200k_base. Číslo v názvu obvykle odpovídá počtu tokenů v sadě v tisících. Současné sady mívají desítky až stovky tisíc tokenů.
Co jsou tokeny? Kde se berou zmiňované sady tokenů? Za co platíme, když poskytovatel AI udává cenu za token?
Na tokeny můžeme pohlížet jako na krátké sekvence znaků. Ve skutečnosti jsou to však sekvence bajtů. Vstupní text se nejprve zakóduje pomocí UNICODE a efektivně uloží algoritmem UTF-8. Teprve pak se sekvence bajtů odpovídající vstupnímu textu rozdělují na tokeny.
Tokeny jsou různě dlouhé sekvence bajtů. I počty znaků, které tokeny reprezentují, se liší[4]. Tokeny jsou navrženy tak, aby nesly nějaký význam. Jedná se o frekventované sekvence bajtů v učebních textech. Každá sada tokenů musí obsahovat i základních 256 tokenů odpovídajících jednomu bajtu. Díky těmto krátkým tokenům je zaručeno, že se nám podaří tokenizovat jakýkoli text, i kdyby obsahoval neznámé znaky a slova. Při vlastní tokenizaci však dostávají přednost delší tokeny, pokud je sada obsahuje.
Sady tokenů vznikají strojovým učením. Pro vytvoření sady je nezbytné mít kolekci tréninkových textových dokumentů. Výsledná sada tokenů pak záleží na použité kolekci, tokenizačním algoritmu a předem zvolené velikosti sady tokenů.
Nejpoužívanějším algoritmem pro vytváření sad tokenů je BPE[5]. Jeho jediným parametrem je požadovaná velikost slovníku tokenů. Algoritmus vybere tokeny tak, aby co nejúsporněji reprezentovaly tréninkový text. Zároveň je však zaručeno, že sada tokenů dokáže reprezentovat jakýkoli jiný text. Jak funguje BPE si popíšeme v návazném blogu.
Ještě na okraj zmiňme, že sady tokenů používané velkými jazykovými modely obsahují navíc několik speciálních tokenů, které nereprezentují části textu, ale jeho vlastnosti. Například token označovaný zkratkou EOS[6] se vkládá na konec každé vstupní sekvence a naopak, když ho model vygeneruje, je to signál pro konec generování. Nebo token CLS[7] se záměrně vkládá před text, který bude velký jazykový model klasifikovat. Po jeho transformaci částí modelu zvanou enkodér pak tento token nese informaci o následném textu a slouží jako vstup do standardního klasifikačního modelu.
Ale zpět k běžným tokenům. Teď když víme, co jsou tokeny, můžeme si zodpovědět otázky na velikost slovní zásoby jazykového modelu zmíněné na začátku článku. Díky převádění textu na sekvenci bajtů neexistují pro velký jazykový model slova. Model vidí a generuje pouze tokeny. Není proto vhodné hovořit o zásobě slov, ale o zásobě tokenů. Její velikost je pro každý jazykový model předem známá a závisí výhradně na použité sadě tokenů. Zásoba tokenů se u dnešních modelů pohybuje v řádu desítek až stovek tisíc.
Jistě by bylo možné experimentálně zkoumat i slovní zásobu umělé inteligence. Modely toho ale o slovech moc neví, existují pro ně jen tokeny a z nich skládají texty. Díky tokenům dokáží také nová slova generovat[8] nebo porozumět na základě kontextu některým slovům, která se nevyskytla v učebních textech. Odstavce, věty, slova nebo slabiky jsou jazykovým modelům cizí. Zkuste například umělé inteligenci zadat úkol, aby spočetla slova nebo slabiky v zadaném textu. Zpravidla odpoví chybně[9].
Nakonec ještě připomeňme, že květnatost odpovědí zdánlivě související s aktivní slovní zásobou můžeme u generativní umělé inteligence ovlivnit i bez dodatečného učení velkých jazykových modelů, a to jednak nastavením teploty a jednak nastavením penalizace za opakování tokenů. Vyšší teplota zvyšuje pravděpodobnost generování méně často používaných tokenů, penalizace snižuje pravděpodobnost generování tokenů, které předcházely vygenerovanému tokenu. A samozřejmě nesmíme zapomenout na fakt, že velké jazykové modely ovládáme skrze prompty. Pokud model požádáme, aby odpovídal stroze, nebo květnatě, jistě nám vyhoví.
[1] Do tohoto počtu nezapočítáváme morfologické tvary slov.
[2] Záměrně nezmiňuji starší kódování znaků pomocí kódových stránek, jako je například Windows-1250. S kódovými stránkami velké jazykové modely nepracují.
[3] UTF = Unicode Transformation Format
[4] Některé tokeny ani není možné vyjádřit ve znacích, protože znaky mohou být v UTF-8 uloženy v několika bajtech a token nemusí začínat a končit na stejné pozici, kde začíná či končí znak.
[5] BPE = Byte Pair Encoding
[6] EOS = End Of Sequence
[7] CLS = CLaSsification token
[8] včetně jmen neexistujících osob, lokalit či organizací
[9] Některé chatovací služby jsou již na tyto pro jazykový model těžké otázky připraveny. Záměrně si odpovědi nezávisle kontrolují nebo volají specializované stringologické a NLP nástroje.
Právě tady přichází na řadu Text Analytics.
Využijte konzultace s odborníkem zdarma.
