Už nějakou dobu jsem se chystal vám vysvětlit naprosto klíčový aspekt ve fungování jazykových modelů typu GPT resp. chatbotů, které je pak využívají, jako je ChatGPT. Ale nechci vám tu dávat obecné bláboly a technické ptydepe, mám rád názorné ukázky. Dnes jsem u jednoho člověka na LinkedIn narazil na „vtipný“ příklad, na kterém tento aspekt mohu předvést a ukázat, jak se mu vyhnout.
Hahaha, samozřejmě následovaly posměšné reakce a spousta lidí si nejspíš pomyslela, jak je ten ChatGPT „blbej“.
Problém je ale právě nepochopení fungování ChatGPT a z toho vyplývající chybný dotaz, který vede k chybnému výsledku. Vysvětlím vám proto velmi krátce princip generování odpovědi od velkého jazykového modelu (LLM)
Jak LLM generuje odpověď
- LLM generuje odpověď postupně, něco jako autocorrect či našeptávač textu, s tím že ale na rozdíl od těch hloupých našeptavačů bere v úvahu celý předchozí kontext, tedy když je diskuse o počasí, tak po frázi „dneska bude svítit“ navrhne nejspíš „slunce“, když je to při večerní procházce tak navrhne „měsíc“ a když je to diskuse o klucích, co chodí v jeskyni a vždycky z nich někdo drží baterku, tak navrhne třeba „Petr“.
- Jenže ne „slovo“ od „slova“, předchozí bod byl zjednodušením – fakticky totiž uvažuje v „tokenech“, což jsou skupiny písmen/znaků (nebo i samotný znak), v zásadě jde o nějaké nejčastější shluky, přičemž ovšem se to bere nad celou bází onoho modelu, která je většinou v angličtině, takže zatímco průměrný token v angličtině má 4 písmena, v češtině jen asi 2 (a tak protože GPT API se hradí za počet tokenů, tak čeština vychází fakticky dvakrát dráž než angličtina).
- Pro češtinu bych doplnil ještě malý bod – GPT a zejména verze 3 resp. 3.5 má velmi malou znalost češtiny, takže se zdá, jako by někdy „uvažovala“ v angličtině. Čeština tvoří méně než promile všech textů, ze kterých se učila.
Kde je tedy problém?
Zapamatujte si hlavně ty první dva předchozí body, je to naprosto klíčové pro pochopení.
To, jak chápe ChatGPT (v3) zadaný dotaz ukazuje nástroj Tokenizer.
Každá barvička ukazuje jeden token, takže ChatGPT píše priv – á – tn í -, autom… be – z – pe – č – n – é …
Ještě to zvětším, ať to vidíte
A zkuste se teď zamyslet nad těmi dvěma body a zodpovězte si klíčovou otázku:
V jaký moment ChatGPT vidí písmeno „č“?
Nechám vám teď prostor na přemýšlení
.
.
.
Už to máte?
Tak jo – ChatGPT napsal „privátní, automatizované a bezpe“ a v tu chvíli už mu nezbývalo nic jiného, než napsat „č“. A teda když ho budete dlouho mučit, tak vám tam napíše nějaké jiné písmeno místo toho „č“.
A to je přesně to co jste viděli v tom záznamu komunikace.
Proč je nutné znát tento problém a jeho řešení?
Možná si říkáte „já nikdy nebudu potřebovat řešit nějaká písmenka, to mě nezajímá“. Jenže tenhle problém v odpovědích se vám projeví u spousty dalších dotazů, když je budete pokládat špatně.
Dejme tomu, že chcete vědět výsledek nějakého složitějšího příkladu, nebo obecně složitější odpověď zahrnující kombinaci znalosti z více oblastí. Je to jako kdybych vám dal nějakou logickou Einsteinovu hádanku, jinak známou jako Zebra, určitě je znáte, například …
Každý ze tří kamarádů, Tomáše, Josefa a Aleše, o prázdninách absolvoval turistické túry v jednom z pohoří Pyreneje, Šumava, Tatry a navštívil jedno z krásných měst Český Krumlov, Paříž, Brno.
- Josef si zopakoval svou Šumavskou túru.
- Ten, kdo jel do Tater, si cestou prohlédl krásy Českého Krumlova.
- Tomáš říkal, že v Tatrách byl už aspoň desetkrát, a jel jinam.
- Ten, kdo byl na Šumavě, uvěřil, že při špatném počasí je nejlepším
řešením navštívit krásy starého města Brna a své návštěvy nelitoval.
Tomáš byl ve městě …
… a dal vám 5 vteřin ať dopíšete, kde byl.
Nejspíš se netrefíte, napíšete prostě jedno z těch čtyřech měst.
Jak psát ChatGPT dotazy a dostávat správné odpovědi?
Řešení je jednoduché a vlastně úplně stejné, jako u těch Einsteinových hádanek. Dejte ChatGPT prostor na přemýšlení, nechte ho rozdělit identifikovat problém, rozdělit jej na podproblémy, stanovit správný postupný postup jejich řešení a postupně je řešit a na základě takto postupně získaných znalostí získat výsledek.
Ten syntaktický paralelismus a polyptoton (jo, vygooglil jsem si jak se říká těm opakovacím řečnickým figurám, snad to nemám blbě) v předchozím odstavci má za cíl, abyste si zapamatovali jedno slovo – POSTUPNĚ. A než to vysvětlím na příkladu, nejdřív malá odbočka
Chain of Though – Řetězec myšlení
Tomuhle „fíglu“ či postupu se říká Chain of Thought (můj překlad Řetězec myšlení) a jestli nevěříte mně a máte rádi vědečtější definice, doporučuji článek od AI týmu Google na jejich blogu Language Models Perform Reasoning via Chain of Thought.
Mají tam jednoduchou ukázku, kdy v prvním případě jazykový model vlastně nijak moc nepřemýšlel, ve druhém jej pomocí příkladu navedli k tomu rozepsat si příklad, udělat z něj jednoduchou úlohu, která se dá normálně postupně vyřešit.
Tento model pak doplňují ještě technikou „sebekonzistence“ (self-consistency), kdy model připraví více odpovědí a preferuje nejčastější výsledek (vědecké pojednání o tom zde).
Takhle pak vypadalo srovnání jejich výsledků, kde je vidět právě ohromný nárůst při použití techniky Chain of Thought u jejich PaLM modelu (škoda mimochodem, že nesrovnali svůj model s GPT-3 při použití stejného principu, protože ten je obecný).
Jak to konkrétně řešit?
Jak jsem psal, je důležité aby měl ChatGPT všechny informace předtím, než dá odpověď. Připomínám, že původní prompt zněl
přepiš slogan „privátní, automatizované a bezpečné fitko“ tak aby tam nebylo písmeno č
1. postup – analýza → odpověď
Potřebujeme tedy, aby nejdřív u této fráze zjistil, která slova obsahují písmeno č, následně se zamyslel a zkusil vytvořit synonyma těchto slov, ověřil, jestli neobsahují náhodou taky písmeno „č“ a pak zkusil sestavit slogan, který to „č“ nebude obsahovat, ne? No tak to tam takhle napišme
analyzuj slogan „privátní, automatizované a bezpečné fitko“ a místo všech slov obsahující písmeno „č“ navrhni jejich synonyma a u každého zhodnoť, jestli obsahuje písmeno „č“ Pak zkus tento slogan přepsat tak, aby neobsahoval slova s písmenem „č“
No, ChatGPT se nechal trochu unést, ale zvládl to, i když tvrdí že ne. Asi jsem mohl být ve své formulaci přesnější. Ale jako neslíbil jsem vám, že ten slogan bude inteligentní.
2. postup – analýza → odpověď → kontrola → oprava ↺ a tak dokola
Můj oblíbený figl je provést po odpovědi kontrolu a když to nevyhovuje zadání, nechat jej vygenerovat jiný výsledek a tak dokola, dokud to není správně.
Tentokrát jsem místo „analyzuj“ použit jen „zhodnoť“ ať se tak nerozepisuje anapsal jsem
zhodnoť, která slova ve sloganu „privátní, automatizované a bezpečné fitko“ obsahují písmeno „č“. Navrhni jiný slogan se stejným významem, aby tato slova neobsahoval a opět zhodnoť, jestli v něm není písmeno „č“, pakliže je, tak postup opakuj, tak dlouho, dokud nenapíšeš slogan, kde ani jedno slovo nebude obsahovat písmeno „č“
Výsledný návrh je taky pitomej, ale správně dle zadání
Závěrem soutěž!
Možností postupu je víc, záleží vždy na zadání. Mohl bych ho třeba nechat vygenerovat deset obdobných sloganů a u každého z nich nechal spočítat, kolik obsahují písmen „č“ a napsat Ano/Ne, jestli to vyhovuje podmínce a dát to do tabulky a pak vybrat jeden z těch, který vyhovuje a je nejhezčí a když ani jeden, tak začít znovu…
Cílem tohoto článku ale nebylo najít slogan, ale dát vám klíč ke správným odpovědím od jazykových modelů a kecálků typu ChatGPT. Dejte mi vědět, jestli se mi to podařilo, sdílejte můj článek svým přátelům, ať ví jak na to, sdílecí tlačítka jsou tady dole ⬇️⬇️⬇️. A nezapomeňte se tam i registrovat případně mě i sledovat na sociálních sítích (odkazy nahoře v menu), ať vám nic neunikne. A pro ty z vás, co jste tu prvně – mám tu spoustu dalších skvělých článků o AI, tak to projděte.
Výzva – AI Prompt challenge
Základní úroveň: Napište prompt, který dokáže řešit (aspoň jednodušší) Einsteinovy hádanky, jako je ta nahoře. První/nejlepší z řešitelů něco vyhraje. Měl by to být 1 prompt, ne série. Řešení nesmí záviset na pluginech (mělo by fungovat i v různých LLM). Optimálně prosím sdílejte celou konverzaci (ikonka vpravo nahoře v ChatGPT).
Pokročilý: Navrhněte prompt, který bude takové hádanky generovat (bez dalších instrukcí a pomoci). Hádanky by se měly co nejvíc lišit, měly by být hezké, logické, bez duplicitních rad, s jedním řešením, ke kterému se dospěje až na konci přemýšlení, neměly by mít ale žádný chyták, stačí se 3-4 osobami a vlastnostmi, prostě level základní škola.
A mimochodem – v jakém městě byl Tomáš?