Salta al contingut
Entendre els LLMs
Bloc 3intermedi2 h
IntuïtiuMatemàtic

Abans d'això: NLP clàssic i embeddings

10 · Tokenització

Idea central: un LLM no veu lletres ni paraules: veu enters. La tokenització és la frontera entre el text humà i el model, i és responsable d'un nombre sorprenent de comportaments estranys, biaixos i costos.


1. El problema# sense fórmules

Necessites convertir text en una seqüència d'enters d'un vocabulari finit VV. Dues opcions extremes:

EnfocamentVocabulariLongitud de seqüènciaProblema
Caràcters/bytes256molt llargaseqüències 4-5× més llargues → cost quadràtic d'atenció
Paraules10⁶+curtaOOV (paraules desconegudes), embedding matrix gegant, mala gestió de morfologia

Solució: subparaules. Vocabularis de 32k–256k que combinen paraules freqüentes senceres amb fragments per a la resta. És un compromís de compressió: menys tokens per text = menys cost.

Caràcters, paraules o subparaules

La taula del text diu «molt llarga» i «vocabulari gegant». Quant són, exactament, i què costen?

Com el veu el model amb subparaules: 24 tokens
L'escola␣del␣poble␣té␣quatre␣aules␣i␣un␣pati␣gran.␣Els␣nens␣hi␣entren␣a␣les␣nou␣del␣matí.
Les quatre tokenitzacions comparades
opciólongitudbarravocabularibytes/tokenOOV
Bytes912561,000,0 %
Caràcters89631,020,0 %
Subparaules (1.200 fusions)241.4563,790,0 %
Paraules201.3544,550,0 %
1.200

A zero, les subparaules són bytes. Puja-les i la seqüència s'escurça.

Textos que val la pena provar
bytes del text
91
com a bytes
91 tokens
com a subparaules
24 tokens
com a paraules
20 tokens
OOV amb vocabulari de paraules
0,0 %
compressió de les subparaules
3,79 B/token
El cost d'atenció O(L²), recalculat per a cada opció

La longitud de seqüència no és una molèstia: és el que multiplica el cost de l'atenció, i el terme que mana a context llarg és L2dL^2 d. Aquesta taula agafa el mateix text, el tokenitza de les tres maneres i calcula què costaria una capa d'atenció amb d=4096d = 4096 per a cadascuna.

tokenitzacióLvocabulariFLOPs d'atenció× respecte de subparaulestaula d'embeddings
Bytes9125667,84 M14,38×1,05 M
Caràcters896364,89 M13,75×258,05 k
Subparaules (1.200 fusions)241.4564,72 M1,00×5,96 M
Paraules201.3543,28 M0,69×5,55 M

Amb aquest text, processar-lo byte a byte costaria 14,4 vegades més d'atenció que amb subparaules, perquè la seqüència és 3,79 vegades més llarga i el cost va amb el quadrat. La columna de la dreta és l'altra meitat del compromís: amb paraules senceres, la taula d'embeddings passa a 5,5 M paràmetres, i això amb un vocabulari tret de deu mil paraules de corpus. Amb un corpus real seria de milions d'entrades.

I l'OOV. Amb vocabulari de paraules, el 0,0 % dels tokens d'aquest text cauen fora. No és que es tokenitzin malament: no hi ha cap manera de representar-los, i acaben en un <UNK> que perd la informació per sempre. Amb bytes i amb subparaules de nivell byte, aquella columna és zero passi el que passi, i prova el botó dels emojis per veure-ho.

Prova de baixar les fusions a zero: les subparaules es tornen bytes i les dues files es fonen. Puja-les a tres mil i la seqüència s'acosta a la de paraules sense haver renunciat a poder representar-ho tot. Aquest és exactament el compromís que tria cada laboratori quan fixa la mida del vocabulari, i la secció 5 en posa els números a escala.

2. Byte Pair Encoding (BPE)# sense fórmules

Algorisme (originalment de compressió, 1994; aplicat a NLP per Sennrich et al., 2016):

  1. Comença amb el vocabulari de caràcters (o bytes).
  2. Compta totes les parelles adjacents al corpus.
  3. Fusiona la parella més freqüent en un token nou.
  4. Repeteix fins a arribar a la mida de vocabulari desitjada.
"low low lower newest widest"
  → fusiona ("e","s") → "es"
  → fusiona ("es","t") → "est"
  → fusiona ("l","o") → "lo"  ...

El resultat és una llista ordenada de fusions que s'apliquen deterministament en inferència.

Byte-level BPE (GPT-2 i successors) opera sobre bytes UTF-8 en lloc de caràcters Unicode: així mai hi ha <UNK>, qualsevol seqüència de bytes és codificable — emojis, caràcters xinesos, dades binàries.

BPE, fusió a fusió

Fusionar la parella més freqüent, una i una altra vegada. Quant comprimeix, i què hi perd?

Les fusions apreses, en ordre
Llista ordenada de fusions
#parellatoken nouocurrències
1␣ + l␣l239
2e + ses219
3␣ + a␣a219
4e + lel208
5␣ + p␣p190
6␣ + d␣d183
7␣ + c␣c164
8␣l + a␣la144
9t + ata138
10␣ + i␣i136
11e + nen134
12␣ + el␣el120
13␣ + m␣m119
14r + ere110
15E + lEl109
16a + rar92
17o + ror91
18␣ + El␣El89
19l + ala88
20n + ana81
21␣c + a␣ca80
22e + rer72
23· + ·é71
24a + tat70
25␣ + v␣v68
26␣ + t␣t67
27␣a + l␣al62
28␣d + e␣de61
29é + sés60
30r + ara57
31␣ + g␣g55
32␣ + s␣s55
33␣ + n␣n53
34␣d + el␣del53
35l + ele52
36␣ + f␣f52
37i + uiu48
38␣ + és␣és48
39␣ + L␣L47
40i + xix46
41␣ + b␣b46
42q + uqu43
43d + ada42
44· + ·í40
45l + ili38
46u + nun37
47␣p + o␣po37
48c + aca36
49e + ixeix36
50␣el + s␣els35
51␣ + es␣es34
52a + nan33
53en + tent33
54␣ + h␣h31
55e + tet30
56o + sos30
57i + nin29
58i + naina29
59␣p + a␣pa29
60a + lal28
61i + taita28
62m + bmb28
63⏎ + ⏎⏎⏎28
64␣L + a␣La28
65␣l + es␣les28
66o + tot27
67␣ + A␣A27
68␣ + qu␣qu27
69b + leble26
70i + cic26
71o + mom26
72␣n + o␣no26
73i + aia25
74s + asa25
75␣po + ble␣poble24
76· + ·è23
77␣m + at␣mat23
78i + lil22
79o + lol22
80r + esres22
81r + iuriu22
82␣ + ta␣ta22
83u + nauna20
84␣a + mb␣amb20
85e + ueu19
86i + gig19
87ra + nran19
88· + ·à19
89i + tit18
90␣g + ent␣gent18
91i + sis17
92u + rur17
93· + ·ó17
94␣ + una␣una17
95␣El + s␣Els17
96es + test16
97t + sts16
98␣ + re␣re16
99␣p + or␣por16
100r + enren15
101ta + ttat15
102y + aya15
103␣ca + m␣cam15
104␣n + en␣nen15
105c + oco14
106iu + tatiutat14
107␣ + j␣j14
108␣ + riu␣riu14
109␣mat + í␣matí14
110␣p + eix␣peix14
111es + pesp13
112i + mim13
113· + ·ç13
114␣ + en␣en13
115␣ + o␣o13
116␣a + n␣an13
117␣ca + da␣cada13
118␣ca + p␣cap13
119␣p + ar␣par13
120␣p + la␣pla13

Les 120 primeres de 300.

  • bytes per token al corpus
inicial␣muntanya
fusió 9␣muntanya
fusió 13␣muntanya
fusió 46␣muntanya
fusió 102␣muntanya
fusió 187␣muntanya
fusió 225␣muntanya
fusió 241␣muntanya
fusió 262␣muntanya

Les fusions s'apliquen per rang, no d'esquerra a dreta: a cada pas es busca la parella de rang més baix que encara hi sigui. És el que fa que el mateix tros doni sempre la mateixa segmentació, surti on surti del text.

300

Cada fusió afegeix exactament un token al vocabulari.

Alfabet de partida

És l'única diferència que decideix si hi pot haver <UNK>.

Corpus d'entrenament
fusions
300
mida del vocabulari
556
compressió al corpus
2,476 B/token
el text de prova, en tokens
18
torna byte a byte
sí
tokens perduts
0
Codificar i descodificar torna el text, byte a byte

La propietat que ha de complir un tokenitzador abans que cap altra: passar el text a enters i tornar-lo enrere ha de donar exactament el mateix text. Aquí es fa amb el text de prova, i es compara amb el que dona la variant de caràcters.

text originalEl gat 🐈 i la llama 🦙
identificadors[270, 447, 32, 240, 159, 144, 136, 265, 263, 256, 274, 109, 97, 32, …]
descodificatEl gat 🐈 i la llama 🦙
idèntic?sí, byte a byte

Amb byte-level, prova tots els botons: emojis, japonès, àrab, símbols matemàtics. Cap no falla, i no és sort. L'alfabet de partida són els 256 bytes sencers, hi surtin o no al corpus d'entrenament, i qualsevol seqüència de bytes és per definició una seqüència de símbols de l'alfabet. No hi pot haver <UNK> perquè no hi ha res que quedi fora. Canvia a «Caràcters» i prova els emojis altra vegada.

La compressió es mesura al corpus sencer, no al text de prova: 2,476 bytes per token amb 300 fusions. Sense cap fusió és exactament 1,000, perquè cada token és un byte. La corba de sota ensenya què guanyes per cada fusió que hi afegeixes, i que els guanys s'esgoten.

Tria «L'exemple del text» al corpus i posa-hi cinquanta fusions: hi surten «lo», «low», «es» i «est», les mateixes de la secció 2. L'ordre no és el de la il·lustració del text perquè aquí l'espai va enganxat a la paraula que segueix, com a GPT-2, i «lo» surt tres vegades contra les dues de «es»; la il·lustració del text fa servir la variant clàssica, amb marca de final de paraula.

3. Altres algorismes# sense fórmules

  • WordPiece (BERT): com BPE, però fusiona la parella que maximitza la versemblança del corpus en lloc de la freqüència bruta.
  • Unigram LM (Kudo, 2018): comença amb un vocabulari gran i elimina iterativament els tokens que menys perjudiquen la versemblança. Permet mostreig de segmentacions (subword regularization) — útil com a data augmentation.
  • SentencePiece: no és un algorisme sinó una implementació (de BPE i Unigram) que tracta l'espai com un caràcter més (▁), cosa que el fa independent de l'idioma i reversible sense ambigüitat. És l'estàndard pràctic.

BPE contra WordPiece contra Unigram

Tres algorismes, el mateix corpus i la mateixa mida de vocabulari. En què es diferencien de debò?

BPE␣muntanya1 tokens
WordPiece␣muntanya1 tokens
Unigram LM␣muntanya2 tokens

El punt mig marca un tros que parteix un caràcter multibyte pel mig. No és cap error: amb un alfabet de bytes, un token pot ser mitja «ó», i el text es reconstrueix igualment quan es tornen a ajuntar.

Els tres vocabularis comparats
algorismetokens al corpusbytes/tokentokens apresosexemples del vocabulari
BPE5.1212,781440␣bicicleta · ␣treballa · ␣muntanya · ␣família · ␣travessa · iblioteca
WordPiece5.2232,727440␣biblioteca · ␣bicicleta · ␣tomàquet · ␣treballa · ␣muntanya · ␣família
Unigram LM4.7163,020440␣treball · treballa · ␣bicicle · muntanya · família · ␣finestr
500 tokens

Els 60 símbols de l'alfabet hi són sempre als tres: sense ells hi hauria text irrepresentable.

Paraules per comparar
vocabulari
500 tokens
log-versemblança, BPE
-27,394 k
WordPiece
-26,970 k
Unigram LM
-24,680 k
guanya
Unigram LM
distància al pitjor
2,71 k nats
El jutge comú: la versemblança del corpus

La diferència entre els tres no és de mecànica sinó de criteri. BPE fusiona la parella més freqüent i no optimitza res. WordPiece fusiona la que més puja la versemblança del corpus sota un model unigrama. Unigram LM comença amb un vocabulari gran i elimina el que menys versemblança costa. Per comparar-los de manera justa cal, doncs, mesurar exactament allò: la versemblança del corpus sota cada vocabulari, amb cadascun segmentant com sap.

algorismecriteri de construcciócom segmentatokenslog-versemblança
BPEla parella més freqüentfusions per ordre de rang5.121-27.394
WordPiecela parella que més puja la versemblançael prefix més llarg que hi ha (voraç)5.223-26.970
Unigram LMelimina el que menys versemblança costaViterbi: la segmentació de màxima versemblança4.716-24.680

Amb 500 tokens de vocabulari, guanya Unigram LM i perd BPE, amb 2,71 k nats de diferència sobre el mateix text. No és cosmètic: són milers de nats, i la comparació és justa perquè els tres vocabularis tenen exactament la mateixa mida i s'avaluen sobre el mateix corpus.

Que BPE perdi era previsible: és l'únic dels tres que no mira la versemblança en cap moment. La freqüència és una heurística raonable —les parelles freqüents solen ser les que més ajuden— però no és el mateix que el criteri. I que Unigram tendeixi a guanyar WordPiece té una segona raó a part del criteri: segmenta amb Viterbi\,\text{Viterbi}, que troba la millor partició de la paraula, mentre que WordPiece agafa el prefix més llarg disponible i no torna enrere. Un algorisme voraç pot triar un tros llarg i car que obliga a partir malament la resta.

Que BPE surti últim no vol dir que sigui pitjor a la pràctica: és el que fan servir GPT-2 i tota la seva descendència, i la diferència de versemblança no es tradueix en una diferència proporcional de qualitat del model. El que sí que val la pena endur-se és que són tres respostes a la mateixa pregunta amb criteris diferents, i que el criteri es pot mesurar.

4. Conseqüències pràctiques (la part divertida)# sense fórmules

4.1 Per què el model no sap comptar les erres de "strawberry"

Perquè no veu s-t-r-a-w-b-e-r-r-y, veu tres o quatre peces, per exemple ["str", "aw", "berry"] (la partició exacta depèn del tokenitzador). Preguntar-li quantes 'r' hi ha és com preguntar-te a tu quants píxels té la lletra que estàs llegint. Els models moderns ho encerten sovint perquè han memoritzat el fet o perquè escriuen la paraula lletra per lletra primer (chain-of-thought com a solució de tokenització!).

4.2 Aritmètica

Si "1234" es tokenitza com ["123","4"] i "1235" com ["12","35"], la regularitat numèrica es trenca. Per això els tokenitzadors moderns forcen dígits individuals o grups de 3 dígits amb regles explícites. És una millora d'arquitectura disfressada de detall de preprocessament.

El que el model no pot veure

Un LLM no veu lletres: veu enters. Quines coses li resulten impossibles per aquest sol fet?

El que arriba al model: 6 enters
strawberry

El model no rep aquests caràcters: rep els seus identificadors. Els caràcters són el que nosaltres hi veiem en descodificar-los.

Tokenitzador: BPE de nivell byte amb 1.200 fusions entrenat sobre el corpus del curs, 1.456 tokens de vocabulari. Els talls concrets són els d'aquest vocabulari; amb el de GPT-4 o el de Llama serien uns altres, i el fenomen seria el mateix.

Conseqüència
1.200

Amb pocs tokens, les paraules es parteixen més i el model «veu» més lletres.

Cas
paraula
strawberry
tokens
6
«r» de debò
3
que el model pot veure
1
diferència
2
lletres per token
1,67
Quantes n'hi ha de debò contra quantes en pot veure

A «strawberry» hi ha 3 «r», comptades sobre el text. Però el model no rep el text: rep 6 enters, i entre ells només 1 són la lletra «r» tota sola. Les altres 2 estan amagades dins d'un token, i accedir-hi voldria dir saber com s'escriu aquell identificador — cosa que el model no té a l'entrada, sinó com a molt memoritzada als pesos.

stra×1wber×1ry

«Preguntar-li quantes erres hi ha és com preguntar-te a tu quants píxels té la lletra que estàs llegint», diu el text. La comparació és exacta: tu tampoc no reps píxels, reps formes. Que els models moderns ho encertin sovint no vol dir que ho vegin: o bé han memoritzat el fet, o bé escriuen primer la paraula lletra per lletra —«s-t-r-a-w…», on cada lletra sí que és un token— i llavors compten. Aquesta segona estratègia és chain-of-thought com a solució de tokenització, i és una de les raons per les quals raonar en veu alta funciona.

Baixa les fusions a cent i torna a mirar: amb un tokenitzador més pobre, la paraula es parteix més i la diferència s'encongeix. El punt cec no és una propietat del model, és una propietat del vocabulari.

Cap d'aquestes tres coses és un error del model ni un límit de la seva capacitat de raonar: totes tres són conseqüència de la frontera entre el text i els enters. Canvia el tokenitzador i canvien, sense tocar ni un pes. És per això que val la pena saber què hi ha exactament en aquella frontera.

4.3 Multilingüisme i equitat de costos

Els vocabularis entrenats majoritàriament amb anglès fragmenten molt més altres llengües. El mateix contingut pot costar 1,5–3× més tokens en català, i molt més en llengües amb escriptures no llatines. Això és cost econòmic real, latència real i context útil menor per als parlants d'aquestes llengües. Els models recents han ampliat vocabularis (128k–256k) en part per corregir-ho.

El cost de parlar català

El mateix contingut, dit en dues llengües. Per què costa més diners en una que en l'altra?

Anglès: 43 tokens4,21 bytes per token
The␣village␣school␣has␣four␣classrooms␣and␣a␣large␣playground.␣The␣children␣arrive␣at␣nine␣in␣the␣morning␣and␣leave␣at␣five␣in␣the␣afternoon.␣The␣teacher␣reads␣a␣story␣every␣Friday.
Català: 58 tokens2,91 bytes per token
L'escola␣del␣poble␣té␣quatre␣aules␣i␣un␣pati␣gran.␣Els␣nens␣hi␣entren␣a␣les␣nou␣del␣matí␣i␣en␣surten␣a␣les␣cinc␣de␣la␣tarda.␣La␣mestra␣llegeix␣un␣conte␣cada␣divendres.
Japonès: 195 tokens1,00 bytes per token
··························································································… 105 més
15 %

És el control que ho explica tot. Mou-lo de 0 % a 100 % i mira la ràtio.

1.200
Text paral·lel
anglès
43 tokens
català
58 tokens
ràtio català/anglès
1,35×
japonès
195 tokens
ràtio japonès/anglès
4,53×
català al corpus
15 %
La ràtio, mesurada sobre textos equivalents

Els tres textos diuen el mateix. Si la tokenització fos neutra respecte de la llengua, el nombre de tokens seria semblant. No ho és, i el motiu no és cap propietat del català: és que les fusions s'aprenen del corpus, i el corpus és 85 % anglès.

llenguacaràcterstokensbytes/token× l'anglèscontext útil de 128k
Anglès181434,211,00×538.791 caràcters
Català167582,911,35×368.552 caràcters
Japonès651951,004,53×42.667 caràcters

La columna de la dreta és la que fa mal: amb una finestra de 128.000 tokens, hi caben 538.791 caràcters d'anglès i només 368.552 de català. No és només que paguis 1,35 vegades més —a 3 dòlars el milió de tokens, cada milió de textos com aquest costa 45,00 dòlars més en català que en anglès— és que hi cap 26 % menys de document a la mateixa finestra, i que cada resposta triga 1,35 vegades més a generar-se.

I ara mou el control de dalt. Amb el corpus del tokenitzador al 100 % de català, la ràtio cau i s'inverteix: l'anglès passa a ser la llengua cara. No hi ha res d'intrínsec en cap de les dues, i això és exactament el que fa que sigui un problema de disseny i no de llengua. Els models recents han ampliat vocabularis a 128k–256k tokens en part per corregir-ho: amb més espai al vocabulari, hi caben fragments de més llengües.

El japonès queda a 4,53× i pateix un segon efecte a sobre: cada caràcter n'ocupa tres de bytes en UTF-8, de manera que fins i tot un tokenitzador de nivell byte perfectament equitatiu li cobraria tres vegades més per caràcter abans de cap fusió.

Aquest és el projecte que el text proposa, fet aquí amb un tokenitzador que pots reentrenar. Amb tiktoken i el tokenitzador de Llama sobre textos de debò els números concrets són altres, però la forma és la mateixa, i la conclusió també: el cost econòmic, la latència i el context útil dels parlants d'una llengua depenen de quanta d'aquella llengua hi havia al corpus on es van aprendre les fusions.

4.4 Tokens fantasma (glitch tokens)

Tokens presents al vocabulari però pràcticament absents de les dades d'entrenament (com els famosos SolidGoldMagikarp de GPT-2/3) tenen embeddings mai actualitzats i provoquen comportaments erràtics. Són un recordatori que vocabulari i corpus s'han d'entrenar sobre la mateixa distribució.

4.5 Espais i puntuació

" hola" i "hola" són tokens diferents. Aquest detall arruïna molts few-shot prompts i és una font clàssica de bugs en stop sequences i en constrained decoding.


5. Implicacions per al disseny# sense fórmules

  • Mida del vocabulari: més gran = seqüències més curtes (menys cost d'atenció) però matriu d'embeddings i softmax més cares. A models grans, un vocabulari gran surt a compte; a models petits, no.
  • Cost de la capa de sortida: la projecció final és d×Vd\times V. Amb d=4096d=4096 i V=256kV=256k són 1.000M de paràmetres només en aquesta matriu → d'aquí el weight tying (compartir la matriu d'entrada i de sortida), habitual en models petits.
  • La tokenització fixa el vocabulari per sempre: canviar-lo requereix reentrenar (o fer operacions delicades d'expansió de vocabulari amb embedding initialization).

El cost del vocabulari

Un vocabulari gran escurça les seqüències. Què costa, exactament, tenir-lo?

  • atenció: 2L²d, baixa perquè L s’escurça
  • capa de sortida: 2LdV, puja amb V
  • on ets ara
Desglossament de paràmetres
Cos del model (32 capes × 12d²)6,442 G86,0 %
Taula d'embeddings (V × d)524,288 M7,0 %
Projecció de sortida (d × V)524,288 M7,0 %
Total7,491 G100 %
128 k

GPT-2: 50k. Llama 3: 128k. Gemma: 256k.

4.096
32
100 k B

Comparteix la matriu d'entrada i la de sortida. Estalvia d×V paràmetres.

Configuracions reals
paràmetres de la sortida (d×V)
524,29 M
fracció del model sencer
14,0 %
paràmetres totals
7,49 G
compressió
7,16 B/token
el document, en tokens
13.969
atenció contra softmax
0,11×
Els mil milions de paràmetres del text, i què són en proporció

El text diu: «amb d=4096d=4096 i V=256kV=256k són 1.000M de paràmetres només en aquesta matriu». És exacte: 4096×256 000=1,05⋅1094096 \times 256\,000 = 1{,}05\cdot 10^{9}, i aquí en tens el número 1,049 G. Però el número sol no diu si és molt o poc: el que ho diu és quina fracció del model representa.

modelcos (capes)embeddings + sortidatotalfracció del vocabulari
0,3 B (d = 1.024)301,99 M262,14 M564,13 M46,5 %
8 B (d = 4.096)6,44 G1,05 G7,49 G14,0 %
70 B (d = 8.192)64,42 G2,10 G66,52 G3,2 %

Aquí hi ha la resposta a «per què a models grans un vocabulari gran surt a compte i a models petits no». La taula del vocabulari creix com d⋅Vd\cdot V, linealment en l'amplada; el cos del model creix com N⋅d2N\cdot d^2, quadràticament. En un model petit, 128.000 tokens de vocabulari se'n mengen una part que ja no és negligible; en un de gran, la mateixa taula és una fracció petita i el que en treus — seqüències més curtes, i per tant menys cost quadràtic d'atenció— val molt més del que costa.

Weight tying és la resposta dels models petits: compartir la matriu d'entrada i la de sortida estalvia exactament d×Vd\times V paràmetres, que amb aquesta configuració són 524,29 M —7,0 % del model sense compartir. Activa el commutador i mira la fila «fracció del model sencer» caure a la meitat. En models grans es deixa de fer, perquè l'estalvi ja no compensa la restricció que imposa.

Hi ha un tercer cost que la gràfica ensenya i el text només insinua: la softmax de sortida es calcula a cada posició sobre tot el vocabulari, i val 2·L·d·V FLOPs. Amb context curt i vocabulari gran, aquell terme pot superar el de l'atenció; amb context llarg, l'atenció quadràtica se'l menja. Mou el document i mira on es creuen les dues corbes.

6. El futur: models sense tokenitzador# sense fórmules

Hi ha una línia de recerca activa per eliminar aquesta capa:

  • Byte-level directe (ByT5, MegaByte): més robust, però seqüències llarguíssimes.
  • Patching dinàmic (Byte Latent Transformer, 2024-2025): agrupa bytes en "patches" de mida variable segons l'entropia predita — més bytes per patch quan el text és previsible. Elimina el tokenitzador mantenint l'eficiència.
  • Tokenització apresa conjuntament amb el model.

Cap ha desplaçat encara BPE en producció, però la direcció és clara: la tokenització és un hack heretat que a la llarga desapareixerà.

Patching per entropia: tokenitzar sense vocabulari

I si en comptes d'un vocabulari fix es decidissin les fronteres mentre es llegeix, segons què sorprèn?

Els patches: 33, de 3,70 bytes de mitjana
El␣gat␣dorm␣damunt␣la␣cadira␣tot␣el␣matí.␣El␣gos␣dorm␣sota␣la␣taula␣tota␣la␣tarda.␣El␣gat␣menja␣peix␣i␣el␣gos␣menja␣carn.

Com més fosc, més alta l'entropia mitjana del patch. Els clars són trossos que el model podia endevinar.

  • entropia predita (bits)
  • llindar
  • frontera de patch
Del corpusRepeticióCatalà nouXifres aleatòriesBarreja
Bytes per patch contra entropia mitjana, amb el llindar actual. La relació és decreixent, que és exactament el que promet el text.
3,2 bits

Es trenca el patch quan el model deixa de saber què ve. Llindar alt, patches llargs.

3 bytes

Quant context mira per predir el byte següent. Al BLT això és una xarxa petita.

24 bytes
Textos amb previsibilitat diferent
bytes del text
122
patches
33
bytes per patch
3,70
entropia mitjana
2,54 bits
un BPE de 856 tokens
34 tokens
reconstrueix el text
sí
Els bytes per patch segueixen l'entropia del text

Aquesta és la promesa del text: «més bytes per patch quan el text és previsible». No és una descripció del mecanisme, és una predicció comprovable, i aquí es comprova posant els cinc textos al mateix llindar i mesurant les dues magnituds per separat: l'entropia mitjana per una banda i la mida mitjana dels patches per l'altra.

textentropia mitjanapatchesbytes per patch
Repetició2,10 bits242,96
Del corpus2,54 bits333,70
Barreja2,64 bits283,21
Català nou2,82 bits313,35
Xifres aleatòries3,92 bits441,34

La taula està ordenada per entropia creixent i la columna de la dreta baixa amb ella: com més sorprèn el text, més curts són els patches. És exactament el comportament que fa que la idea tingui sentit —el model gasta capacitat on passa alguna cosa i no on el text es pot endevinar— i és el contrari del que fa un vocabulari fix, que gasta el mateix passi el que passi.

La reconstrucció també s'hi comprova: concatenar els bytes dels patches torna el text exacte. Val la pena mirar-ho sobre els bytes i no sobre el text descodificat: una frontera de patch pot partir una «ó» pel mig, i llavors cap dels dos trossos és text vàlid tot sol encara que junts sumin el caràcter. És el mateix que passa amb els tokens de BPE de nivell byte.

El model d'entropia d'aquí són uns recomptes de bytes d'ordre 3 amb reculada; al Byte Latent Transformer és una xarxa petita que corre abans del model gran. La mecànica que decideix les fronteres és la mateixa: trencar quan la predicció es fa insegura.

Cap d'aquestes línies ha desplaçat encara BPE en producció, i val la pena saber per què: un tokenitzador fix es calcula una vegada i costa zero en inferència, mentre que el patching dinàmic obliga a passar un model d'entropia per cada byte abans del model gran. El que el fa atractiu és que elimina d'un cop totes les conseqüències de la secció 4 —el comptar lletres, l'aritmètica partida, els espais, el cost desigual entre llengües— perquè totes surten d'haver fixat un vocabulari.

7. Comprova que ho has entès#

0 de 6 resoltes

  1. Descriu l'algorisme BPE en cinc passos.
  2. Per què byte-level BPE no té mai tokens <UNK>?
  3. Explica tres comportaments "estranys" d'LLMs que s'expliquen per la tokenització.
  4. Per què el mateix text costa més diners en català que en anglès? Si el català gasta 1,6 vegades més tokens, quin percentatge del document hi cap a la mateixa finestra de context, comparat amb l'anglès?
    Marge acceptat: 3 %
  5. Quin compromís fas en triar un vocabulari de 256k en lloc de 32k?
  6. Reprodueix el cas de la pregunta 2: fes que el tokenitzador perdi informació.

    Objectiu:Al widget de BPE, posa l'alfabet de partida a «Caràcters» i prova el text de prova dels emojis. Mira la comprovació: el text descodificat ha de deixar de coincidir amb l'original.

    Vés al widget ↑nivell = per defecte

8. Recursos#

Marca els que hagis llegit
  • Karpathy, Let's build the GPT Tokenizer (vídeo) i minbpe — la millor explicació pràctica que existeix.

  • Sennrich et al. (2016), Neural Machine Translation of Rare Words with Subword Units.

  • Kudo (2018), Subword Regularization; Kudo & Richardson (2018), SentencePiece.

  • OpenAI tiktoken i el Tokenizer interactiu per experimentar.

  • Pagnoni et al. (2024), Byte Latent Transformer: Patches Scale Better Than Tokens.