Wat is Natural Language Processing (NLP)?

19 mei, 2021

Rick Foto School of Data Science

Rick Vink – Expert in Machine Learning & Deep Learning

“Natural Language Processing (NLP) is het vakgebied binnen Kunstmatige Intelligentie (AI) dat zich bezighoudt met het analyseren van menselijke taal en de communicatie tussen mens en computer. Dit zijn vaak complexe vraagstukken waar een combinatie van meerdere Natural Language Processing technieken voor nodig zijn.“

Inhoudsopgave

Wat is Natural Language Processing?

Computers en mensen communiceren op andere manieren. Waar computers communiceren in 0’etjes en 1’tjes, spreken en schrijven mensen met klanken en karakters. Uiteindelijk draait het bij communicatie allemaal om informatie overbrengen. Wat Natural Language Processing doet is de brug maken tussen de menselijke manier van communiceren en die van de computer.

Toepassingen van Natural Language Processing

Berichten filteren

We zijn allemaal wel bekend met de spamfolder in ons e-mail systeem. Dit systeem bespaart ons veel tijd wanneer we onze mailbox doorspitten. Deze mails worden herkend op het woordgebruik en de schrijfstijl met behulp van een kunstmatige intelligentie.

Hiernaast zijn er vele andere situaties waar het filteren van berichten heel handig is. Denk bijvoorbeeld aan de klantenservice waar veel berichten van klanten binnenkomen. Al deze berichten moeten uiteindelijk naar de juiste persoon worden geleid. Dit wordt in sommige gevallen nog met de hand gedaan. Gelukkig is dit een proces dat goed te automatiseren is met behulp van Natural Language Processing. Kunstmatige Intelligentie kan woorden en/of woordcombinaties leren herkennen die belangrijk zijn voor het classificeren van de content. Vervolgens kan deze naar de juiste persoon worden doorgestuurd. Zo kan er een hoop tijd worden bespaard!

Berichten worden geanalyseerd op onderwerp. Daarna worden ze doorgestuurd naar de juiste afdeling.
Afbeelding 1. NLP kan organisaties helpen bij het automatisch stroomlijnen van communicatie vanuit klanten. Op deze manier komt iedere klant direct bij de juiste afdeling terecht.

Sentiment analyse

Sentiment analyse is bedoeld voor het achterhalen van emotie uit teksten. Zo zijn er bijvoorbeeld veel opinies te vinden op social media. Denk aan: Wat vindt men van de prijs van ons product? Hoe vindt men de kwaliteit? Zijn de klanten blij met de service? Het bijhouden van hoe het publiek denkt over je product is heel waardevol. Deze informatie kan bijvoorbeeld dienen als sturing voor het verbeteren van het product of het stroomlijnen van je bedrijfsprocessen.

Naast social media kan sentiment analyse ook worden toegepast op e-mails van klanten, antwoorden van open vragen in enquêtes en gesprekken van klanten met de klantenservice. Dit maakt sentiment analyse een zeer krachtige tool om in kaart te brengen wat goed gaat met een product en ook waar nog verbeterd kan worden. 

Berichten worden geclassificeerd op onderwerp waarna het kan worden geanalyseerd op sentiment.
Afbeelding 2. NLP kan voor verschillende producten bijhouden wat het publieke sentiment is. Met behulp van deze informatie kunnen producten en diensten verbeterd worden.

Teksten doorzoeken en vragen met antwoorden vinden

Organisaties beschikken over veel informatie. Hier zit veel waarde in voor bijvoorbeeld het beantwoorden van vragen die intern of extern gesteld worden. Echter is deze informatie vaak minder toegankelijk omdat het om veel data gaat. Vaak staat die data niet in een handige vorm om gemakkelijk doorzocht te worden. Dit kan gaan om data in verschillende bestandstypen of gesloten systemen. Kortom: zoeken naar een naald in een hooiberg dus.

Een tak van sport binnen Natural Language Processing is het bepalen in hoeverre de inhoud van teksten op elkaar lijken. Zo kan een nieuwe vraag worden vergeleken met vragen die eerder gesteld zijn, waarbij je de bijbehorende antwoorden tevoorschijn kan halen. Een voorbeeld hiervan kan je vinden op Tweedekamervrager. Hier hebben we een portaal gemaakt die vergelijkbare vragen vindt in de database van de Tweede Kamer.

Berichten worden vergeleken met elkaar. Er worden een score gegeven aan hoe goed de teksten met elkaar overeenkomen.
Afbeelding 3. NLP kan gebruikt worden om antwoorden te voorzien op vragen of zoekopdrachten. Op deze manier vinden gebruikers de meest relevante content bij hun zoekopdracht.

Teksten genereren

Teksten genereren heeft veel praktische toepassing, zoals het samenvatten van documenten en de autocomplete functie in jouw tekstverwerkingsprogramma.

De Natural Language Processing modellen die veel los hebben gemaakt op het gebied van teksten genereren zijn de GPT modellen. Deze modellen zijn getraind op het voorspellen van het volgende woord in een tekst. De teksten die gebruikt zijn voor het trainen van het model komen onder andere van Wikipedia, nieuws en boeken. GPT-2 model heeft de wereld laten zien dat Deep Learning een veelbelovend pad is voor het genereren van teksten. 

We hebben dit toegepast bij het maken van kookrecepten. Hiervoor trainden wij het GPT-2 model om automatisch kookrecepten te genereren. Wat bleek? De recepten waren goed eetbaar wanneer ze klaargemaakt werden! Oftewel, AI is in staat middels GPT-2 kookrecepten te bedenken.

Een kook recept gemaakt door een AI
Afbeelding 4. NLP is ingezet om, op basis van eerder geschreven recepten, nieuwe recepten te genereren.

Wilt u Natural Language Processing gebruiken in uw werkzaamheden?

Hoe werkt Natural Language Processing?

Er zijn vele diverse taal uitdagingen opgelost met NLP technieken. Dit is heel indrukwekkend! De modellen zelf kunnen vrij complex zijn voor beginners. Gelukkig zijn de basis concepten vrij goed te begrijpen. De NLP concepten die wij hier gaan behandelen zijn in de meeste NLP producten toegepast. Het begrijpen van deze concepten zal je waardering en begrip voor Natural Language Processing vergroten.

Een simpele techniek voor simpele problemen

Een methode die goed werkt om tekst te analyseren is door simpelweg het aantal woorden te tellen. Deze methode noemen we bag of words. Hiermee kunnen al enkele basale conclusies getrokken worden. Het is met name zo dat een tekst met voornamelijk positieve woorden, zoals “goed”, “geweldig” of “blij” waarschijnlijk positief is. In tegenstelling tot teksten die vooral negatieve woorden bevatten. 

Hiervoor wordt meestal de tekst gefilterd door minder belangrijke woorden zoals “en”, “de”, “het” weg te halen. Dit omdat die weinig waarde geven aan een tekst. Daarnaast helpt het om woorden te versimpelen. Denk bijvoorbeeld aan de woorden “zwemmen” en “gezwommen” naar “zwem”. Dit process verliest voor vele toepassingen geen belangrijke informatie. Dit versimpelen noemen we lemmatiseren.

Deze manier van analyseren verliest echter veel informatie. Die informatie kan belangrijk zijn wanneer je te maken hebt met complexere NLP toepassingen. De voornaamste informatie die verloren gaat is de volgorde van de woorden. Vergelijk bijvoorbeeld de volgende zinnen: “Ik ben niet boos, maar juist blij.” met “Ik ben niet blij maar juist boos”. Je kunt zien dat dezelfde woorden voorkomen. Echter hebben de zinnen een totaal andere betekenis.

De stappen in een succesvol NLP model

De beste NLP technieken gebruiken een serie van stappen die zo veel mogelijk informatie uit een tekst behouden. Als eerst bepaal je welke woorden en symbolen (tokens) je wilt gaan gebruiken. Vervolgens vertaal je deze concepten naar een vorm die een computer kan interpreteren (vectoren). Tot slot kies je een model die goed met deze data kan omgaan en de gewenste uitkomst kan geven.

Berichten worden verwerkt in meerdere stappen. Als eerst wordt de tekst omgezet in tokens. Gevolgd met het omzetten naar vectoren. Daarna gaan deze word tokens het model in zodat daar een oordeel uit kan komen,
Afbeelding 5. De beste NLP modellen behouden zoveel mogelijk informatie die in de tekst aanwezig is. Dat houdt in dat ook informatie omtrent de volgorde van woorden wordt behouden.

Word tokens

Tekst is een serie aan woorden en symbolen die informatie met zich meedraagt. Het is belangrijk dat een Natural Language Processing model het zo makkelijk mogelijk wordt gemaakt om de belangrijke informatie uit een tekst op te kunnen nemen. We letten daarom op de gehele woorden en symbolen, maar niet op de individuele karakters.

Bijvoorbeeld de karakters “d”, “a”, “t”, “a” hebben los geen betekenis. Het model zou dan eerst moeten leren dat deze karakters achter elkaar het concept “data” vormen. Dit is meer moeite dan wanneer we gelijk het woord “data” aan het model geven. Want dan hoeft het model zich alleen op de essentie focussen. Deze concepten worden ook wel tokens genoemd. Dit zijn de concepten die het model moet gaan leren begrijpen.

Het probleem van word tokens voor een model

Het is overdreven om voor elk woord in het woordenboek een unieke token te maken. Daarom worden alleen de meest voorkomende woorden uit de teksten meegenomen. De woorden die niet vaak genoeg voorkomen krijgen meestal een token die aangeeft dat het woord ontbreekt. Deze tokens worden in sommige toepassingen zelfs weggelaten.

Minder voorkomende woorden worden vervangen met een token dat aangeeft dat het woord niet bekent is bij het model.
Afbeelding 6. Woorden worden omgezet in tokens. Wanneer bepaalde woorden te weinig voorkomen om daar betekenis aan te kunnen geven, kunnen ze worden vervangen door een missende waarde.

Er bestaan voorgetrainde modellen die met hun eigen token-systeem komen. Deze modellen zijn zeer breed inzetbaar en hebben maar liefst rond de 30.000 verschillende tokens. Dit aantal is in dezelfde ordegrootte van het aantal woorden dat een gemiddeld persoon gebruikt

Ook dit aantal tokens is niet genoeg om alle gevallen te dekken. Daarom gaan deze token-systemen slimmer om met woorden die minder vaak voorkomen. In deze gevallen worden de woorden opgedeeld in kleine stukjes. Dit maakt het lastiger voor het model en het heeft alleen maar zin wanneer je met een slim model werkt die goed de relatie kan leggen tussen tokens. Bijvoorbeeld “-obs” heeft op zichzelf geen toegevoegde waarde voor de tekst. Echter heeft dit wel waarde in relatie met de andere tokens: “ge”, “-ed”, en “-eerd”.

Complexere modellen delen woorden die ze niet kennen op in kleinere stukjes.
Afbeelding 7. Je kunt voorgetrainde modellen gebruiken voor het maken van tokens. Deze delen woorden slim op in stukjes om op deze manier betekenis te achterhalen.

Tokens zijn zelf niet geschikt voor een model

Om deze tokens aan een model te kunnen geven moeten er waardes toegekend worden. De computer denkt namelijk in 0’etjes en 1’tjes. Tokens komen vaak al met een indexwaarde die gebruikt kan worden. Zo kunnen bijvoorbeeld de woorden “het”, “de” en “ik” respectievelijk de indexwaardes 2, 3 en 4 hebben. 

Dit lijken op het eerste gezicht goede waardes voor een model. Echter zijn deze waardes niet geschikt om direct te gebruiken voor het trainen. Dit is omdat je niet alle woorden op één spectrum wilt plaatsen. Als je dat wel zou doen dan ziet het model het woord “goed” met index 74 als een vergelijkbaar woord met de woorden “daar” met index 73 en “slecht” met index 75. Dit is wat je natuurlijk niet wilt. Want dan behandelt het model het woord “goed” ongeveer hetzelfde als het woord “slecht”. 

Een oplossing is om elk woord bij elke mogelijke positie een waarde te geven. Dit is echter ook geen goede uitkomst voor het model, omdat je data dan super groot wordt vol met 0’etjes. Want stel je hebt een model die 30.000 verschillende tokens kent en je tekst is 400 tokens lang dan heb je te maken met 12.000.000 waardes voor die ene tekst die je model in moeten! Er is dus een efficiëntere methode nodig om woorden in getalletjes uit te drukken.

Een slechte manier van woorden in een model krijgen is door welke unique plek met elke unique woord een unique input te geven.
Afbeelding 8. Tokens moeten op een manier worden uitgedrukt in getalletjes. In deze afbeelding staat een niet effectieve manier om dat te doen.

Word embedding

Woorden lijken op verschillende manieren wel of niet op elkaar. Bijvoorbeeld de woorden “koningin”, “koning”, “vrouw” en “man” hebben allemaal andere overeenkomsten. Waarbij “koningin” en”koning” een verband met elkaar hebben op het gebied van de monarchie, en de woordparen “koningin” met “vrouw” en “koning” met “man” op het gebied van geslacht. En deze vier woorden hebben weer wat met elkaar te maken op het gebied van mens in vergelijking met het woord “hond” en die weer wat met elkaar te maken op het gebied van dier als je het vergelijkt met huis, enzovoorts enzovoorts.

Tokens worden daarom niet met een enkele waarde (scalar) gerepresenteerd maar met meerdere waardes (vector). Bij “word embedding” worden tokens op een slimme manier omgezet in relatief kleine vectoren. Het resultaat is dat token (en dus ook woorden) die qua betekenis meer op elkaar lijken ook een vector krijgen die op elkaar lijken. 

Een goede manier van tokens in een model krijgen is door ze te vervangen met embedding vectoren,
Afbeelding 9. Bij word embedding worden token op een slimme manier omgezet in meerdere waardes. Een zet van waardes worden vaak een vector genoemd.

Maar hoe kom je aan de vectoren die horen bij jouw tokens? Het downloaden van een voorgemaakte embedding behoort tot één van de mogelijkheden. Hierbij is er al bepaald welke woorden op elkaar lijken en is daarbij een set van vectoren gemaakt; een voorbeeld hiervan is Glove. Het is ook mogelijk om de embedding zelf te laten meeleren welke vectoren goed passen bij de woorden tijdens het gehele leerproces. Dit is in programma’s als TensorFlow en PyTorch een standaard functionaliteit.

Wil jij zelf NLP technieken leren begrijpen en toepassen?

“Deze 1-daagse cursus is ideaal om wegwijs te geraken met NLP.”

4.5/5

Vincent Janssen – AI/System Engineer bij Verhaert

Deep Learning Natural Language Processing modellen

Deep Learning heeft de afgelopen jaren veel succes geboekt. Technologieën als Google Translate werken zo goed dankzij de komst van Artificial Neural Networks wat een essentieel onderdeel is van Deep Learning. Op dit moment lijkt er nog geen limiet bereikt te zijn met de huidige Deep Learning technieken als het gaat om hoe goed NLP modellen kunnen presteren. “Hoe groter het model hoe beter het resultaat” is een trend die op dit moment gaande is. 

Recurrent Neural Network (RNN)

Recurrent Neural Networks hebben veel los gemaakt met wat mogelijk is met Deep learning. RNN modellen zoals LSTM en GRU zijn modellen waarbij waardes één voor één worden verwerkt. In Natural Language Processing worden deze modellen toegepast door een zin woord voor woord te verwerken. Nadat elke vector door de RNN verwerkt is eindig je met een samenvatting van de zin. Deze samenvattende vector wordt vervolgens weer verder verwerkt door een standaard neuraal netwerk (Feed Forward network) om tot de uiteindelijke conclusie te komen.

Woord tokens worden een voor een door een recurrent neural network geanalyseerd. Daarna wordt de uitkomst van deze analyse gebruikt om een conclusie te vormen met een feed forward netwerk.
Afbeelding 10. Recurrent verwerken stukjes van de data een voor een. Dit kunnen bijvoorbeeld woorden zijn die een voor een door het model worden verwerkt.

Transformers

De transformer is op dit moment het meest geavanceerde model. Deze Deep Learning architectuur maakt gebruik van attentie lagen waarbij het gaat om verbanden leggen tussen woorden. Grotere modellen zoals het BERT model van Google en GPT-3 van OpenAI hebben maar liefst 13 en 96 lagen van attentie met een Feed Forward reken stap.

Transformers analyseren teksten door verbanden te leggen tussen de woord tokens. Dit doet het door naar de gehele zin in een keer te analyseren. Dit process wordt meerdere keren uitgevoerd in afwisseling met een feed forward netwerk.
Afbeelding 11. Transforms zijn de beste modellen voor Taal analyse op dit moment. De meest geadvenceerde modellen zoals BERT en GPT gebruiken een transformer als kern van het model.

Het proces van een NLP model trainen

Het trainen van een goed NLP model is niet recht toe recht aan; het is namelijk een hele opgave om taal goed te begrijpen. Als je een ongetraind model direct inzet op het leren van een specifiek probleem, zal het resultaat teleurstellend zijn. Dit komt omdat het model de taal nog niet begrijpt en zal grijpen naar simpele patronen waar zo goed als geen taal kennis voor nodig is. 

Het is daarom extra belangrijk om voort te bouwen op een model dat de taal eigen heeft gemaakt. Dit principe heet transfer learning en zal naast een beter resultaat ook een stuk sneller trainen. Deze modellen zijn weken lang getraind op een super computer waarbij ze vraagstukken moeten oplossen zoals missende woorden invullen in een tekst.

Hiervoor is veel train data nodig. Het liefst train je een model waarbij de labels bekend zijn. Deze manier van leren heet supervised learning. Echter moet je daarvoor veel gelabelde data hebben wat duur is om te maken. Daarentegen heeft unsupervised learning geen labels nodig om te trainen; waardoor het veel goedkoper is. Het nadeel van unsupervised learning is weer dat het niet altijd leert wat jij wilt dat het leert. 

Gelukkig is voor dit probleem een tussenoplossing: self-supervised learning. Hierbij worden bestaande teksten van het internet afgehaald en woorden achteraf weggehaald en opgeslagen als labels. Zo kan je heel goedkoop een gelabelde dataset maken.

Software voor NLP

Natural Language Processing met Python

Python is de programmeertaal die je moet gebruiken als je de laatste en meest geavanceerde NLP modellen wilt toepassen. Python heeft een rijke geschiedenis op het gebied van data science. Python is de afgelopen jaren in populariteit gestegen. Er is meer vraag naar data wetenschappers die Python beheren dan data wetenschappers die R beheren

Natuurlijk is niet iedereen direct klaar om Natural Language Processing met Python te leren. Het is en blijft een programmeertaal waarvoor de nodige ervaring vereist is. Gelukkig is Python een relatief eenvoudige programmeertaal om te leren. Afhankelijk van hoe snel je nieuwe dingen oppikt kan je al binnen een half jaar prima met NLP gaan werken in Python. Hiervoor is aan te raden om eerst de basis van Python te leren, gevolgd met data science in Python of Machine Learning in Python en daarna een begin te maken in Deep Learning.

Natural Language Processing met TensorFlow en PyTorch

Er zijn twee Deep Learning frameworks die op dit moment worden gebruikt voor Natural Language Processing: TensorFlow (ontwikkeld door Google) en PyTorch (ontwikkeld door Facebook). Beide Frameworks zijn een goede keuze. Waarbij TensorFlow komt van de filosofie dat code optimaal moet kunnen werken in productie en PyTorch dat de code intuïtief moet zijn. Beide frameworks zijn nu vrij vergelijkbaar qua gebruik. Bij School of Data Science gebruiken we zelf TensorFlow als standaard framework.

Hoe kan School of Data Science jou helpen met Natural Language processing?

We hebben geleerd dat Natural Language Processing vele toepassingen heeft. Daarna hebben we gezien dat er vele stappen komen kijken wanneer we NLP toepassen. Er zijn nog vele onaangetaste toepassingen van NLP waar jij misschien wel mee te maken hebt. 

Natural Language Processing zal alleen maar beter en belangrijker worden. Het is daarom zeer waardevol om jezelf te verdiepen in de wereld van NLP. Wij van School of Data Science helpen graag mee denken met jouw ontwikkeling op het gebied van NLP. Dit kan zijn door jou NLP te leren met een van onze cursussen of door jouw te helpen bij het toepassen van NLP op jouw uitdagingen. Neem contact met ons op of bekijk onze pagina voor NLP consultancy.

Wil jij zelf NLP technieken leren begrijpen en toepassen?

“Deze 1-daagse cursus is ideaal om wegwijs te geraken met NLP.”

4.5/5

Vincent Janssen – AI/System Engineer bij Verhaert

Scroll to Top