Wat is Natural Language Processing?
In deze blog schrijft onze nieuwe collega Gaetana Ruggiero over Natural Language Processing: Wat is het en wat kan je ermee?
Wat is Natural Language Processing?
In deze start van een blogreeks schrijft onze nieuwe collega Gaetana Ruggiero over Natural Language Processing: Wat is het en wat kan je ermee?
Mijn standaard voice-command
Hey Siri, kan je Björn bellen?
“Hey Siri, kan je Björn bellen?”
Dit is mijn standaard voice-command wanneer ik vastloop en tegen een programmeer probleem aanloop.
Herken je dat een e-mail per ongeluk in je SPAM terecht komt? Dat komt door Natural Language Processing (ik kort het hierna af met “NLP”). En hoe komt Google zo snel met een antwoord op je vraag? Ook dat is NLP… En zo kan ik nog wel even doorgaan!
Natural Language Processing is overal
We zijn zo gewend aan het gebruik van onze telefoon en laptop dat we NLP inmiddels gebruiken zonder het te beseffen. Elke keer dat we Siri iets vragen, activeren we een NLP proces dat Speech Recognition heet. Onze telefoon kan audio-data vertalen naar tekst. De tekst vervolgens kan worden verwerkt en gebruikt om een antwoord te zoeken.
Op een soortgelijke manier is een e-mail die in een spamfolder terechtkomt het resultaat van een NLP-classificatietaak die Spam Detection wordt genoemd. Met behulp van algoritmes schat een programma in of een e-mail wel of geen spam is. En tot slot: ook het feit dat Google de relevante resultaten voor onze zoekopdrachten ons toont, is te danken aan de kracht van NLP.
Speech recognition, spam detection en het interpreteren van zoekopdrachten zijn slechts drie voorbeelden van NLP. NLP omvat nog veel meer gebieden. En deze komen stuk voor stuk terug in deze reeks.
Deze eerste blogpost in de reeks is bedoeld als een inleiding tot NLP, aangevuld met voorbeelden van hoe we NLP bij JoinSeven gebruiken om inzicht te krijgen in tekstuele, politieke en beleidsdata in ons Dataplatform Heptagon en onze producten Elyn, Mila en Codi.
“We gebruiken Natural Language Processing dagelijks zonder het ons te beseffen”
NLP start bij het begrijpen en interpreteren van menselijke taal
Een natural language is een menselijke taal, zoals het Nederlands of het Engels. Het woord natural wordt gebruikt in tegenstelling met de term artificial, die verwijst naar talen die kunstmatig door mensen zijn gecreëerd en meestal niet evalueren over tijd, zoals Esperanto (een kunstmatige taal gecreëerd door Lejzer Zamenhof in 1887).
Met Programming bedoelen we het vermogen van mensen om met een computer te communiceren door hem te vertellen wat hij moet doen, d.w.z. door computerprogramma’s te schrijven. Natural Language Programming is dus de studie van natuurlijke taal vanuit een computationeel standpunt, waarvoor interactie tussen mens en machine nodig is.
We zijn gewend aan woorden op een toetsenbord te typen. Maar hoe zorgen we ervoor dat een machine echt begrijpt wat we willen zeggen? We hebben een manier nodig om met de computer te communiceren in een taal die hij kan begrijpen. Zulke talen worden programmeertalen genoemd. Python is tegenwoordig de meest gebruikte programmeertaal voor NLP, maar niet de enige.
Van tekst naar getallen
Om een machine tekst te laten begrijpen, moeten woorden worden omgezet in een lijst van getallen. Het eerste wat we moeten doen is de tools die we nodig hebben ‘importeren’ in een Python notebook. In dit geval gaan we CountVectorizer gebruiken om woorden om te zetten in getallen. CountVectorizer is een tool dat zet een zin om in een vector van getallen, gebaseerd op de frequentie van de termen die erin voorkomen.
Neem bijvoorbeeld de volgende zin:
We kunnen deze zin omzetten in een reeks getallen, gebaseerd op het aantal keer dat elk woord in de zin voorkomt. We maken een vectorizer object, en geven de zin door als input. De vectorizer splitst de zin op in individuele woorden, en telt het aantal keren dat de woorden in de zin voorkomen.
Het woord “ik” komt twee keer voor, terwijl de rest van de woorden één keer voorkomen. De zin zou worden voorgesteld door de vector [[1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1]]. Er zijn veel verschillende methoden om woorden en tekens als numerieke gegevens weer te geven, maar ze dienen allemaal hetzelfde doel: Woorden omzetten in een geschikte invoer voor een computerprogramma.
En wat kun je dan doen met deze numerieke representatie van een zin?
Als je de term NLP ooit bent tegengekomen, is het je misschien ook opgevallen dat het vaak samen wordt genoemd met de termen Machine Learning en Deep Learning. Machine Learning en Deep Learning zijn takken van Kunstmatige Intelligentie die gebaseerd zijn op het idee dat systemen van data kunnen leren, patronen kunnen identificeren en zelfs voorspellingen kunnen doen over nieuwe data.
Een systeem (of een computerprogramma) in Machine Learning en Deep Learning wordt vaak een “model” genoemd. Je kunt je een model voorstellen als een doos waarin veel data kan worden geanalyseerd dankzij wiskundige bewerkingen.
De doos krijgt een input, in ons geval een tekst omgezet in numerieke data, en produceert op basis van wiskundige berekeningen een output.
Als ik bijvoorbeeld wil voorspellen of het morgen gaat regenen in Amsterdam, kan ik mijn “weermodel” voeden met gegevens over het weer in Nederland van de afgelopen jaren. Dit proces heet training.
De gegevens waarop ik het model train, bevatten informatie over de temperatuur op een bepaald moment van de dag, of het een regenachtige dag was of niet, de hoeveelheid regen, de UV-index, de windsterkte, locatiespecificaties, enzovoort. Elk van deze parameters wordt een feature genoemd. Ik kan mijn model vragen te voorspellen of het morgen gaat regenen door een paar features te geven om naar te kijken, zoals de temperatuur en de windsterkte van vandaag. Door te kijken naar data uit het verleden kan het model een voorspelling doen over het weer van morgen, in de vorm van een “ja/nee antwoord” of in de vorm van een waarschijnlijkheid.
Bij Machine Learning kan het aantal features dat we het model vragen te bekijken variëren, en kan het worden aangepast voor verschillende experimenten (feature engineering). Bij Deep Learning daarentegen worden de modellen meestal beschreven als “zwarte dozen”. Niemand weet precies wat erin gebeurt, maar omdat ze meestal op veel meer data zijn getraind, kunnen ze in de meeste gevallen betere antwoorden geven op onze vragen.
Hoewel het volledig geautomatiseerde processen lijken te zijn, is het bouwen van een model en het interpreteren van de resultaten ver van automatisch. In NLP, Machine Learning en Deep Learning speelt menselijke expertise nog steeds een grote rol, vooral omdat we vaak verschillende experimenten moeten uitvoeren om te begrijpen wat het model ons vertelt.
Het zijn alle drie geweldige hulpmiddelen om inzichten te krijgen in grote hoeveelheden data, die moeilijk te verkrijgen zouden zijn als we ze handmatig zouden analyseren.
En wat doen we met NLP, Machine Learning en Deep Learning bij JoinSeven?
Bij JoinSeven geloven we in de waarde van openbare (tekstuele) data. We hebben het onze missie gemaakt om deze data toegankelijker te maken voor organisaties in de publieke en private sector.
In ons platform Heptagon hebben we data verzameld van officiële overheidsbronnen, zoals de Tweede Kamer, Officiële Bekendmakingen en bibliotheken met Gemeenteraadsdocumenten. Door Natural Language Processing, kunnen we in ons dataplatform en onze producten (bijv. Codi):
- Zoekopdrachten optimaliseren (Codi leert begrijpen waar je naar zoekt en vindt patronen en verbanden in teksten op basis van jouw zoekactie)
- Teksten met elkaar vergelijken, bijvoorbeeld om snel antwoorden op eerder gestelde Kamervragen te ontdekken of dubbel gepubliceerde documenten te identificeren
- Overheidsdocumenten classificeren en categoriseren, bijvoorbeeld op basis van de inhoud, beleidsterrein of publicerende organisatie
- Documenten zonder expliciete verwijzing toch aan elkaar relateren door patronen in deze teksten te onderzoeken (bijvoorbeeld onderwerpen, clusters, organisaties of personen)
- Automatisch samenvattingen creëren van lange documenten, zodat lezers niet het gehele document hoeven lezen om te begrijpen waar het in de kern over gaat en wat de conclusies zijn
- Entiteiten (organisaties, locaties, personen, etc.) uit teksten halen en onderlinge relaties tussen deze entiteiten in kaart brengen
- Automatisch dossiers aan relevante informatie klaarzetten voor ambtenaren bij het beantwoorden van Kamervragen, moties, rapporten en andere parlementaire processen (bijvoorbeeld eerdere antwoorden, kennis uit rapporten).
Over al deze use-cases zal ik de komende periode schrijven. Daarbij ga ik in op het vraagstuk, onze aanpak en de resultaten uit onze experimenten. Is er een use-case waar je wil dat ik prioriteit geef? Laat het me weten!