Výzkumníci objevili, že populární software ChatGPT se začne chovat velmi podivně, pokud se mu na vstup napíšou konkrétní zdánlivě nesmyslná sousloví: SolidGoldMagikarp (s mezerou na začátku), TheNitromeFan, attRot a další. Buď si je poplete s úplně nesouvisejícím slovem, nečekaně skončí, nebo začne generovat nesmysly. Stejná chyba postihuje i starší verze GPT-3 a GPT-2. Ve veřejných instancích provozovaných společností OpenAI byla ale již záplatována, takže si to tam nezkusíte.
Vyšetřování odhalilo, že příčinou je použitý slovník tokenů – GPT totiž nefunguje po znacích ani po slovech, ale po vygenerovaných skupinách znaků. Když tento slovník dělali, tak postahovali mnoho stránek z internetu, a tím získali i velké množství „divného“ obsahu, například subreddit zabývající se počítáním (uživatel napíše „1“, někdo na něj odpoví „2“, někdo na to odpoví „3“ atd.; už tam jsou desítky milionů příspěvků), automaticky vytvořené reporty a logy z hraní různých multiplayerových online her, rozbitý e-shop, který generoval obrovské množství stránek s kusy šablonovacího kódu atd.
Na tomto datasetu pak pustili Byte pair encoding (BPE), což ve zkratce funguje tak, že často se vyskytujícím posloupnostem znaků přiřadí samostatné kódy, méně časté posloupnosti to rozdělí a zakóduje po slabikách/jednotlivých znacích. Cílem je, aby bylo možno text reprezentovat pomocí co nejméně tokenů, samozřejmě kvůli datové úspornosti – trochu jako Huffmanovo kódování. Bohužel nejčastěji se vyskytující posloupnosti znaků v tom datasetu byly například SolidGoldMagikarp, TheNitromeFan (uživatelská jména lidí, kteří poslali nejvíc počítacích příspěvků), externalActionCode (klíč objevující se v JSONech nějakého vládního systému pro veřejné zakázky), BuyableInstoreAndOnline (proměnná z rozbitého eshopu), TPPStreamerBot (bot reportující průběh online utkání) a pak různé technické chyby jako ÃÂÃÂÃÂÃÂ (chybné kódování znaků), netisknutelné ASCII znaky atd.
Už tohle samotné znamená, že při běhu GPT se několik procent paměti plýtvá na tyto neužitečné věci, a není mi jasné, proč ten vygenerovaný slovník nikdo neprošel, nevšiml si toho a nepročistil ho. Ale pokračuje to ještě lépe: až po tom, co vygenerovali tento slovník, tak data začali čistit. To mimo jiné zahrnuje odstranění hlaviček těch redditových příspěvků, vyházení automaticky generovaného a podivného obsahu jako jsou ty logy a JSONy atd. A až na výsledku se pak model trénuje.
Výsledkem je, že existují tokeny, které GPT-3 při trénování v podstatě nikdy nevidělo, takže v první embedovací vrstvě zůstaly náhodně vygenerované váhy, kterými se model inicializoval, a tyto váhy mohou produkovat úplně nečekaná čísla, na které zbytek modelu není připraven. Výsledek je, že když na vstup tento token dáte, tak to vyvolá pozorované nečekané chování. Asi ne úplně dobrá biologická analogie je, že máte v mozku neurony, které nikdy v životě nebyly aktivní, a teď vám je někdo jednorázově aktivuje a stanou se úplně nedefinované věci.
GPT-3, ChatGPT a všechny další verze zdá se sdílí originální slovník pro GPT-2 z roku 2019. Hotfix chyby je, že se na vstupu ty tokeny, které způsobují problémy, rozsekají a zaembedují po jednotlivých znacích; plná oprava do budoucna je vygenerování slovníku bez těchto artefaktů.