Salta al contingut
Entendre els LLMs
🧭 Camí intuïtiuBloc 330-40 min
IntuïtiuMatemàtic

La versió sense fórmules de 10 · Tokenització. Cada secció diu on és la seva part matemàtica.

10 · Tokens: com llegeix un model

Quan escrius a un model de llenguatge, ell no veu el que tu veus. No veu lletres, ni paraules, ni espais: veu una llista de números. Entre el teu text i el model hi ha una peça que gairebé mai no s'explica, el tokenitzador, que talla el text en trossos i dona a cada tros un número. Aquesta peça és la responsable d'uns quants comportaments que semblen absurds, com no saber comptar les lletres d'una paraula, i d'una injustícia molt concreta: que el mateix text costi més diners en català que en anglès.


1. On tallar#

Un model treballa amb un vocabulari tancat: una llista fixa de peces, cadascuna amb el seu número. Abans d'entrar al model, qualsevol text s'ha de convertir en una seqüència d'aquestes peces. Cada peça s'anomena token. La pregunta és on tallar, i hi ha dues respostes extremes, totes dues dolentes.

Tres maneres de tallar una frase

  1. E
  2. l
  3. s
  4. ␣
  5. g
  6. a
  7. t
  8. s
  9. ␣
  10. d
  11. e
  12. l
  13. ␣
  14. v
  15. e
  16. ï
  17. n
  18. a
  19. t
  20. ␣
  21. d
  22. o
  23. r
  24. m
  25. e
  26. n
  27. ␣
  28. a
  29. l
  30. ␣
  31. t
  32. e
  33. r
  34. r
  35. a
  36. t
  37. .

Peces: 37

Talla per
Lletres: el vocabulari és minúscul (uns quants centenars de símbols) i no hi ha cap paraula desconeguda, però els textos es fan molt llargs, i per a un Transformer cada peça de més es paga cara.

Si talles per lletres, el vocabulari és petit i qualsevol text s'hi pot escriure, però els textos es tornen molt llargs: quatre o cinc vegades més peces que paraules. I per a un Transformer, com veuràs al capítol 11, cada peça de més es paga cara, perquè cada peça es compara amb totes les altres. Si talles per paraules, els textos queden curts, però necessites un vocabulari gegant que mai no és prou gran: qualsevol paraula nova, un nom propi o una errada de picar no hi és. I «gat» i «gats» serien dues entrades sense cap relació.

La solució que fan servir tots els models és el terme mig: trossos de paraula (subwords). Les paraules freqüents queden senceres i les rares es parteixen en trossos coneguts. Els vocabularis reals tenen entre 32.000 i 256.000 peces. És, en el fons, un compromís de compressió: com menys peces calen per dir el mateix, més barat és tot.

2. Enganxar les parelles més freqüents#

Com es decideix quins trossos entren al vocabulari? El mètode més estès és d'una senzillesa sorprenent, i es diu BPE (byte pair encoding, codificació per parelles de bytes). Va néixer el 1994 com a mètode de compressió i es va adaptar al llenguatge el 2016.

La recepta és aquesta. Comença amb el text partit en lletres. Compta totes les parelles de peces veïnes i busca la que surt més vegades. Enganxa-la: a partir d'ara és una peça nova. Torna a comptar, i repeteix fins que el vocabulari arribi a la mida que vols. No hi ha cap regla de gramàtica, cap diccionari: només recomptes.

Enganxar la parella més freqüent, una vegada i una altra

1/8Al principi, només lletres

  • cantar
  • cantava
  • cantaven
  • cantem
  • canten
  • parlar
  • parlava
  • parlaven
  • parlem
  • parlen

Deu formes verbals, partides en lletres. El vocabulari són les lletres que hi surten, i res més.

L’algorisme BPE de debò, aplicat a deu paraules. Cada fusió afegeix una peça al vocabulari, i la llista de fusions, en ordre, és el tokenitzador: per tallar un text nou, s’apliquen les mateixes fusions en el mateix ordre. Els tokenitzadors reals en fan desenes de milers, sobre milers de milions de paraules.

El resultat de l'entrenament és la llista de fusions, en ordre. Per tallar un text nou, s'apliquen les mateixes fusions en el mateix ordre, i el mateix tros de text queda sempre tallat igual. Fixa't que, sense que ningú li ho digui, l'algorisme troba les arrels dels verbs i les terminacions: no perquè sàpiga què és un verb, sinó perquè les arrels i les terminacions es repeteixen.

Hi ha un detall que fa que aquest mètode no falli mai. Els tokenitzadors moderns no comencen per lletres sinó per bytes, els 256 valors bàsics amb què l'ordinador guarda qualsevol text. Una lletra corrent és un byte; una «à» en són dos; un emoji, quatre. Com que tot text és una seqüència de bytes, qualsevol cosa es pot tokenitzar: japonès, emojis, un fitxer binari. No hi ha cap «paraula desconeguda».

Ara prova-ho amb un tokenitzador de debò. Aquest l'aprendràs tu mateix: llegirà les deu mil paraules en català del corpus del curs i en traurà 1.200 fusions.

Talla el teu text

Aquesta part fa servir un tokenitzador de debò, que s’ha d’aprendre primer llegint les deu mil paraules del corpus català del curs. Triga un segon, més o menys, i el comparteixen totes les figures del capítol.

Un tokenitzador BPE après del corpus català del curs. Amb zero fusions, cada peça és un byte: les lletres corrents en són un, però una «à» o una «ç» en són dos, i surten partides (el punt volat marca mig caràcter). Mou el lliscador i mira com les peces creixen fins a ser paraules senceres. Prova paraules que el corpus no ha vist mai, un nom propi, números o un text en anglès.

3. Altres receptes#

BPE no és l'única manera de construir un vocabulari de trossos. Hi ha dues alternatives que trobaràs mencionades sovint, i una eina que les aplica.

Construir, podar, i l’espai com a lletra

cantavacantavacantavacantavacantava
Recepta
De baix a dalt. Es comença per lletres i s’enganxen parelles. BPE tria la parella més freqüent; WordPiece, la que fa el text més previsible. Esquemàtic.

WordPiece, el que fa servir BERT (un dels primers grans models basats en el Transformer, de Google), fa el mateix que BPE però tria la parella amb un altre criteri: en comptes de la més freqüent, la que fa el text més previsible. Unigram fa el camí invers: comença amb una llista enorme de trossos possibles i va traient els que menys falta fan. Té una propietat curiosa: com que una paraula hi pot quedar partida de més d'una manera, durant l'entrenament se li poden mostrar talls diferents de la mateixa paraula, i el model aprèn a no dependre d'un tall concret. SentencePiece no és un algorisme sinó l'eina que fa servir gairebé tothom per aplicar BPE o Unigram; tracta l'espai com una lletra més, cosa que la fa servir igual per a llengües que no separen les paraules amb espais.

4. Les conseqüències: el que el model no pot veure#

Si te'n recordes només d'una cosa d'aquest capítol, que sigui aquesta: cada token és un sol número per al model. El que hi ha a dins del tros (quines lletres, en quin ordre) no ho veu. D'aquí surten uns quants comportaments que semblen errors de raonament i són, en realitat, errors de lectura.

Quantes erres té «strawberry»?

strawberryerres que es poden comptar: 3
Mirada
Tu veus deu lletres i pots comptar les erres d’una en una: tres.

Comptar lletres. La pregunta clàssica és quantes erres té «strawberry». Un model gran no rep deu lletres: rep dos o tres trossos, com «str», «aw» i «berry», i les erres són a dins. És com preguntar-te quants píxels té la lletra que estàs llegint: la informació hi és, però no és el que llegeixes. Quan els models moderns l'encerten, és perquè ho han memoritzat o perquè escriuen primer la paraula lletra per lletra, i llavors cada lletra sí que és una peça. Raonar en veu alta, aquí, és una manera de canviar com es talla el text.

Fer comptes. Si «1234» es talla com «123» i «4», i «1235» com «12» i «35», dos números consecutius tenen formes que no s'assemblen gens, i la regularitat de l'aritmètica es trenca. Per això els tokenitzadors moderns forcen regles per als números: un token per dígit, o grups de tres. És una millora del model disfressada de detall tècnic.

Espais. Per a un tokenitzador, «hola» i « hola» (amb l'espai al davant) són peces diferents, amb números diferents. És una font clàssica d'errors quan es donen exemples a un model o quan se li diu on ha de parar de generar.

Tokens fantasma. Hi ha peces que van entrar al vocabulari però que gairebé no van sortir mai al text amb què es va entrenar el model. El model no ha après què volen dir, i quan les troba es comporta de manera estranya. El cas famós és «SolidGoldMagikarp» als models GPT-2 i GPT-3. És un recordatori que el vocabulari i el model s'han d'entrenar amb textos semblants.

Llengües. I l'última, la que més et toca. Un tokenitzador après sobretot d'anglès té fusions per a les seqüències de lletres de l'anglès, i parteix més les altres llengües. El mateix contingut pot costar entre 1,5 i 3 vegades més tokens en català, i molt més en llengües amb altres alfabets.

Quant costa la teva llengua

anglès: el document sencer hi capla teva llengua: n’hi cap el 63 %

Aquesta part fa servir un tokenitzador de debò, que s’ha d’aprendre primer llegint les deu mil paraules del corpus català del curs. Triga un segon, més o menys, i el comparteixen totes les figures del capítol.

A dalt, aritmètica: la finestra d’un model es mesura en peces, i si el teu text en gasta més, hi cap menys document, pagues més per cada resposta i cada resposta triga més a sortir. Amb tokenitzadors entrenats sobretot amb anglès, el català en gasta entre 1,5 i 3 vegades més. A baix, l’experiment al revés: el tokenitzador del capítol s’ha après en català, i aquí qui paga és l’anglès.

Això no és un detall: és cost econòmic real (es paga per token), temps real (es genera token a token) i memòria real: un model només pot tenir davant un nombre fix de tokens alhora, la seva finestra de context, i hi cap menys document. Els models recents han fet els vocabularis més grans, fins a 128.000 o 256.000 peces, en part per corregir-ho.

5. Quina mida ha de tenir el vocabulari#

Si un vocabulari més gran fa els textos més curts, per què no fer-lo enorme? Perquè cada peça del vocabulari té un cost fix dins del model: una fila a la taula on el model busca el punt de partida de cada token, i una opció més quan, per predir el token següent, ha de repartir les cent fitxes entre totes les peces del vocabulari. Amb un vocabulari de 256.000 peces i vectors de 4.096 números, aquesta última part ja són mil milions de números.

Un vocabulari més gran fa textos més curts, cada vegada menys

Aquesta part fa servir un tokenitzador de debò, que s’ha d’aprendre primer llegint les deu mil paraules del corpus català del curs. Triga un segon, més o menys, i el comparteixen totes les figures del capítol.

Un paràgraf que el tokenitzador no ha vist mai, tallat amb cada vegada més fusions. Les primeres cent l’escurcen gairebé a la meitat; les últimes sis-centes només n’estalvien una dotzena. En canvi, cada peça nova és una fila més a la taula d’entrada del model i una opció més a la seva sortida, i aquestes sí que creixen sempre igual.

El que es veu a la figura és general: les primeres peces que s'afegeixen estalvien molt, i les últimes, cada vegada menys, mentre que el seu cost dins del model creix sempre igual. Per a un model gran, mil milions de números són una part petita del total, i un vocabulari gran surt a compte. Per a un model petit, poden ser una part enorme. Per això els models petits sovint fan servir la mateixa taula per a l'entrada i per a la sortida, i s'estalvien la meitat del cost.

I una cosa més: el vocabulari queda fixat per sempre quan s'entrena el model. Canviar-lo vol dir tornar a entrenar, o fer operacions molt delicades per afegir peces noves.

6. I si no hi hagués tokenitzador?#

Hi ha qui pensa que el tokenitzador és un pedaç heretat que acabarà desapareixent, i hi ha recerca activa per fer-ho. La versió més directa és fer que el model llegeixi bytes, un per un. Funciona i és molt robust, però els textos es fan llarguíssims. La versió més interessant és la de trossos de mida variable: en comptes d'un vocabulari fix, es decideix on tallar mentre es llegeix, segons com de previsible és el que ve.

Trossos que s’allarguen quan el text és previsible

  1. El␣gat␣
  2. dorm␣
  3. al␣sofà
  4. ␣
  5. d
  6. e␣casa.

29 bytes → 6 trossos (de mitjana, 4,8 bytes per tros)

Text
Un model molt petit, fet de recomptes de bytes del corpus català, endevina cada byte a partir dels tres anteriors. Mentre té clar què ve, el tros continua; quan no ho sap, és a dir, quan la sorpresa que espera és alta, en comença un de nou. En català corrent surten trossos llargs; en un codi estrany, trossos d’una o dues lletres. La idea és gastar més peces on hi ha més informació, i no al revés.

La idea, presentada el 2024 amb el nom de Byte Latent Transformer, és gastar més peces on hi ha més informació. Un text previsible es pot llegir a trossos grans; un tros sorprenent, un codi o un nom estrany, demana anar a poc a poc. Un tokenitzador BPE s'hi assembla només en part: també parteix més el que és rar, però ho decideix pel que va veure a l'entrenament, no pel que ve al davant, i talla sempre igual la mateixa paraula, sigui previsible on surt o no. Cap d'aquestes alternatives ha desplaçat encara BPE en els models que es fan servir de debò, però la direcció és clara.

Què t'has d'endur#

Del text al que veu el model

El text«El gat dorm.»Els bytescap text és impossible: tot són bytes256 símbolsLes pecesles fusions apreses agrupen els bytesBPEEls númeroscada peça, un número del vocabulari32.000-256.000
El model només rep l’última fila, els números, i no pot desfer el camí fins a les lletres: tot el que sap de com s’escriu cada peça ho ha hagut d’aprendre llegint.
  • Un model no llegeix lletres ni paraules: llegeix tokens, trossos de paraula que per a ell són un sol número cadascun.
  • BPE construeix el vocabulari enganxant, una vegada i una altra, la parella de peces veïnes més freqüent. Començar pels bytes garanteix que qualsevol text es pot representar.
  • Com que les lletres queden amagades dins dels tokens, comptar lletres, fer comptes o distingir un espai són coses difícils per a un model, i no per falta de raonament.
  • Un tokenitzador après sobretot d'anglès fa pagar més les altres llengües: en català, entre 1,5 i 3 vegades més tokens pel mateix contingut, amb el cost, el temps i la memòria que això comporta.
  • La mida del vocabulari és un compromís: més peces fan textos més curts, cada vegada menys, i cada peça té un cost fix dins del model.

Comprova que ho has entès#

0 de 3 resoltes

  1. Un model diu que «strawberry» té dues erres. Quina és la millor explicació?
  2. Com decideix BPE quins trossos entren al vocabulari?
  3. Un tokenitzador gasta 1,6 vegades més tokens per a un text en català que per al mateix text en anglès. Què implica, a la mateixa finestra de context?

Per anar més lluny#

Marca els que hagis llegit
  • El Tokenizer d'OpenAI, a la seva plataforma web: escriu-hi el mateix text en català i en anglès i compara quants tokens gasta cadascun amb un tokenitzador de debò.