N-gram embedding-laag: hoe taalmodellen woorden in stukjes lezen
Een computer kan niet rechtstreeks met woorden rekenen; hij heeft getallen nodig. Daarom zet elk taalmodel woorden om in een lijst getallen, een zogeheten embedding of vector, die de betekenis van dat woord ongeveer vastlegt. Een n-gram embedding-laag is een specifieke manier om dat te doen: in plaats van elk heel woord als één ondeelbaar blokje te behandelen, knipt het systeem woorden op in kleinere, overlappende stukjes van een vaste lengte en leert het de betekenis van die stukjes. Vergelijk het met een puzzel waarbij je niet elk woord als los, compleet puzzelstuk beschouwt, maar elk woord eerst in kleinere puzzelstukjes knipt die je opnieuw kunt gebruiken voor andere woorden.
Neem het woord "wandelaar". Een n-gram embedding-laag met stukjes van drie letters (een zogeheten 3-gram of trigram) hakt dit op in brokjes als "wan", "and", "nde", "del", "ela", "laa" en "aar". Elk brokje krijgt een eigen vector, en de uiteindelijke vector van het hele woord wordt samengesteld uit al die brokjes. Het voordeel: als het model later het woord "wandelaartje" tegenkomt, dat het nog nooit zag, herkent het toch het brokje "wandel" en kan het een redelijke inschatting maken van de betekenis. Deze aanpak wordt vooral gebruikt om onbekende woorden, tikfouten, samenstellingen en woorden in talen met veel verbuigingen toch te kunnen begrijpen.
Wat is het precies?
Het proces begint met het kiezen van een waarde voor n: het aantal letters (of soms woorden) per brokje. Bij n=3 ontstaan trigrammen, bij n=4 vierletterige brokjes, enzovoort. In de praktijk gebruiken systemen vaak meerdere waarden van n tegelijk, bijvoorbeeld alle brokjes van drie tot en met zes letters, zodat zowel korte als langere patronen worden opgevangen.
Vervolgens krijgt elk uniek brokje een plek in een grote tabel met vectoren, de embedding-tabel. Omdat het aantal mogelijke letterÂcombinaties enorm kan oplopen, gebruiken veel systemen een truc genaamd hashing: elk brokje wordt met een wiskundige functie afgebeeld op een van bijvoorbeeld twee miljoen vaste posities in de tabel. Dat houdt de tabel behapbaar, met als klein nadeel dat verschillende brokjes soms toevallig dezelfde plek delen.
Om de vector van een heel woord te krijgen, telt of middelt het model de vectoren van alle bijbehorende n-grammen bij elkaar op. Tijdens het trainen, meestal met een neuraal netwerk dat leert woorden te voorspellen op basis van hun context in miljoenen zinnen, passen de vectoren van de n-grammen zich geleidelijk aan zodat vergelijkbare brokjes ook vergelijkbare getallen krijgen. Zo leert "wandel" uiteindelijk een vector die dicht bij die van "lopen" en "stappen" ligt, simpelweg omdat die woorden vaak in vergelijkbare zinnen voorkomen.
Wat wil men ermee bereiken?
Het belangrijkste doel is robuustheid. Een taalmodel dat alleen hele woorden kent, loopt vast zodra het een woord tegenkomt dat niet in zijn woordenboek staat: een nieuw modewoord, een tikfout, een dialectvorm of een samengesteld woord. Omdat het Nederlands, net als het Duits en het Fins, woorden gemakkelijk aan elkaar plakt (denk aan "kinderfietsverzekeringspolis"), is dit probleem in deze talen extra groot. Door woorden in herbruikbare brokjes te knippen, kan een model ook onbekende woorden gedeeltelijk begrijpen op basis van bekende stukjes.
Daarnaast speelt efficiëntie mee. Een woordenboek met alle mogelijke woordvormen van een taal kan miljoenen items bevatten, terwijl het aantal veelvoorkomende letterbrokjes veel kleiner is. Dat maakt de modellen compacter en sneller te trainen, wat vooral aantrekkelijk is voor toepassingen met beperkte rekenkracht, zoals tekstclassificatie op een telefoon of taalherkenning voor talen waarvoor weinig trainingsdata beschikbaar is.
Ten slotte helpt de techniek bij het omgaan met ruis: spelfouten, informeel taalgebruik op sociale media of scanfouten in oude documenten. Omdat de betekenis van een woord voor een deel wordt opgebouwd uit gedeelde brokjes, hoeft een klein verschil in spelling niet meteen te leiden tot een compleet onbekend woord.
Voorbeelden uit de praktijk
De bekendste toepassing is fastText, ontwikkeld door onderzoekers van Facebook AI Research. In het artikel "Enriching Word Vectors with Subword Information" (Bojanowski, Grave, Joulin en Mikolov, 2017) introduceerden zij character-n-gram embeddings als uitbreiding op het eerdere word2vec-model van Tomas Mikolov uit 2013. Hetzelfde team publiceerde in 2016 ook "Bag of Tricks for Efficient Text Classification", waarin n-gram-gebaseerde embeddings werden gebruikt voor razendsnelle tekstclassificatie.
Facebook gebruikte de fastText-techniek later ook voor een taalherkenningsmodel dat 176 talen kan onderscheiden, gepubliceerd in 2017 en bijgewerkt in latere jaren, en dat nog altijd veel gebruikt wordt vanwege de combinatie van snelheid en nauwkeurigheid.
Een verwante aanpak is die van Yoon Kim en collega's, die in 2016 een "character-aware" taalmodel beschreven waarbij een neuraal netwerk (een convolutional neural network) rechtstreeks over letterreeksen leert, zonder losse n-gram-tabel maar met hetzelfde uitgangspunt: betekenis opbouwen uit subwoorddelen.
Ook de ontwikkeling van Byte-Pair Encoding (BPE) door Rico Sennrich en collega's aan de Universiteit van Edinburgh (2016) borduurt voort op het n-gram-idee: in plaats van vaste letterbrokjes leert dit algoritme automatisch welke veelvoorkomende letterÂcombinaties het beste als eenheid kunnen dienen. Deze subword-tokenisatie ligt aan de basis van tokenizers die tegenwoordig in vrijwel elk groot taalmodel worden gebruikt.
Hoe ver is de techniek?
N-gram embedding-lagen in hun klassieke vorm dateren uit de periode 2013-2017, vóór de doorbraak van transformer-architecturen zoals BERT en GPT. Ze zijn inmiddels een gerijpte, goed begrepen techniek: de wiskunde is stabiel en de implementaties (zoals de open-source fastText-bibliotheek) worden nog steeds onderhouden en gebruikt, vooral waar snelheid en beperkte rekenkracht belangrijker zijn dan het allerhoogste nauwkeurigheidsniveau.
De grootste beperking is dat klassieke n-gram embeddings statisch zijn: het woord "bank" krijgt altijd dezelfde vector, of het nu om een zitbank of een geldbank gaat. Moderne contextuele modellen zoals BERT en GPT lossen dit op door de vector van een woord te laten afhangen van de zin eromheen. Die modellen gebruiken meestal geen vaste n-grammen meer, maar door het model zelf geleerde subword-eenheden via BPE, WordPiece of SentencePiece (dat laatste ontwikkeld door Google, gepubliceerd door Taku Kudo en John Richardson in 2018).
Het achterliggende idee van n-gram embeddings, namelijk dat je woorden niet als één geheel maar als optelsom van kleinere delen moet zien, is dus niet verdwenen maar geëvolueerd naar geavanceerdere, geleerde vormen van subword-tokenisatie. Puur letterlijke n-gram embeddings zoals in de oorspronkelijke fastText-aanpak worden vandaag vooral nog ingezet in lichte, snelle modellen en niet in de grootste taalmodellen.
Wie werken eraan?
Facebook AI Research, tegenwoordig Meta AI geheten, staat aan de basis van fastText en blijft de bibliotheek als open source onderhouden. De oorspronkelijke auteurs Piotr Bojanowski, Edouard Grave, Armand Joulin en Tomas Mikolov werkten destijds bij dit lab; Mikolov was eerder ook de bedenker van word2vec bij Google.
Google zelf heeft met de ontwikkeling van SentencePiece en de bredere toepassing van BPE in modellen als BERT en T5 een grote rol gespeeld in de opvolgers van n-gram embeddings. De Universiteit van Edinburgh, met onderzoekers als Rico Sennrich, leverde met het BPE-werk een fundamentele bijdrage die breed is overgenomen door de hele onderzoeksgemeenschap.
Verder wordt er via open platforms als Hugging Face gewerkt aan toegankelijke implementaties van moderne subword-tokenizers, waardoor ontwikkelaars wereldwijd, ook buiten grote techbedrijven, met deze technieken kunnen experimenteren.
Verder lezen
- fastText — officiële site van Facebook/Meta's n-gram embedding-bibliotheek
- Meta AI — onderzoekspagina van het lab achter fastText
- ACL Anthology — doorzoekbaar archief van NLP-onderzoekspublicaties
- arXiv — preprint-archief met de oorspronkelijke fastText- en BPE-papers
- Hugging Face — documentatie over moderne tokenizers en subword-technieken