diff --git a/README.md b/README.md
index 7d9fb6d..d043aa8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,34 @@
-Tanja Samardžić, gostujuće predavanje na kursu (Obrada prirodnih jezika)[https://rti.etf.bg.ac.rs/rti/ms1opj/#obaveštenja], ETF, Beograd, 12. 04. 2023.
+Tanja Samardžić, gostujuće predavanje na kursu [Obrada prirodnih jezika](https://rti.etf.bg.ac.rs/rti/ms1opj/#obaveštenja), ETF, Beograd, 15. 05. 2024.
# (Mikro)tokenozacija teksta
+Tokenizacija kao problem veštačke inteligencije
+
+> 1.
+>
+>
+
+
+
+
+> 2.
+>
+>
+>
+> [Do All Languages Cost the Same? Tokenization in the Era of Commercial Language Models](https://aclanthology.org/2023.emnlp-main.614.pdf)
+
+
+
+
+> 3.
+>
+> - Andrej Karpathy, [Let's build the GPT Tokenizer](https://youtu.be/zduSFxRajkE?si=RTtq9BJUsYD66Cg1)
+>
+
+
+
+
+
Tekst je jedna od tri glavne vrste podataka:
@@ -10,6 +37,7 @@ Tekst je jedna od tri glavne vrste podataka:
Izvor: [Khan Academy](https://www.khanacademy.org/computing/computers-and-internet)
+
---
### 1. Problem segmentacije teksta
@@ -62,6 +90,7 @@ Važne pouke:
---
+
### 2. Problem retkih reči i morfološka struktura
@@ -83,15 +112,19 @@ Da se vratimo na problem tokenizacije, lingvisti su uočili da dužina reči ne
Šta mislite, koja je medijalna dužina reči u srpskom?
+---
+
+### 3. Algoritmi za mikrotokenizaciju
----
+Kao logično rešenje za problem retkih reči nameće se redefinisanje skupa *V* time što se uobičajene reči rastave na manje segmente, koji zatim postaju članovi skupa *V*. Pošto se na taj način tokeni definišu kao relativno kratki simboli, ovu segmentaciju zovemo **mikrotokenizacija** (engl. subword tokenization). Prelazak na manje tokene otvara ogromno polje mogućih tokenizacija, jer, u principu, bilo koja podniska reči može da bude mikrotoken.
-### 3. Algoritmi za mikrotokenizaciju
+
+
-Kao logično rešenje za problem retkih reči nameće se redefinisanje skupa *V* time što se uobičajene reči rastave na manje segmente, koji zatim postaju članovi skupa *V*. Pošto se na taj način tokeni definišu kao relativno kratki simboli, ovu segmentaciju zovemo **mikrotokenizacija** (engl. subword tokenization). Prelazak na manje tokene otvara ogromno polje mogućih tokenizacija, jer, u principu, bilo koja podniska reči može da bude mikrotoken. Tu u igru ulazi i morfologija: duge reči se često sastoje od regularnih podniski od kojih su neke široko produktivne. Primer imamo već u našem opisu teksta kao niske simbola na početku: podniska `ed` se pojavljuje u dve reči i uopšte je nešto što može da bude sastavni deo skoro bilo kog glagola u engleskom. To je, dakle, sjajan kandidat za novog člana skupa *V*. Svi savremeni modeli za obradu jezika funkcionišu sa mikrotokenima, ali je njihova identifikacija i dalje predmet istraživanja.
+Tu u igru ulazi i morfologija: duge reči se često sastoje od regularnih podniski od kojih su neke široko produktivne. Primer imamo već u našem opisu teksta kao niske simbola na početku: podniska `ed` se pojavljuje u dve reči i uopšte je nešto što može da bude sastavni deo skoro bilo kog glagola u engleskom. To je, dakle, sjajan kandidat za novog člana skupa *V*. Svi savremeni modeli za obradu jezika funkcionišu sa mikrotokenima, ali je njihova identifikacija i dalje predmet istraživanja.
Problem rastavljanja reči na manje segmente se već dugo istražuje u obradi jezika, ali više kao izuzetno izazovan teorijski problem, nego iz praktičnih razloga. Tu glavnu reč vode istraživači iz Finske, pošto finski ima izuzetno razvijenu morfologiju koja predstavlja problem za obradu jezika. Oni su prvi razvili sistem za raščlanjivanje reči koji je ušao u široku upotrebu: [Morfessor](https://morfessor.readthedocs.io/en/latest/). Osim toga, oni već tradicionalno organizuju međunarodno takmičenje iz raščlanjivanja reči pod imenom [Morpho Challenge](http://morpho.aalto.fi/events/morphochallenge/).
@@ -106,20 +139,30 @@ Mi ćemo ovde kratko objasniti kako rade Morfessor i BPE, kao predstavnici dva g
-.....................................................................................................................................................................................................................
+...........................................................................................................................................................................
-
-
-
**BPE** je ekstremno jednostavan algoritam koji kompresuje podatke služeći se uočenim ponavljanjima. Kroz tekst prolazi u brojnim iteracijama -- i do nekoliko hiljada (u zavisnosti od konfiguracije) -- uzimajući segmentaciju na karaktere kao polaznu tačku. Dakle, u polaznoj tokenizaciji skup *V* je skup svih karaktera, konkretno UNICODE karaktera od kojih je većina kodirana jednim bajtom (otud ideja za primenu BPE). U svakoj iteraciji pronalazimo jedan par susednih karaktera sa najvećim brojem pojavljivanja u datom tekstu i taj par zamenimo novim simbolom koji dodamo u skup *V*. U narednoj iteraciji koristimo novi simbol i ponovo tražimo najčešći par i tako sve dok ne dostignemo zadati broj iteracija ili simbola. U primeru gore vidimo da je najčešći par u prvoj iteraciji `t h`. Kada izbrišemo razmak izmađu ova dva karaktera, dobijamo `th`, što je, zapravo novi simbol.
-Kad prestajemo da spajamo karaktere? To je još uvek poprilično otvoreno pitanje. Jedan tim istraživača, na primer, ustanovio je da je najbolje stati kad skup *V* dostigne veličinu *0.4 x |W|*, gde je *W* skup svih reči koje su se pojavile u tekstu. Videćemo malo kasnije još neke predloge.
+Kad prestajemo da spajamo karaktere? To je još uvek poprilično otvoreno pitanje. Jedan tim istraživača, na primer, ustanovio je da je najbolje stati kad skup *V* dostigne veličinu *0.4 x |W|*, gde je *W* skup svih reči koje su se pojavile u tekstu. Savremeni GPT modeli najčešće uzimaju konstantnu dužinu vokabulara od 32000. Videćemo malo kasnije još neke predloge.
+
+**Važno**: Potrebno je razlikovati proces "ućenja" vokabulara *V* of procesa primene naučenog vokabulara na nisku *T*. Istim vokabularom se mogu postići različite tokenizacije iste niske. Za primenu vokabulara se u praksi najčešće koristi pristup "greedy": u svakom koraku tražimo najdužu podnisku date niske koja se nalazi u vokabularu. Postoje i drugi pristupi, npr. da se minimizuje dužina niske, što može da se reši algoritmom dinamičnog programiranja, ali se još uvek svako dodatno računanje izbegava zbog ogromne količine teksta koju treba obraditi.
+
+Razlika u odnosu na [Huffman coding](https://www.bbc.co.uk/bitesize/guides/zd88jty/revision/10): Hafmanovo kodiranje se isto koristi za kompresovanje teksta. Njegov cilj je da pronađe optimalne binarne kodne reči tako da se najčešći karatkeri kodiraju najkraćim kodnim rečima ali tako da nijedna kraća kodna reč **nije prefiks** nijedne duže kodne reči.
+
+| BPE | Hafman |
+|:--|:-------|
+spajanje dva karaktera u jedan | spajanje dva karaktera u jedan ali samo kao jedan korak ka računanju optimalnog binarnog koda |
+karakteri su uvek bajtovi | binarni kod je varijabilne dužine |
+dva najčešća simbola u nizu | dva najređa pojedinačna karaktera |
+razlika između pojedinačnih i spojenih karaktera je irelevantna | razlika između pojedinačnih i spojenih karaktera je presudna |
+
+
**Morfessor** je dosta složeniji algoritam koji potiče iz vremena statističkih, tj. probabilističkih modela. Sasvim suprotno od pristupa BPE, polazna tačka za Morfessor su sva moguća raščlanjivanja svake reči, dakle ogroman skup potencijalnih mikrotokena i njihovih kombinacija. U teoriji, verovatnoća celog ulaznog teksta se procenjuje u svim mogućim verzijama i odabira se najbolja verzija (ona koja daje najveću verovatnoću celog teksta). Jasno je, naravno, da je prolaz kroz sve moguće verzije nemoguć, tako da algoritam mora da suzi polje mogućnosti u startu i razmotri samo neke od verzija. To se postiže dodavanjem konkretnih ograničenja (npr. parcijalni skup *V*). Konfiguracija Morfessora omogućava takođe da se kontroliše nivo raščlanjivanja, tj. da li dobijamo kraće ili duže mikrotokene.
@@ -133,6 +176,8 @@ Ono što je zajedničko za sve algoritme je odnos između:
---
+
+
### 4. Mikrotokenizacija u diskretnoj i vektorskoj reprezentacija teksta
Pomenuli smo gore da je mikrotekenizacija postala sastavni deo obrade jezika tek otkad se prešlo na rad sa neuronskim mrežama. Bilo je pokušaja i ranije da se regularnosti unutar reči iskoriste za skraćivanje tokena, ali su rezultati često bili iznenađujuće slabi. Vilar i njegov tim 2007 postavljaju pitanje [prevođenja na nivou karaktera](https://www.aclweb.org/anthology/W07-0705/). Ispostavlja se da je segmentacija na karaktere donekle korisna za vrlo bliske jezike. Zapravo, individualni karakteri su, ipak, prekratki, tako da se kao jedinice uzimaju podniske od dva karaktera (engl. character bigrams).
@@ -141,13 +186,19 @@ U radu iz 2009, [de Gispert i tim](https://www.aclweb.org/anthology/N09-2019/) u
Konačno, sa prelaskom na vektorsku (kontinualnu) reprezentaciju teksta, negde od 2013., mikrotokenizacija je počela da daje dobre rezultate na svim nivoima i postala je neizostavni deo jezičke obrade. Nije i dalje sasvim ispitano zašto mikrotokenizacija ima više smisla u kontinualnoj reprezentaciji, ali se odgovor verovatno krije u činjenici da je tok informacija fluidniji u kontinualnoj reprezentaciji i da granice između tokena nisu toliko striktne kao u ranijim diskretnim modelima.
-Pitanje koji su stvarno elementi skupa *V* je, međutim, i dalje nerešeno. NLP inženjeri bi ga najradije rešili tako što bi ga izbegli. U nekom trenutku, Google je, na primer, izbacio model [CANINE](https://arxiv.org/abs/2103.06874) za koji su tvrdili da rešava pitanje tokenizacije tako što gradi celokupnu reprezentaciju teksta sam počevši od karaktera. Iako rezultati njihovih eksperimenata pokazuju poboljšanje u odnosu na druge metode, ovaj pristup nije ušao u širu upotrebu.
+Pitanje koji su stvarno elementi skupa *V* je, međutim, i dalje nerešeno. NLP inženjeri bi ga najradije rešili tako što bi ga izbegli. U nekom trenutku, Google je, na primer, izbacio model [CANINE](https://arxiv.org/abs/2103.06874) za koji su tvrdili da rešava pitanje tokenizacije tako što gradi celokupnu reprezentaciju teksta sam počevši od karaktera. Iako rezultati njihovih eksperimenata pokazuju poboljšanje u odnosu na druge metode, ovaj pristup nije ušao u širu upotrebu. Nešto noviji pokušaj je [ByT5](https://aclanthology.org/2022.tacl-1.17/), ali ako se pažljivije pogledaju rezultati evaluacije, vidi se da ovakvi modeli možda imaju prednost kod problema niskog nivoa obrade (nivo reči) ili kada je skup raspoloživih podataka za obuku mali. Za stvarne probleme bliske realnim korisničkim upotrebama i dalje su potrebni duži tokeni.
---
+
+
### 5. Kako do optimalnih mikrotokena
-Moj tim u Cirihu je istraživao šta se dešava sa entropijom i redundantnošću teksta u procesu mikrotokenizacije metodom BPE. Uočili smo jedan pomalo zbunjujući trend:
+
+Suprotno želji da se tokenizacija prepusti modelima stoje težnje nekih istraživača da pokažu prednosti tokenizacije koja prati lingvističku analizu reči. Interesnanto je da morfološki tačnija podela reči uopšte ne garantuje bolje rezultate. Ponegde poneko uspe da pokaže mala poboljšanja, ali je mnogo više eksperimenata gde se ne vidi razlika.
+
+
+Moj tim u Cirihu nastoji da razume šta se dešava u toku tokenizacije u smislu teorije informacija. Merili smo entropiju i redundantnost teksta u procesu mikrotokenizacije metodom BPE. Uočili smo jedan pomalo zbunjujući trend:
@@ -189,3 +240,4 @@ Ravnomernost je nešto što se može, u principu, integrisati u algoritme za mik
\[2\]: Reiner Gerlach (1982), Zur Überprüfung des menz-erathschen gesetzes im bereich der morphologie.Glottometrika, 4(2):95–102.
+
diff --git a/figures/Chollet.png b/figures/Chollet.png
new file mode 100644
index 0000000..9c06b1c
Binary files /dev/null and b/figures/Chollet.png differ
diff --git a/figures/compression.jpg b/figures/compression.jpg
new file mode 100644
index 0000000..db7c8c5
Binary files /dev/null and b/figures/compression.jpg differ
diff --git a/figures/token-costs.png b/figures/token-costs.png
new file mode 100644
index 0000000..9803feb
Binary files /dev/null and b/figures/token-costs.png differ