Woorden splitsen met de tokenizer van GPT-NL

Er wordt vaak gezegd dat taalmodellen een statistische voorspelling maken van welke woorden elkaar zouden moeten opvolgen. Dit kunnen ze inschatten doordat ze zijn getraind op gigantisch veel teksten.  Als we specifieker zijn, moeten we eigenlijk zeggen dat taalmodellen kijken naar tokens: een token kan een stukje van een woord, een heel woord, of alleen een leesteken zijn. Hoewel tokens doen denken aan lettergrepen, is er een groot verschil: hoe je woorden opdeelt in tokens hangt af van de taal van de teksten, het doel van het trainen, en de tool die je voor het opdelen kiest (de ‘tokenizer’). In deze post vertellen we over de GPT-NL tokenizer en leggen we uit waarom we voor een eigen tokenizer hebben gekozen.

Voorbeeld Tokenizer GPT-NL

Waarom tokens?

Het eerste wat we moeten begrijpen is: waarom kijkt een taalmodel naar tokens? Hoewel wij mensen betekenis toeschrijven aan woorden en zinnen, is het voor kunstmatige intelligentie veel efficiënter om naar tokens te kijken. Neem als voorbeeld het woord ‘koffiezetapparaat’. Zou een taalmodel dit woord als één token beschouwen, dan zou het apart moeten leren wat ‘koffiezetapparaat’ en ‘koffiezetapparaten’ betekenen, maar doordat het taalmodel patronen tussen tokens kan herkennen kan het leren dat de tokens ‘koffie’, ‘apparaat’ en ‘apparaten’ met elkaar verbonden kunnen worden. Ook zorgt de analyse van tokens ervoor dat het model menselijke teksten – die niet altijd correcte grammatica of spelling hebben – kan verwerken. Zou een model leren dat alleen ‘koffiezetapparaat’ een token is, dan zou het niet herkennen wat het foutief gespelde ‘koffiezetaparaat’ betekent.

Hoe splits je woorden?

Het splitsen van tekst naar tokens gebeurt met een tokenizer. Met een tokenizer kan je op basis van de taal waar je een taalmodel voor ontwikkelt de beste splitsing bepalen. Omdat het taalmodel leert welke tokens elkaar vaak opvolgen, is het belangrijk dat de tokens een combinatie van letters zijn die in het Nederlands ook vaak voorkomen. Veel tokenizers splitsen Nederlandse woorden echter op onlogische plekken. Neem bijvoorbeeld het woord “Auteursrechthebbenden”. Een model getraind op een andere tokenizer, die zich niet specifiek op het Nederlands richt, splitst dit woord op in zeven verschillende tokens: " "aute", "urs", "re", "ch", "the", "bb", "enden". Deze sub-woorden zelf hebben geen duidelijke betekenis waar het model de betekenis van het gehele woord uit kan halen. Hetzelfde geldt voor het eerdergenoemde voorbeeld ‘koffiezetapparaat’. Dit woord heeft in het Engels geen betekenis en wordt opgesplitst in zeven tokens: k-off-ie-zet-app-ara-at. De tokens in het Engels zeggen weinig over het woord ‘koffiezetapparaat’ in het geheel.

Een eigen tokenizer

Omdat ons model zich meer richt op het Nederlands dan veel andere modellen, hebben we dus een tokenizer nodig die het Nederlands beter ondersteunt. We hebben daarom besloten om een eigen tokenizer te maken. Onze tokenizer herkent 128.000 verschillende woorden of deelwoorden, waarvan ongeveer 40% Nederlands is. De rest bestaat uit Engels en code. Zo kunnen we Nederlands, Engels én programmeertalen goed aan.
Onze tokenizer herkent bij de woorden ‘auteursrechthebbenden’ en ‘koffiezetapparaat’ de bekende delen: “Auteursrecht” en “hebbenden” en koffie-zet-apparaat. Zo kan het model beter begrijpen waar het woord over gaat, omdat deze delen op zichzelf ook betekenisvol zijn. Het is dus niet alleen belangrijk dat er minder tokens zijn, maar ook of de tokens zélf betekenis hebben.

Tokenizer OLMo 2

OLMo: Vergelijking met een ander model

We hebben een demo gemaakt waarin je onze tokenizer kunt vergelijken met OLMo, een bekend open-source model. In deze demo kun je jouw eigen zinnen intypen en zien hoe beide modellen ze splitsen in tokens.

Wat opvalt: voor Nederlandse zinnen gebruiken wij vaak minder én logischere tokens dan OLMo. De betekenis blijft hetzelfde, maar ons model is hierdoor efficiënter en kan woorden beter begrijpen. Voor Engelse zinnen is het verschil minder groot, daar zitten we op ongeveer hetzelfde aantal tokens per zin.

Minder tokens, zuiniger model

Hoewel het dus niet altijd draait om mínder tokens, zorgt onze manier van splitsen vooral voor een slimmer gebruik van tokens. Toch is het fijn dat we hierdoor vaak minder tokens per Nederlandse zin nodig hebben. Dat helpt ook voor het milieu: elk token dat het model genereert, kost een beetje energie. Als je in een voorbeeldzin 92 tokens gebruikt in plaats van 160, gebruik je ongeveer 58% van de energie. Ons model is dus ook energiezuiniger dankzij deze slimme splitsing.

Probeer het zelf!

Benieuwd hoe dit werkt? Probeer onze demo en vergelijk zelf! Zo zie je meteen het verschil tussen onze tokenizer en die van OLMo.