Facetten van Natural Language Processing – deel 1

Posted on: 15/10/2018 by: Joachim Ganseman

Bij Natural Language Processing (NLP) denken veel mensen spontaan aan spraakherkenning. Het blijft een van de meest tot de verbeelding sprekende toepassingen, en de technologie is ondertussen robuust genoeg dat ze steeds vaker ingang vindt in alledaagse toepassingen. Apple’s Siri, Google Home of Amazon Alexa zijn bekende voorbeelden.

Taal is echter meer dan spraak alleen. Ook geschreven tekst valt onder de noemer “Natural Language”: krantenartikels, boeken en tijdschriften, blogs en Wikipedia-pagina’s, … Er worden bergen onderzoek verzet naar het extraheren van nuttige informatie uit al deze bronnen, of het automatisch proberen begrijpen van de inhoud ervan. Voortgestuwd door de recente vooruitgang in artificiële intelligentie, zien we ook veel beweging in deze tekstuele subdomeinen van NLP. In deze eerste blogpost over NLP houden we de vinger aan de pols van enkele belangrijke facetten ervan: parsing en automatische vertaling.

Parsing

Parsing is zinsontleding voor computers. Daarbij wordt geprobeerd aan ieder woord of zinsdeel een label toe te kennen (is het een bijwoord, naamwoord, werkwoord, bijzin, …), en zo mogelijk ook de grammaticale structuur af te leiden.

In de meest eenvoudige vorm worden woorden individueel gelabeld ("Part of Speech tagging"). Op relatief “schone” tekst, zoals uit kranten, worden ondertussen accuraatheden van bijna 98% gehaald op de belangrijkste Engelstalige en bijna 97% op de belangrijkste meertalige datasets. Op een hoger niveau kan men ook zinsdelen proberen herkennen - wat men “shallow parsing” of “chunking” noemt.

Aan de basis van automatisch vertalen (Google/Bing Translate, …) liggen meestal constituency grammars, waarmee gemakkelijker overkoepelende grammaticale structuren voorgesteld worden. Met traditionele methodes zijn er echter nog talloze kleine regeltjes nodig om correct met woordvolgorde of de nodige tussenvoegsels om te gaan. Door de boomstructuur voor te stellen als een rij van karakters en er zogenaamde sequence-to-sequence methodes op los te laten, bleek men ook die speciale regeltjes automatisch te kunnen aanleren. Met zulke deep learning methodes wordt nog regelmatig vooruitgang geboekt op het vlak van parsing.

Correct parsen is een voorwaarde om daaropvolgende analyses, zoals een vertaling of een automatische annotatie, ook correct te kunnen uitvoeren. Er komen echter nogal wat moeilijkheden kijken bij natuurlijke taal, waaronder:

  • Verschillende verbuigingen of vervoegingen van hetzelfde woord moeten herkend worden als variaties van datzelfde woord (door stemming of lemmatization).
  • Vaste uitdrukkingen en idiomen worden misschien best niet letterlijk geïnterpreteerd.
  • Interpunctie maakt een wereld van verschil.

Dat alles is bovendien verschillend voor iedere taal. Alleen al aan die problemen zijn hele subdomeinen van NLP gewijd. Bovendien kan natuurlijke taal ook erg ambigu of dubbelzinnig zijn. Zonder nu dieper in te gaan op al deze moeilijkheden (dat doe ik misschien in een volgend artikel), enkele voorbeeldjes van dat laatste:

  • Op grammaticaal vlak is de functie van een woord niet altijd eenduidig. Voorbeeld uit de laatste link: “De man slaat de hond met de stok” – wie heeft hier de stok vast? Ook in “De jongen die Marc geslagen heeft” is niet duidelijk wat nu het onderwerp of het lijdend voorwerp is.
  • Op semantisch vlak kan een woord meerdere betekenissen hebben. In dat geval is er meestal context nodig om te weten over welke betekenis het gaat. Is die context er niet of onvoldoende, dan slaan ook de beste automatische vertaalmachines de bal mis.

Automatisch (v|h)ertalen

Het gebruik van deep learning in vertaling wordt vaak Neural Machine Translation genoemd. Omdat daarmee correctere woordkeuzes en woordvolgordes bekomen worden, en omdat zo enigszins (maar zeker niet perfect) ook met context rekening wordt gehouden, is Google eind 2016 begonnen met de uitrol ervan in Translate, en ook de meeste andere online vertaaldiensten zijn ondertussen hierop gebaseerd.

Het evalueren van automatisch vertalen blijft echter moeilijk. De meest gebruikte metriek voor automatisch vertalen, BLEU, probeert te meten hoe een professional de vertaling zou beoordelen. Er is echter van bekend dat de manier van meten toch enkele tendensen vertoont (bvb het bevoordelen van kortere vertalingen).  Qua datasets om zulke systemen te trainen en testen zijn er o.a. erg veel meertalige gegevens van het Europees Parlement, die echter logischerwijs enkel westerse talen bevatten. Er is dus nog zeker werk aan de winkel wat betreft inclusie van niet-westerse en zeldzamere talen. Ondertussen leiden die lacunes soms tot bevreemdende effecten in online vertaaltools.

Vertaling hoeft niet alleen van een gesproken taal naar een andere gesproken taal te gaan. We kunnen even goed "hertalen": de vraag in natuurlijke taal omzetten naar een query die op een database uitgevoerd kan worden, of naar een andere formele structuur zoals computercode. Deze vorm van NLP, Semantic Parsing, wordt o.a. gebruikt door Google Assistant of Amazon Alexa om vragen in natuurlijke taal te beantwoorden (genre “Wie is de president van de VS?”). Om dat op grote schaal te trainen en testen bestaan verschillende datasets die beschrijvingen van een query in natuurlijke taal linken aan de query zelf. (WikiSQL, ATIS vliegverkeer, etc). Voor specifieke toepassingen of niet-courante talen heb je vaak geen andere keuze dan het zelf opbouwen van een eigen database, die sowieso erg groot moet zijn. Crowdsourcing kan voor dat laatste eventueel een oplossing bieden.

Van daar is de stap snel gezet naar het beantwoorden van (algemene) vragen. Hiermee gooide IBM hoge ogen toen hun Watson systeem het spel Jeopardy won. Het probleem lijkt een beetje op een “examen begrijpend lezen”: gegeven een document of stukje tekst, wordt een bepaalde vraag gesteld waarvan het antwoord teruggevonden moet worden (al dan niet letterlijk) in de tekst. Daarvoor wordt de computer voorzien van de inhoud van, bijvoorbeeld, Wikipedia. Op basis van een training met vragen en de correcte antwoorden daarop, tracht men de computer zelf te doen afleiden hoe het het antwoord van een vraag moet opzoeken in de beschikbare dataset. Ook voor de training hiervan bestaan grote datasets, met bvb vragen over nieuwsartikels, crowdsourced op basis van Wikipedia, of van eindexamens Engels in China.

De data definieert het systeem

Eens we op dit niveau van NLP aankomen, zijn we erg afhankelijk van de datasets waarop het systeem wordt getraind. Kunnen we een systeem dat is getraind op tekst uit Wikipedia, inzetten om documenten met een heel andere inhoud te verwerken – van straattaal tot juridisch jargon (i.e. domein-adaptatie)? Deze uitdaging van de generaliseerbaarheid van systemen die getraind zijn op gelimiteerde of biased datasets, vinden we terug in zo goed als elke AI-applicatie. We willen vermijden dat een AI-systeem bepaalde biases ("vooroordelen") aanleert of bestendigt. Daar zijn veel voorbeelden van bekend, en dat dat voor problemen zorgt, lichtte ik al toe in een vorige blogpost. Ook recent nog verschenen berichten over een CV-screening systeem dat de mist in ging op dat vlak. Dit blijft dus om permanente waakzaamheid vragen.