2.2. Veliki jezični modeli — kako računalo „radi” s jezikom besplatno
Kada model dovrši rečenicu ili odgovori na pitanje, čini li on to zato što „zna” odgovor, ili zato što računa nešto sasvim drugo?
(Large Language Model — LLM) jest računalni model strojnog učenja koji je treniran na vrlo velikim količinama tekstualnih podataka kako bi naučio pravilnosti jezika. Pojam „velik” odnosi se na velik broj podesivih brojčanih vrijednosti modela, odnosno parametara, a „jezični” na to da je obrada i generiranje jezika jedan od njegovih glavnih zadataka. Kada s ushićenjem promatramo kako takav sustav u nekoliko sekundi generira besprijekoran esej, pjesmu u zadanome stilu ili funkcionalan programski kôd, teško je oteti se dojmu da s druge strane sjedi svjesno biće koje duboko razumije naš svijet. Iza te komunikacijske fasade, međutim, ne krije se svjesni sugovornik, nego fascinantan, visokooptimizirani matematički stroj čiji je temeljni zadatak, koliko god to zvučalo neočekivano skromno, predvidjeti najvjerojatniji sljedeći dio teksta s obzirom na zadani kontekst (Jurafsky i Martin, 2024).
To ne znači da model u svakom trenutku „razmišlja” kao čovjek. Njegov unutarnji postupak temelji se isključivo na numeričkim reprezentacijama i izračunima vjerojatnosti. Upravo zato razumijevanje tehničke arhitekture pomaže razumjeti i granice njegova djelovanja: model ne pretražuje internet u stvarnom vremenu niti pohranjuje gotove odgovore koje potom pronalazi u sjećanju. On svaki sljedeći dio teksta izračunava iznova, na temelju obrazaca koje je usvojio tijekom treniranja.
Da bi model uopće došao do te razine predviđanja, mora proći kroz nekoliko odvojenih, ali povezanih koraka: pretvorbu ljudskog jezika u brojeve, mapiranje značenja u višedimenzionalni prostor, dodavanje informacije o redoslijedu riječi, dinamičko usmjeravanje pažnje na relevantne dijelove rečenice te, na samom kraju, odabir sljedeće riječi iz raspodjele vjerojatnosti. Sljedeći odjeljci vode nas korak po korak kroz taj proces — od trenutka kada korisnik pritisne tipku Enter do trenutka kada se na ekranu pojavi prva riječ odgovora.
2.2.1. Tokenizacija — od rečenice do jedinica koje model može računati
Prva prepreka s kojom se susreće svaki jezični model jest činjenica da računala ne razumiju slova, riječi ni rečenice — ona razumiju isključivo brojeve. Zato se ulazni tekst najprije mora podvrgnuti postupku koji nazivamo tokenizacijom. Tokenizacija (tokenization) jest postupak rastavljanja neprekinutog teksta na manje jedinice koje nazivamo . (tokenizer) jest računalni postupak koji tekst razdvaja na tokene i svakom tokenu pridružuje jedinstveni brojčani identitet, takozvani ID.
Iako bismo intuitivno pomislili da je token uvijek cijela riječ, moderni modeli najčešće upotrebljavaju takozvanu podriječnu tokenizaciju (subword tokenization). Rečenica „Interdisciplinarnost je nužna.” tako se, ovisno o konkretnom tokenizatoru, može raščlaniti u niz poput: Inter, discipl, in, arnost, je, nuž, na, . — osam odvojenih jedinica za rečenicu koju čovjek doživljava kao tri riječi.
Takav pristup rješava dva praktična problema. Prvi je ograničenost rječnika: kada bi model morao pamtiti svaku riječ u svim njezinim gramatičkim oblicima, padežima i glagolskim vremenima, rječnik bi bio praktički beskonačan, posebno u jeziku bogatom fleksijom kakav je hrvatski. Dijeljenjem riječi na korijene, prefikse i sufikse model može sastaviti i razumjeti čak i rijetke ili posve nove riječi. Drugi je problem nepoznatih riječi: ako model tijekom stvarne uporabe naiđe na riječ koju nikada nije vidio tijekom treniranja, on je neće jednostavno ignorirati, nego će je rastaviti na manje, već poznate dijelove.
Rječnik tokena ne sastavlja čovjek, nego se izvodi iz podataka. Najrašireniji postupak, kodiranje parova bajtova (byte pair encoding, BPE), polazi od pojedinačnih znakova i u velikoj zbirci tekstova uzastopno spaja onaj par susjednih jedinica koji se pojavljuje najčešće. Svako spajanje daje novi token, a postupak se ponavlja dok rječnik ne dosegne unaprijed zadanu veličinu (Sennrich, Haddow i Birch, 2016). U današnjim modelima rječnik obično ima od nekoliko desetaka tisuća do nekoliko stotina tisuća tokena. Posljedica je takva postupka da česte riječi postaju jedan token, a rijetke se sastavljaju od više manjih dijelova.
Upišite tekst i pomičite klizač. Bez spajanja svaki je znak zaseban token. Sa svakim spajanjem najčešći par susjednih jedinica postaje novi token, kao u okviru o rječniku tokena.
Ovaj je tokenizator naučen samo na tekstu 2. poglavlja, pa je mnogo manji od pravih. Riječi kojih u poglavlju nema raspadaju se na više dijelova. Brojevi ispod tokena njihovi su identifikatori u ovom malom rječniku; stvarni modeli imaju drukčiju podjelu i drukčije brojeve.
Svakom jedinstvenom tokenu u rječniku modela dodjeljuje se jedinstveni identifikacijski broj. Token „je”, primjerice, može imati vrijednost 312, dok točka na kraju rečenice može imati vrijednost 14. Na taj način rečenica napokon postaje ono što računalo doista može obraditi: obični niz cijelih brojeva.
Važno je naglasiti da token nije nužno lingvistička jedinica. On ne mora odgovarati riječi, morfemu ili slogu u smislu u kojem te pojmove proučava lingvistika. Token je prije svega statistički i računalno određen segment teksta, odabran tako da modelu omogući učinkovitu numeričku obradu jezika (Jurafsky i Martin, 2024). Zato broj tokena nije isto što i broj riječi, a ta razlika ima i vrlo praktične posljedice: duljina ulaza, količina potrebnog računanja i raspoloživi kontekstualni prostor u AI sustavima gotovo se uvijek računaju upravo preko broja tokena, a ne broja riječi. Različiti jezici pritom mogu zahtijevati različit broj tokena za otprilike istu količinu značenja, što znači da ista rečenica na hrvatskome i na engleskome jeziku može „koštati” različit broj tokena istoga sustava. Razlike mogu biti velike: usporedba istih tekstova prevedenih na različite jezike pokazala je da se broj tokena među jezicima može razlikovati i do petnaest puta, što izravno utječe na cijenu, brzinu i količinu teksta koja stane u kontekst (Petrov i sur., 2023). Za engleski se kao gruba procjena uzima da jedan token odgovara približno četirima znakovima, odnosno trima četvrtinama riječi (OpenAI, b. d.). Za jezike bogate oblicima, poput hrvatskoga, na istu količinu teksta u pravilu otpada više tokena.
Token je zato osnovna mjerna jedinica cijeloga sustava. U tokenima se izražava veličina , o kojemu govori odjeljak 2.3. Prema broju ulaznih i izlaznih tokena obračunava se cijena uporabe modela, a brzina se iskazuje brojem tokena u sekundi. I sam odgovor nastaje token po token: model za svaki token iz rječnika izračuna vjerojatnost da je upravo on sljedeći, odabere jedan na način opisan u odjeljku 2.4, doda ga nizu i postupak ponovi. Tokenizator na kraju niz brojeva vraća u čitljiv tekst. Uz tokene teksta rječnik sadrži i posebne tokene, primjerice oznaku kraja odgovora, po kojoj model „zna” da treba stati.
Pojam tokena u nastavku će se poglavlja proširiti i izvan teksta. Token može biti isječak slike, djelić zvučnog zapisa ili naredba robotskome motoru, o čemu govore odjeljci 2.26 do 2.28. U svim tim slučajevima vrijedi isto: sadržaj se najprije rastavi na jedinice iz konačnog rječnika, a model zatim računa s njihovim brojevima.
2.2.2. Vektorska ugradnja (embeddings) — geometrija značenja
Kada rečenicu pretvorimo u niz brojčanih identifikatora tokena, suočavamo se s novim problemom. Ako tokenu „kralj” dodijelimo identifikator 1024, a tokenu „kraljica” identifikator 1025, ti brojevi sami po sebi računalu ne govore ništa o stvarnome odnosu između ta dva pojma. Za računalo je razlika između 1024 i 1025 posve jednaka razlici između 1024 i 9999, iako bi 9999 mogao biti identifikator posve nepovezane riječi poput „stolica”.
Kako bi se riješio taj problem, upotrebljava se (embedding). Svaki token, odnosno njegov identifikator, preslikava se u visokodimenzionalni vektorski prostor, obično s nekoliko stotina ili tisuća dimenzija, ovisno o veličini modela. Token time prestaje biti samo jedan broj i postaje vektor — uređeni niz od stotina decimalnih vrijednosti koje zajedno opisuju njegovo mjesto u prostoru značenja:
U tom se prostoru događa nešto što bismo mogli nazvati matematičkom čarolijom: semantička sličnost postaje geometrijska blizina. Vektori za riječi sličnog značenja ili riječi koje se pojavljuju u sličnim kontekstima nalaze se blizu jedni drugima, dok su vektori posve nepovezanih pojmova međusobno udaljeni (Goodfellow, Bengio i Courville, 2016).
Štoviše, unutar takvoga prostora moguće je izvoditi operacije linearne algebre koje odražavaju stvarne jezične i logičke odnose. Najpoznatiji školski primjer to zorno ilustrira: ako od vektora za riječ „kraljica” oduzmemo vektor za riječ „žena” i dodamo vektor za riječ „muškarac”, rezultat je vektor koji je iznimno blizu vektoru za riječ „kralj”:
Ovaj primjer, koliko god djelovao poput trika, pokazuje nešto duboko važno: model tijekom treniranja ne uči popis definicija, nego geometrijski raspored odnosa među pojmovima, izveden isključivo iz obrazaca njihove uporabe u golemim količinama teksta. Zahvaljujući takvome prikazu računalo može uspoređivati pojmove, prepoznavati njihovu sličnost i otkrivati obrasce koje čovjek na prvi pogled ne bi uočio.
Odaberite riječ na crtežu da vidite njezine najbliže susjede. Ispod složite vlastiti račun: od prve riječi oduzmite drugu i dodajte treću.
Položaji riječi su ilustrativni i prikazani u dvije dimenzije; stvarni modeli rabe stotine ili tisuće dimenzija. Krug označuje rezultat računa, a rezultat se uspoređuje sa svim riječima osim triju upisanih.
2.2.3. Pozicijsko kodiranje — kako model pamti redoslijed
Jedna od ključnih prednosti Transformer arhitekture, tehnološkog temelja gotovo svih suvremenih velikih jezičnih modela, jest sposobnost paralelnog procesiranja svih tokena odjednom, što omogućuje iznimno brz trening na grafičkim procesorima. Ta paralelnost, međutim, nosi i jednu veliku manu: model po svojoj prirodi nema urođen osjećaj za redoslijed riječi. Za njega bi, bez dodatne intervencije, rečenice „Pas je ugrizao čovjeka” i „Čovjek je ugrizao psa” na samome početku obrade predstavljale gotovo identičan skup vektora, iako je njihovo značenje posve suprotno.
Kako bi se očuvala informacija o strukturi rečenice, svakom se vektorskom prikazu tokena dodaje (positional encoding) koji nosi informaciju o točnome položaju toga tokena unutar niza. Autori izvorne Transformer arhitekture riješili su taj problem elegantnim trikom: uporabom sinusnih i kosinusnih funkcija različitih frekvencija. Te valne funkcije modelu omogućuju da iz rezultirajućeg vektora precizno odredi ne samo apsolutni položaj riječi u rečenici, nego i njezinu relativnu udaljenost od drugih riječi. Matematički, pozicijsko kodiranje za parne i neparne dimenzije vektora definirano je izrazima:
gdje je položaj tokena u nizu, indeks dimenzije, a ukupna dimenzionalnost vektora (Vaswani i sur., 2017). Kada se izvorni vektor tokena zbroji s ovim pozicijskim vektorom, nastaje jedinstven, kontekstualno-pozicijski „otisak” riječi, spreman za daljnju obradu.
2.2.4. Transformer i mehanizam samopažnje (self-attention)
Suvremeni veliki jezični modeli velikim se dijelom temelje na arhitekturi Transformer, načinu organiziranja neuronske mreže predstavljenom 2017. godine u radu koji je i sam ponio gotovo programatski naslov, Attention Is All You Need (Vaswani i sur., 2017). Ključna značajka te arhitekture jest mehanizam (self-attention), kojim model pri obradi svakog pojedinog dijela ulaza određuje koliko su mu svi ostali dijelovi ulaza važni. Riječ „pažnja” ovdje ne označava ljudsku svijest ili usredotočenost, nego strogo matematički postupak izračuna odnosa između elemenata ulaznog niza.
Kako bismo razumjeli zašto je takav mehanizam uopće potreban, promotrimo rečenicu: „Životinja nije prešla cestu jer je bila umorna.” Kada čovjek pročita ovu rečenicu, gotovo podsvjesno zna da se zamjenica „bila” odnosi na životinju, a ne na cestu. No kako to računalo može znati? Bez mehanizma pažnje, riječ „bila” za model je samo prazna gramatička jedinica, bez ikakve veze s ostatkom rečenice. Samopažnja modelu omogućuje da pri obradi svake pojedine riječi „pogleda” sve ostale riječi u rečenici, procijeni njihovu važnost za trenutačnu riječ i na temelju toga ažurira njezino značenje.
Za svaki token u rečenici model množi njegov vektor s trima različitim, naučenim matricama težina — , i — kako bi dobio tri nova vektora: upit (), ključ () i vrijednost (). Izračun pažnje potom se odvija u nekoliko koraka. Najprije se za zadani upit računa skalarni produkt s ključevima svih ostalih tokena u rečenici, čime se dobivaju sirove ocjene pažnje — mjera koliko je koja riječ relevantna za koju. Te se ocjene potom dijele s korijenom dimenzije ključa kako ne bi otišle u ekstremne vrijednosti i time narušile stabilnost treninga. Nakon toga se primjenjuje funkcija softmax, koja sirove ocjene pretvara u vjerojatnosti između 0 i 1 čiji je zbroj točno jednak 1 — to su stvarni ponderi, odnosno težinski faktori pažnje. Na kraju se ti težinski faktori množe s vrijednostima kako bi se dobio novi, kontekstualizirani vektor za promatrani token. Sav taj postupak sažet je u jednoj od najpoznatijih formula suvremene računalne znanosti:
2.2.5. Višeglavna pažnja (multi-head attention) — panel stručnjaka
U jeziku jedna vrsta veze rijetko je dovoljna da opiše sve odnose u rečenici. Riječ „ugrizao” istodobno mora biti povezana sa subjektom (tko grize?), objektom (koga grize?) i glagolskim vremenom (kada se to dogodilo?). Kada bi model imao samo jedan mehanizam pažnje, morao bi praviti kompromise i u prosjeku izračunavati te različite odnose, što bi neizbježno vodilo gubitku preciznosti.
Rješenje je višeglavna pažnja (multi-head attention). Umjesto jednog velikog izračuna, model dijeli svoje vektore u više manjih dijelova i pokreće nekoliko mehanizama pažnje usporedno — najčešće osam, dvanaest ili čak i više „glava”. Svaka glava pritom može naučiti obraćati pozornost na drukčiju vrstu odnosa: jedna se, primjerice, može specijalizirati za gramatička pravila i odnos subjekta i predikata, druga za praćenje zamjenica i njihovih referenci, treća za vremenski kontekst i glagolska vremena, a četvrta za prostorne odnose unutar rečenice. Na kraju se zaključci svih glava spajaju natrag u jedan bogat, višedimenzionalni kontekstualni vektor.
Odaberite riječ u rečenici i glavu pažnje. Jače obojene riječi dobivaju više pažnje odabrane riječi, a postotci u svakom retku zajedno daju 100 %.
Težine su ilustrativne i složene tako da pokažu načelo. U stvarnom modelu glave nemaju unaprijed zadane uloge; uloge nastaju učenjem i često ih nije lako imenovati.
U praktičnim Transformer modelima ovakav se izračun ne provodi jednom, nego se slaže kroz desetke uzastopnih slojeva, pri čemu svaki sljedeći sloj gradi na sve bogatijem kontekstualnom razumijevanju prethodnoga. Upravo ta dubina, u kombinaciji s mehanizmom pažnje, objašnjava zašto suvremeni modeli mogu pratiti složene, višestruko ugniježđene odnose unutar dugih tekstova.
2.2.6. Parametri, težine i učenje
su brojčane vrijednosti koje model tijekom učenja postupno prilagođava kako bi poboljšao svoja predviđanja. Možemo ih zamisliti kao vrlo velik broj podesivih potenciometara koji zajedno određuju kako model povezuje obrasce u podacima — matrice težina Wq, Wk i Wv iz prethodnog odjeljka samo su jedan njihov primjer. Učenje se vodi funkcijom gubitka (loss function), brojčanom mjerom koja opisuje koliko je trenutačni rezultat modela udaljen od željenog rezultata. Optimizacija je postupak kojim se parametri sustavno mijenjaju tako da se vrijednost te pogreške postupno smanjuje, najčešće metodom poznatom kao gradijentni spust.
Na taj način model ne dobiva unaprijed napisano pravilo za svaki mogući slučaj, nego kroz golem broj primjera postupno prilagođava svoje parametre dok se njegova predviđanja sve više ne približavaju stvarnim obrascima u podacima. Ovdje se jasno vidi veza s matematikom i statistikom o kojima je bilo riječi u prvome poglavlju: matematički opis omogućuje precizno mjerenje pogreške, dok optimizacijski postupci omogućuju sustavno, korak-po-korak prilagođavanje parametara (Deisenroth, Faisal i Ong, 2020).
2.2.7. Predtreniranje, ugađanje i usklađivanje
Razvoj suvremenoga jezičnog modela može se pojednostavljeno prikazati kroz nekoliko odvojenih faza. U predtreniranju (pretraining), odnosno početnome učenju na vrlo velikoj i raznolikoj zbirci tekstova, model usvaja opće obrasce jezika, činjenica i odnosa među pojmovima. Nakon te faze najčešće slijedi ugađanje modela (fine-tuning), tijekom kojeg se već predtrenirani model dodatno trenira na užem i pažljivo odabranom skupu primjera prilagođenih određenoj svrsi — primjerice odgovaranju na pitanja u obliku razgovora, umjesto pukog nastavljanja teksta. Konačno, može slijediti i usklađivanje (alignment), odnosno postupci kojima se ponašanje modela približava očekivanjima korisnika, pravilima sustava i namijenjenoj uporabi.
Jedan od najvažnijih koraka u razvoju te posljednje faze bilo je učenje uz povratnu informaciju ljudi (Reinforcement Learning from Human Feedback — RLHF). Ouyang i suradnici pokazali su da veći model nije automatski i bolji u praćenju korisničkih uputa te da se ponašanje modela može znatno poboljšati kombinacijom nadziranog ugađanja i učenja uz ljudsku povratnu informaciju — čak i kada je takav, manji i usklađeniji model tehnički „slabiji” od svog neuklopljenog, ali većeg prethodnika (Ouyang i sur., 2022). Ovaj nalaz ima važnu posljedicu za razumijevanje cijeloga poglavlja: broj parametara sam po sebi ne govori dovoljno o kvaliteti ili korisnosti modela, o čemu ćemo podrobnije govoriti u kasnijim odjeljcima.
Literatura
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems. arXiv:1706.03762.
Jurafsky, D., & Martin, J. H. (2024). Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition (3rd ed., draft). Stanford University & University of Colorado Boulder. Dostupno na: https://web.stanford.edu/~jurafsky/slp3/
Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
Deisenroth, M. P., Faisal, A. A., & Ong, C. S. (2020). Mathematics for Machine Learning. Cambridge University Press.
OpenAI. (b. d.). What are tokens and how to count them? https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them
Petrov, A., La Malfa, E., Torr, P. H. S., & Bibi, A. (2023). Language Model Tokenizers Introduce Unfairness Between Languages. NeurIPS 2023. arXiv:2305.15425.
Sennrich, R., Haddow, B., & Birch, A. (2016). Neural Machine Translation of Rare Words with Subword Units. Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics, 1715–1725. https://doi.org/10.18653/v1/P16-1162
Ouyang, L., Wu, J., Jiang, X., Almeida, D., Wainwright, C. L., Mishkin, P., Zhang, C., Agarwal, S., Slama, K., Ray, A., Schulman, J., Hilton, J., Kelton, F., Miller, L., Simens, M., Askell, A., Welinder, P., Christiano, P., Leike, J., & Lowe, R. (2022). Training Language Models to Follow Instructions with Human Feedback. arXiv:2203.02155.