Byte Pair Encoding: hoe taalmodellen tekst in stukjes knippen
Elke keer dat je een vraag stelt aan een taalmodel zoals GPT, gebeurt er iets onder de motorkap voordat het model ook maar één woord "begrijpt": je zin wordt opgeknipt in kleine brokjes, tokens genoemd. Byte Pair Encoding, meestal afgekort tot BPE, is de techniek die bepaalt waar die knippen precies vallen. Het is geen taalkundige exercitie waarbij iemand voorvoegsels en achtervoegsels aanwijst, maar een statistische methode: het algoritme telt simpelweg welke combinaties van tekens het vaakst samen voorkomen in een grote hoeveelheid tekst, en voegt die stap voor stap samen tot nieuwe, grotere bouwstenen.
Een vergelijking maakt het concreet. Stel je leert een nieuwe medewerker de afkortingen van je bedrijf: eerst kent hij alleen losse letters, maar omdat combinaties als 'kpi', 'hr' en 'roi' zo vaak voorbijkomen, gaat hij die al snel als één geheel herkennen in plaats van als aparte letters. BPE doet iets vergelijkbaars met tekst: het begint bij losse letters en voegt de meest voorkomende paren steeds samen, totdat er een compacte set bouwstenen ontstaat waarmee vrijwel elk woord snel is samen te stellen.
Wat is het precies?
Het proces begint met een corpus: een grote verzameling tekst die als trainingsmateriaal dient. Aanvankelijk wordt elk woord in dat corpus opgesplitst in de kleinste eenheden, meestal losse letters of tekens. Het algoritme telt vervolgens welk paar van twee opeenvolgende symbolen het vaakst voorkomt in de hele tekstverzameling.
Dat meest voorkomende paar wordt samengevoegd tot één nieuw symbool, dat vanaf dat moment als eenheid meetelt. Dit tellen en samenvoegen wordt daarna talloze keren herhaald, elke keer met het paar dat op dat moment het vaakst voorkomt. Na een vooraf vastgesteld aantal samenvoegstappen stopt het proces, en het resultaat is een vocabulaire: een lijst van veelgebruikte subwords, oftewel deelwoorden, naast de oorspronkelijke losse letters.
Met die vocabulaire kan vrijwel elk woord worden weergegeven als een combinatie van bekende stukjes. Een veelvoorkomend woord als 'de' krijgt al snel zijn eigen token, terwijl een zeldzaam of nieuw woord wordt opgeknipt in kleinere, wel bekende brokstukken. Er is ook een variant die niet op leestekens maar op bytes werkt, de kleinste eenheden waarin tekst in een computer wordt opgeslagen; dat heet byte-level BPE, en het voordeel daarvan is dat werkelijk elke tekst, in elke taal en zelfs emoji of programmeercode, altijd kan worden weergegeven zonder dat er ooit een volledig onbekend teken opduikt.
Belangrijk is dat deze tokenizer, zoals het onderdeel dat de tekst opknipt wordt genoemd, wordt getraind vóórdat het eigenlijke taalmodel zelf getraind wordt. Het is dus een aparte, voorbereidende stap: eerst wordt bepaald welke bouwstenen er zijn, pas daarna leert het model wat het met combinaties van die bouwstenen kan doen.
Wat wil men ermee bereiken?
Het onderliggende probleem is eenvoudig te begrijpen: een taalmodel kan onmogelijk elk bestaand woord als aparte eenheid in zijn geheugen hebben. Talen zijn productief, mensen vormen voortdurend nieuwe samenstellingen, verbuigingen en spellingen, en een vocabulaire die elk mogelijk woord apart zou bevatten, zou enorm groot moeten zijn en toch nog steeds tekortschieten zodra iemand een nieuw woord verzint.
Subword-tokenisatie, waarvan BPE de bekendste vorm is, lost dit op door woorden niet als hele, onveranderlijke eenheden te behandelen maar als combinaties van kleinere, herbruikbare stukjes. Een woord dat het model nog nooit eerder heeft gezien, kan zo alsnog worden weergegeven als een aaneenschakeling van wél bekende deeltjes, in plaats van te worden afgedaan als een compleet onbekend symbool. Dat maakt het vocabulaire behapbaar in omvang, terwijl het model toch met vrijwel elke tekst overweg kan.
Voorbeelden uit de praktijk
BPE is niet ontstaan binnen de taalmodellenwereld. Het algoritme werd al in 1994 bedacht door Philip Gage, als een algemene compressietechniek voor data, en beschreven in het tijdschrift The C Users Journal. Er zat toen geen enkele link met taalverwerking aan vast.
De doorbraak naar taaltechnologie kwam in 2016, toen onderzoekers Rico Sennrich, Barry Haddow en Alexandra Birch van de Universiteit van Edinburgh in hun paper 'Neural Machine Translation of Rare Words with Subword Units' lieten zien dat BPE uitstekend werkt om zeldzame woorden in machinevertaalsystemen te verwerken. Dit paper wordt algemeen gezien als het startpunt van BPE als standaardtechniek binnen natural language processing, oftewel de computerverwerking van taal.
Daarna volgde snel bredere toepassing. OpenAI gebruikte in 2019 een byte-level variant van BPE in GPT-2, beschreven in het paper 'Language Models are Unsupervised Multitask Learners'; latere modellen zoals GPT-3 en GPT-4 bouwen hierop voort met vergelijkbare tokenizers, toegankelijk via de open-source bibliotheek tiktoken. In hetzelfde jaar, 2019, paste Meta AI (destijds Facebook AI Research) byte-level BPE toe in het RoBERTa-model.
Google koos voor een net iets andere invalshoek en publiceerde in 2018 SentencePiece, een open-source bibliotheek van onderzoekers Kudo en Richardson die zowel BPE als een alternatieve methode, het zogeheten unigram language model, ondersteunt. SentencePiece behandelt ook spaties als gewone tekens, wat het geschikt maakt voor talen zonder duidelijke woordscheiding, en wordt onder meer gebruikt in modellen als T5 en ALBERT. Daarnaast onderhoudt Hugging Face een veelgebruikte open-source bibliotheek genaamd tokenizers, die BPE en verwante technieken implementeert en breed wordt ingezet binnen de onderzoeksgemeenschap.
Hoe ver is de techniek?
BPE en zijn varianten zijn inmiddels geen experimentele nieuwigheid meer, maar bijna overal de standaardpraktijk bij het bouwen van grote taalmodellen. Vrijwel elk bekend model gebruikt een vorm van subword-tokenisatie, of dat nu klassieke BPE is, de byte-level variant, of een verwante methode zoals WordPiece of het unigram-model.
Toch kent de techniek duidelijke beperkingen die de sector openlijk erkent. Getallen worden door BPE soms inconsistent opgesplitst: hetzelfde getal kan in verschillende contexten in andere brokjes uiteenvallen, wat kan bijdragen aan rekenfouten van taalmodellen. Talen die minder goed vertegenwoordigd zijn in de tekst waarop de tokenizer is getraind, waaronder veel niet-Engelse talen, worden vaak opgeknipt in meer en kleinere tokens dan het Engels. Dat maakt verwerking van die talen duurder, omdat meer tokens meer rekenkracht kosten, en kan ook ten koste gaan van de prestaties.
Verder blijft BPE fundamenteel een statistische, geen taalkundige methode. De subwords die het produceert, komen niet noodzakelijk overeen met betekenisvolle taalkundige eenheden zoals voorvoegsels, stammen of achtervoegsels; het algoritme 'weet' niets van grammatica, het telt alleen frequenties. Onderzoekers zoeken dan ook voortdurend naar verfijningen en alternatieven, zonder dat er op dit moment een duidelijke opvolger is die BPE breed heeft verdrongen.
Wie werken eraan?
De academische oorsprong van BPE als taaltechnologie ligt bij de Universiteit van Edinburgh, waar Sennrich, Haddow en Birch de methode in 2016 introduceerden voor machinevertaling. Vanuit de industrie hebben vooral OpenAI, Google en Meta AI de techniek verder uitgewerkt en toegepast in hun respectievelijke taalmodellen, elk met eigen implementaties en varianten zoals byte-level BPE of SentencePiece.
Daarnaast speelt Hugging Face een belangrijke rol als aanbieder van open-source gereedschap: de tokenizers-bibliotheek van dit bedrijf wordt door onderzoekers en ontwikkelaars wereldwijd gebruikt om zelf tokenizers te trainen en toe te passen, wat heeft bijgedragen aan de brede verspreiding en standaardisatie van BPE-achtige technieken binnen het vakgebied.