Het zijn twee korte verhalen die een hele andere kijk geven op hoe technologie de toekomst kan veranderen. De eerste is er op gericht om mensen van een nieuwe techniek te helpen en om nieuwe ideeën te ontwikkelen. De tweede, die wordt gekenmerkt door meer inzicht in wat de toekomstige mogelijkheden zullen zijn en ook wat de nadelen en valkuilen zijn.
Duidelijk? De bovenstaande paragraaf werd geschreven door een GPT-2 taalmodel dat in het Nederlands werd getraind door de Gentse startup ML6. Volgens hun taalmodel is dit een plausibele aanvulling op de titel van dit stuk. Wat de stijl, woordkeuze en coherentie tussen opeenvolgende zinnen betreft, is dit zeker niet slecht. Maar is het inhoudelijk wel consistent en betekenisvol? Voor de aandachtige lezer voelt het toch nog aan als holle woordenbrij. Een echt correcte tekst zou bovendien verwijzen naar de twee korte verhalen als Het eerste en Het tweede. De paragraaf geeft wel een idee waar Natural Language Generation (NLG) in het Nederlands vandaag staat.
Meer hierover in het webinar van Smals (public sector only) op 28 oktober van 10.00 tot 11.00 uur.
lees ook
NLP en Nederlands: waarom wereldtalen nog steeds een streepje voor hebben
De geschiedenis van tekstgeneratoren gaat een heel eind terug. De Turing Test (1950) vereist al dat een computer een realistisch antwoord op een vraag kan samenstellen. Ondanks hun eenvoud konden de eerste chatbots opvallend goed een conversatie simuleren. Recenter zagen verschillende generatoren voor langere teksten het licht, gaande van academische papers tot new-age bullshit. Op basis van de laatste evoluties in deep learning voor Natural Language Processing, is het aansturen van je eigen adventure game slechts een van de vele creatieve toepassingen. Ook automatische vertaling is een vorm van NLG – de machine genereert een equivalent van de oorspronkelijke tekst, maar dan in een andere taal. Als code wordt beschouwd als tekst, dan valt het generatieve luik van Low Code Application Platforms er ook onder.
Verschillende systemen, andere resultaten
Dit artikel gaat in op twee categorieën van NLG systemen die fundamenteel verschillen van elkaar en op een heel andere manier tot resultaten komen. De eerste categorie is gebaseerd op templates en grammaticale regels, en produceert een strikt deterministische output. De tweede categorie is gebaseerd op machine learning met een portie willekeur. De output hiervan lijkt eerder op een vorm van “creatief schrijven”. De scope van dit artikel beperkt zich tot het genereren van tekst, waarbij de richting die de tekst moet uitgaan op voorhand al bepaald is. Het begrijpen van vragen of het opzoeken van informatie, zoals bij chatbots en question answering systemen, kan hier aan voorafgaan, maar zijn afzonderlijke concepten die buiten de scope van dit artikel vallen.
Grammaticale template engines
Teksten worden traditioneel aan de hand van templates gegenereerd. Een template is zoals een formulier: een deel is vooraf geschreven en ligt vast, de rest is nog aan te vullen met eigen gegevens of inhoud. Die inhoud kan je zelf schrijven of uit een database halen. Maar zo’n rechtstreekse copy-paste uit een database heeft beperkingen: hetgeen je invoegt moet ook grammaticaal passen in de omliggende vaste tekst. Dat wordt moeilijker als we in detail willen gaan of willen variëren.
Retailers of grote online handelaars bieden soms duizenden producten aan op hun website, elke dag verschijnen en verdwijnen er dingen uit het assortiment. Voor elk product moet een wervend tekstje op de website komen zodra het aan de database wordt toegevoegd. Om niet telkens dezelfde tekst te doen verschijnen, wil je “met onze blauwe suède schoenen” al eens afwisselen met “Deze schoen is blauw en gemaakt van suède,” en hetzelfde moet ook werken voor “rode lederen laarzen” of “grote Amerikaanse koelkasten“.
lees ook
Natural Language Generation – by Smals Research
Het doel van zulke data-to-text NLG is om op basis van een database met mogelijk gevarieerde inhoud toch correcte teksten te genereren. Daarvoor moeten voornaamwoorden, meervouden, verbuigingen en vervoegingen flexibel aangepast kunnen worden naargelang het beschreven object en haar eigenschappen. In het Frans moet de verbuiging van het bijvoeglijk naamwoord correct zijn, in het Duits de naamvallen, in het Nederlands de lidwoorden. Idealiter gaat de NLG ook elegant om met ontbrekende gegevens, kan deze de zinsvolgorde al eens veranderen, en wordt onnodige herhaling vermeden.
NLG template engines maken gebruik van een woordenboek en een grammaticale rule engine om dat allemaal correct te kunnen genereren. Verschillende bedrijven zijn actief in deze markt. Vaak voorzien zij grafische interfaces en integraties die het gebruiksgemak heel wat kunnen bevorderen. Er zijn ook open-source oplossingen waaronder SimpleNLG, RiTa en RosaeNLG. Een NLG template in die laatste ziet eruit als volgt:
Dit genereert: “Une enquête a été ouverte concernant ses réclamations contestées“. De geparametriseerde woorden in dit voorbeeld, zoals ‘enquête‘, ‘ouvert‘, ‘réclamation‘, ‘contesté‘, kunnen vlot vervangen worden door andere woorden (van dezelfde woordsoort). De template zal dan een even correcte zin produceren. Parameters zoals de werkwoordstijd en het type voornaamwoord zijn eveneens gemakkelijk aanpasbaar.
Het gebruik van NLG op basis van grammaticale template engines heeft een aantal voordelen:
- De hoge parametriseerbaarheid maakt dat je met één goed ontwikkelde NLG template-teksten kan genereren over relatief heterogene collecties van gegevens.
- Je hebt volledige controle over de output. Alle output is gegarandeerd conform de template.
- Slim gebruik van synoniemen, alternatieve beschrijvingen, wisselende zinsvolgorde, gelinkte voornaamwoorden etc. kunnen veel variatie van de output opleveren.
Het belangrijkste nadeel is dat zulke grammaticale templates snel erg complex worden. Als ook variatie en synoniemen ingebouwd moeten worden, is zo’n template al snel veel langer dan de tekst die deze genereert. NLG templates ontwikkelen die goed geparametriseerd en breed inzetbaar zijn, is tijdrovend, secuur werk en vereist bovendien een uitstekende kennis van grammatica. Als een klassieke substitutie-oplossing, waarin je slechts hoeft te copy-pasten, al tot een voldoende kwalitatief resultaat leidt, dan bieden NLG template engines weinig meerwaarde.
Creatief schrijven met neurale netwerken
Een volledig andere manier om teksten te genereren werd mogelijk dankzij machine learning en met name deep learning. Op basis van enorme hoeveelheden bestaande tekst (denk ter grootte van een paar keer de volledige Wikipedia) kan een taalmodel getraind worden dat “weet” welke woorden in welke context het meest geschikt zijn. Zulke taalmodellen voorspellen het meest plausibele volgende, of ontbrekende, woord. Doe dat vele keren na elkaar en je genereert uiteindelijk een tekst.
Kleine taalmodellen zitten al een tijdje in onze smartphone, waar toetsenbord-apps suggesties geven voor het volgende woord in een tekstbericht. De taalmodellen van vandaag zijn vele malen groter en kunnen veel beter rekening houden met context, zeker sinds de opkomst van de zogenaamde transformer architectuur. Die zit achter verschillende taalmodellen die de laatste jaren furore hebben gemaakt, zoals BERT, T5 en GPT.
GPT-3 is dusdanig groot dat eenzelfde model inzetbaar is voor verschillende taken. De geselecteerde derde partijen die van OpenAI aan de slag mochten met het model maakten al indrukwekkende applicaties. Het kost heel wat geld, hardware en tijd om zelf zulke taalmodellen te trainen.
Wie niet zulke financiële resources heeft, moet vertrekken van een bestaand model dat ter beschikking wordt gesteld door de grote spelers, en dat trachten te verfijnen. Daarmee ben je wel afhankelijk van de dataset die gebruikt werd om het originele model te trainen. Met die trainingsdata, die niet altijd openlijk beschikbaar zijn, zijn verschillende problemen. Ze zijn deels gescraped van allerlei internetfora, waardoor er persoonlijke gegevens in terechtkomen die kunnen uitlekken. Het overgenomen discours van minder appetijtelijke fora leidt dan weer tot sterke bias in de gegenereerde teksten.
Mede daarom wordt de toegang tot GPT-3 angstvallig bewaakt door OpenAI. Voorganger GPT-2 is wel vrij beschikbaar en de oefening om dat ook eens te trainen in het Nederlands werd al gedaan door, onder andere, de Universiteit van Groningen [code] en de Gentse AI-startup ML6 [code en demo]. Ze trainen allebei op verschillende manieren. Bovendien gebruiken ze verschillende datasets: het Groningse GroNLP model is getraind op voornamelijk Wikipedia, e-books en nieuwswebsites, terwijl ML6 zich baseert op OSCAR, een subset van de CommonCrawl webscraping dataset.
Beide hebben hun voor- en nadelen: tekst gegenereerd door het GroNLP model gaat al snel lijken op een stationsromannetje, terwijl de OSCAR dataset heel wat bankrekeningnummers, bestaande adresgegevens en zelfs erotiek bevat.
GPT taalmodellen werken als volgt: men geeft een aanzet (een prompt) en laat dan het model vrij aanvullen. Dat aanvullen kan je verder vrij weinig sturing geven; je draait bij wijze van spreken de woordenkraan open. Eventueel kan je een gebruiker laten kiezen uit verschillende mogelijkheden, of de output alsnog filteren (als je bepaald taalgebruik wil weren), maar dat moet je zelf toevoegen.
Een fictieve biografie van ondergetekende uit een parallel universum, gegenereerd door GroNLP, klinkt als volgt (tekst in vet gegeven als aanzet):
Joachim Ganseman is informaticus en heeft gestudeerd aan de Universiteit van Antwerpen. Levensloop. Hij begon zijn opleiding in het Koninklijk Belgisch Staatsinstituut voor Landbouw (KOCO) te Brussel, waar hij ook een landbouwdiploma kreeg. Hij werkte daar onder andere als assistent-accountant bij Yves Van den Bucket uit 1988 tot 1997. In 1996 was hij adjunct-adjunct-directrice met wie hij contact zocht tussen verschillende Europese landen over hun beleid inzake voedselveiligheid.
Dezelfde aanzet bij ML6 genereert de volgende biografie:
Joachim Ganseman is informaticus en heeft gestudeerd aan de Universiteit van Antwerpen. Als onderzoeker werkte hij veel in het bedrijf van de jonge kunstenaar en producent van het meest uiteenlopende werk: de tuin, het terras, de terras- en het terrasrestaurant. Tijdens zijn werkzaamheden werd hij de expert en de eerste specialist in het werk van Ganseman. Hij specialiseerde zich in de tuinontwerp. Zijn onderzoek naar tuinontwerp is gebaseerd op de vele verschillende tuinontwerpen en is te vinden op diverse sites zoals: websites, mobiele applicaties, apps en sites van partijen.
De repetitiviteit blijft moeilijk te controleren. De output moet bij hetzelfde thema blijven maar dat verhoogt het risico op herhaling, terwijl veel vrijheid dan weer riskeert dat de tekst plots een heel andere richting uitgaat. Deze Nederlandstalige GPT-2 modellen zijn ook nog relatief klein. De context van de aanzet is vaak na een drietal zinnen al vergeten, wat soms rare sprongen in de thematiek oplevert.
Op basis van de gegeven aanzet, zal het model aannames doen over de stijl, taalgebruik en inhoud van wat moet volgen. Zo genereert eenzelfde model zowel deze serieus klinkende, maar inhoudelijk absurde quasi-wettekst, als het daaropvolgende oneetbare quasi-recept:
- Artikel 478, eerste lid, Gerechtelijk wetboek bepaalt dat degene die bij of krachtens deze wet wordt vervolgd wegens een strafbaar feit in de eerste aanleg bij de aanvang van de terechtzitting is verschenen, onverwijld zal worden vervangen door een gewezen rechter-commissaris.
- 2 eieren , 500g boter , 500g suiker , 100g bloem , 1 stokje vanille. Recept: Voeg de kaneel, kaneel en vanille toe aan de mix, voeg nog een beetje vanille, voeg 1 theelepel vanille toe. Meng met een lepel de suiker en klop door tot hij zacht genoeg is om dit een eierdooistokje te maken. Voeg vervolgens de melk, kaneel en vanille toe en voeg dit nog een beetje bij het product. Klop alles goed door elkaar en bestrooi de mix erover.
Via een goed doordachte prompt kan het model dus heel verschillende output produceren. Voor echt gespecialiseerde taken zoals het genereren van een machinevertaling of programmeercode, zal het finetunen van het model op een speciaal daarvoor gemaakte dataset misschien wel nog robuustere resultaten geven, zoals bij deze omzetting van Engelse tekst naar SQL queries.
Conclusie
Het gebruik van NLG template engines is aangewezen als er een duidelijke meerwaarde is ten opzichte van de klassieke substitutie-templates (copy-paste), en als de gegenereerde teksten bedoeld zijn voor de buitenwereld. Toepassingen zijn onder andere:
- Het maken van regelmatige tekstuele rapporten of notificaties over constant binnenstromende gegevens, zoals weerberichten, de financiële markten, sportuitslagen, maar ook statusrapporten van IT-systemen, sensorgegevens van IoT devices, etc.
- Het aanmaken van sterk gepersonaliseerde teksten, over bijvoorbeeld de inhoud van een winkelmandje, of van een persoonlijk dossier, dat per gebruiker erg kan verschillen.
- Het maken van gevarieerde teksten voor omvangrijke productdatabases bij grote retailers, deelplatformen etc.
Het gebruik van deep learning taalmodellen voor het genereren van tekst is veel riskanter. Zeker als de training van die modellen niet volledig onder eigen controle is gebeurd, is een manuele validatie en correctie van de output altijd aangewezen. Je accepteert immers ook niet blind de suggesties van je smartphonetoetsenbord. Deze aanpak heeft dus vooral intern zijn nut, binnen de organisatie, op plaatsen waar creatief schrijven vandaag veel tijd opeist. We denken onder andere aan:
- Assistentie bij het schrijven of als tool tegen writer’s block, door het suggereren van plausibele aanvullingen.
- Het aanmaken van realistisch ogend maar toch fictief opleidingsmateriaal. Dit is nuttig wanneer het niet wenselijk zou zijn dat personen in opleiding echte dossiers inkijken, bijvoorbeeld omwille van privacyredenen.
- Het maken van examenvragen.
- Het maken van (tekstuele) synthetische datasets – mits kwaliteitscontrole, filtering en validatie van de output.
- In UX analyse, voor het verzinnen van willekeurige persona’s, fictieve biografieën en gebruiksscenario’s.
De kwaliteit van de vandaag beschikbare Nederlandstalige generatieve modellen loopt nog achter op die van het Engels – wat ook De Standaard opmerkte toen zij testen uitvoerden. Om dat ten gronde te verbeteren zullen Nederlandstalige trainingsdatasets zorgvuldiger moeten worden samengesteld. Voor specifieke toepassingen zoals codegeneratie, verwachten we dat gespecialiseerde modellen relatief snel hun weg kunnen vinden in de bestaande professionele IDEs.
Microsoft heeft recent aangekondigd een deel van de functionaliteit van GPT-3 in te bouwen in hun Power Apps low-code platform, en Github lanceerde met CoPilot een “AI Pair Programmer” als plug-in voor de Visual Studio Code editor. Ongetwijfeld zullen anderen volgen, en zo vinden we suggesties van krachtigere tekstgeneratoren misschien binnenkort al terug als plug-in in de gangbare developer tools.
______________________
Dit is een ingezonden bijdrage van Joachim Ganseman, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals. Smals geeft binnenkort een webinar over bovenstaand onderwerp.