Het "Bert" (Bidirectional Encoder Representations from Transformers) natural language processing (nlp) model is zeer succesvol voor een heleboel nlp taken gebleken. Interessant is dat het model "(semi) unsupervised" is getraind. D.w.z. dat er geen 'labeling' van gewenste uitkomsten plaatst heeft moeten vinden. Bert heeft blijkbaar een heleboel kennis (begrip?) van taal opgestoken door op 3 dingen te oefenen:
- Het invullen van gemaskeerde woorden. 25% van de woorden zijn in de input van een 'masker' voorzien. Een specifiek label.
- Het bepalen of een eerdere zin bij een volgende zin hoort. Of dat het een onzin volgorde betreft.
- Bert maakt ook gebruik van 'woordembedding'. Dit is een, in nlp, veelgebruikte methode om woorden te definieren op basis van de woorden in de directe omgeving. Bij voldoende tekst om te leren ontstaat er een zeker 'begrip' van het betreffende woord. Het, veel gebruikte, voorbeeld is dat het woord "man" tot "koning" een gelijke relatie heeft als "vrouw" tot koningin. Je kan dus inprincipe 'uitrekenen' dat bijvoorbeeld "man" + "koning" - "koningin" = "vrouw". Uiteraard heeft het systeem nog steeds geen benul ervan wat een "vrouw" feitelijk is. Maar het woord "dame" zal er bijvoorbeeld wel in de virtuele buurt liggen.
Bert werkt, net als de meeste nlp modellen, met woorden (of woorddelen) - niet met letters. D.w.z. met indexen van woorden.
Een tekst kan er bijvoorbeeld zo uitzien:
[353, 33, 4444, 9753 ....]
De Bert 'vocabulary' (de woorden die Bert 'kent') is ongeveer 30.000 woorden groot. Als je beseft dat de "nltk" engelse woordbibliotheek uit 466.544 verschillende woorden bestaat is het duidelijk dat Bert maximaal zo'n kleine 6,5 % van de woorden kent. Dat lijkt erg weinig voor een 'top nlp' programma. Er zijn 2 manieren hoe dit bij Bert wordt opgelost:
- Bert kent vooral de meest gebruikte woorden. Dat wil wel zeggen de meest gebruikte van de data waarop Bert is getraind. (Vooral Wiki)
- Bert kent 'woorddelen'. Bijvoorbeeld 'industrie' zou kunnen bestaan uit 'indus' en '#trie'. Door ook alle letters als woorddelen op te nemen (#a .. #z, #A .. #Z) kunnen uiteindelijk alle woorden worden opgebouwd. Zij het dat elk woorddeel dus zijn eigen 'token' meekrijgt.
Wat zouden mogelijke verbeteringen in het nlp gebied kunnen zijn? Met alle slimme keuzes die hierbij gemaakt zijn gaat, vermoedelijk, wel wat "kostbare" informatie verloren:
- Hoofd / kleine letters. Bert is in 2 (engelse) versies uitgebracht (los van de verschillende model groottes). Een kleine letter variant en een gemixte variant waarin de hoofdletters, bij de tekst voorbewerking, ongemoeid zijn gelaten. Het voordeel van de 'hoofdletter variant' is dat informatie behouden blijft. "De Kok" kan gezien worden als naam en is wellicht niet het beroep. Het nadeel is dat het model, in de basis, geen enkel idee heeft dat bijvoorbeeld "De" en "de" hetzelfde woord betreft.
- Woordbasis. Bij de 'vertaling' van woorden naar getallen gaan de letters verloren. Daarmee dus ook de 'ingebouwde' betekenis. Het model heeft er bijvoorbeeld geen idee meer van dat bijvoorbeeld "brand", "brandend", "verbrand", "brandweer" een samenhangende betekenis hebben. Daarmee gaat dus ook veel potentiele betekenis verloren. In nlp wordt daarom wel gebruik gemaakt van 'stemming' of lemmetizing'. Woorden worden dan eerst teruggebracht naar hun "stam". In dit geval bijvoorbeeld "brand". Nadeel hiervan is dat daarmee ook gelijk de woordvariatie verloren gaat voor het systeem. Een "brand" en "brandweer" hebben toch ook andere betekenissen.
- Typefouten. Afhankelijk van de bron van de informatie zijn er meer of minder type- en spelfouten. Deze zullen niet vaak in die specifieke vorm terugkomen en dus al snel of een unieke 'key' krijgen of, veel waarschijnlijker, buiten de vocabulary vallen. Een woord als "meesterljik" wordt dus bijvoorbeeld niet herkend in een film- of boek recentie.
- Bijzondere woorden. Een aantal "woorden" hebben een heel specifieke, vaak herkenbare, betekenis. Een goed voorbeeld hiervan is een emailadres (xx@mymail.com) of een webadres (www.wowwateensite.nl). Het minste dat hier nodig lijkt is dat deze niet als aparte woorden in het model opgenomen worden. Vaak wordt punctuatie, in de voorbewerking, vervangen door een spatie waardoor deze 'fout' ontstaat.
- Punctuaties: !@#$%^&*.:;'() etc. Deze tekens voegen normaliter 'betekenis' toe aan een tekst. Bij gebruik in nlp worden deze vaak geheel of iig voor het grootste deel verwijderd. Voordeel is dan in ieder geval wel dat een woord hetzelfde wordt gezien met of zonder aansluitend teken. ("vooruit" is hetzelfde als "vooruit!" maar denk ook aan een zinafsluitingspunt.) Het correct behandelen van afkortingen is daarbij ook een uitdaging. Is "k.n.m.i" hetzelfde als "knmi" of "k n m i"? Je moet dan wel vooraf kunnen herkennen dat een punt gebruikt wordt in een afkorting en niet als zinseinde.
- Getallen: Hoe behandel je getallen? Vaak wordt een willekeurige selectie van getallen aan de vocabulary toegevoegd. Je kan ze als met aparte keys per 'digit' opnemen. Wat te doen met de tussenliggende decimale punten of comma's? (zie ook 'punctuaties')
- Woordlengte. Hoewel minder hard te maken, is er gevoelsmatig een relatie tussen de woordlengte en de "complexiteit" van de zin en / of het woord. Voor de woorden die naar getallen worden vertaald gaat deze informatie verloren. Wellicht heeft Bert dit probleem al een beetje ondervangen door met name de minder gebruikte woorden als aparte letters op te nemen.
- Tekstopbouw (titels / alineas / voetnoten) Een koptekst heeft een heel andere waarde in een verhaal dan de tekst zelf. Vaak wordt daar de kern weergegeven van waar de betreffende alinea's eronder over gaan. Dit lijkt mij uiterst belangrijke informatie bij een nlp vraagstuk. Denk ook bijvoorbeeld aan dikgedrukte of cursieve woorden. Meestal gaat de tekst opbouw in een nlp model verloren (hoewel een bekend ander model, gpt-2, structuur wel deels lijkt vast te houden.)
Een 'simpele' oplossing voor (de meeste van ) deze problemen lijkt te zijn door naar 'letter-modellen' toe te gaan. Modellen die gevoed worden met de letters zelf en niet met de woorden. In praktijk blijken deze modellen tot nu toe veel slechter te werken dan woord-modellen. De uitdaging is dus "Is er een model te bedenken dat "best of both" aan kan? (En de vervolg vraag uiteraard "Levert het wat op?")
Mogelijk een van de grootste gebreken van een 'letter-model' is het ontbreken van de "wordembedding", de logica die de modellen vinden door woorden te definieren aan de hand van "omgevingswoorden". Deze kennisopbouw zou je dus in ieder geval ook willen vasthouden.
Mogelijk een van de grootste gebreken van een 'letter-model' is het ontbreken van de "wordembedding", de logica die de modellen vinden door woorden te definieren aan de hand van "omgevingswoorden". Deze kennisopbouw zou je dus in ieder geval ook willen vasthouden.
Geen opmerkingen:
Een reactie posten