Lijntekening van een hoofd met elektronisch circuit als hersenen

Hoe deel je raadsinformatie in op thema met behulp van machine-learning?

Geschreven door Axel Hirschel (student Data Science aan de UvA) loopt stage bij Open State Foundation tot en met juni 2018.

Steeds meer gemeenten, inmiddels meer dan 100, stellen hun raadsinformatie beschikbaar als open data. Dat is goed nieuws, want nu kunnen raadsleden, journalisten en andere belanghebbenden makkelijker notulen, raadsvoorstellen, moties en meer vinden en gebruiken. Toch valt er nog veel te winnen, want het is vaak lastig om relevante informatie te vinden. Veel raadsinformatie is niet gestructureerd en griffies geven vaak geen thema’s of dossiers mee. Hoe kan iemand dan alle moties vinden die over het sociaal domein gaan?

Het is niet eenvoudig om met 380 gemeenten en een tiental leveranciers afspraken te maken over het beter labelen en structureren van raadsinformatie. Het is daarom interessant om te verkennen in hoeverre het mogelijk is om ongestructureerde raadsinformatie met technieken als machine-learning van meer structuur te voorzien. Gelukkig wordt er al veel onderzoek gedaan, en er is recentelijk ook €500.000 aan onderzoeksgeld beschikbaar gesteld aan de UvA door de NWO1.

Een van de manieren om te structuur aan te brengen is om documenten automatisch te labelen met een label. Mijn onderzoek gaat hierover en moet het mogelijk maken om alleen documenten over bijvoorbeeld onderwijs of zorg te vinden. Dat scheelt een hoop tijd en moeite als je op zoek bent naar documenten met een bepaald label.

Zonder goede voorbeelden leren

De algoritmes werken het best als ik veel voorbeelden van gemeentedocumenten zou hebben met daarbij een label waarover het document gaat. De algoritmes zoeken dan naar patronen in woordgebruik en woordstructuren die vaak voorkomen bij bepaalde labels. Als je genoeg voorbeelden hebt, kan je daarna snel inschatten waar ongelabelde documenten over gaan.

Echter is het niet gebruikelijk dat griffies labels invoeren bij documenten over welke onderwerpen ze bevatten, dus kon de gemeentedata niet worden meegeven aan de algoritmes om van te leren. In plaats daarvan is een vergelijkbare set data gezocht waarbij wel is aangegeven welke thema’s ze bevatten.

Zodoende werd een dataset met documenten uit de Nederlandse Eerste en Tweede Kamer gebruikt. Daarbij is aangegeven of documenten bijvoorbeeld over onderwijs, zorg of veiligheid gaan. Bovendien is de dataset ook politiek van aard, dus in principe zou het voorspellen van labels bij raadsinformatie goed geleerd kunnen worden met parlementaire documenten.

Helaas is dat toch niet zo. Er worden andere woorden gebruikt voor in documenten uit het parlement. Neem het onderwijs: op landelijk niveau wordt besproken of bijvoorbeeld creatieve opleidingen mogen voortbestaan, hoe we het wetenschapsbudget moeten besteden en hoe we meer leraren kunnen krijgen. De onderwerpen worden breder besproken dan in gemeentes, waar het eerder gaat over een lokaal lesprogramma, overlast van leerlingen of huisvesting van een school.

Kortom, er is sprake van een “domeinverandering”. De data vanuit het parlement is daarom op technisch vlak te verschillend van de gemeentedata. Het is dus erg lastig om te leren welke patronen bij welk label hoort, er zijn immers weinig goede voorbeelden! Gelukkig kunnen we twee aanpassingen doen om deze domeinverandering te overwinnen.

Aanpassing 1: Geen woorden, maar betekenissen

De woorden “sterk” en “krachttraining” zien er totaal verschillend uit, maar toch hebben ze met elkaar te maken. Algoritmes snappen die relatie niet, want die kijken alleen of precies dezelfde letters gebruikt worden.

Gelukkig bestaan er manieren om woorden om te zetten naar een cijferreeks die de betekenis van het woord bevat. Extra leuk hieraan is dat je nu met woorden kan rekenen. Zo is de getallenreeks van “koning” min de getallenreeks van “man” plus de getallenreeks van “vrouw” ongeveer gelijk aan “koningin”.2

Waarom is dat handig? Woorden die bijvoorbeeld iets met zorg te maken hebben, zoals “zorgcentrum”, “jeugdzorg” en “zorgverzekering”, hebben ook cijferreeksen die overeenkomsten bevatten. Algoritmes leren nu dus niet dat woorden bij een label horen, in plaats daarvan zoekt het naar eigenschappen in cijferreeksen die lijken op elkaar. Die eigenschappen in cijferreeksen komen in beide domeinen voor, en daardoor werkt het beter om met betekenissen te werken.

Aanpassing 2: Als het lijkt op gemeentedata, dan is het relevant

Het probleem van de domeinverandering is dat gemiddeld gezien de data vanuit het parlement niet lijkt op dat vanuit de gemeente. Toch zijn er documenten die wel veel waarde hebben, bijvoorbeeld wanneer wordt gesproken over beleid dat wordt uitgevoerd door gemeente.

Doel van de tweede aanpassing is het opsporen van de Rijksdocumenten die veel lijken op gemeentedata door te kijken of dezelfde woorden worden gebruikt. Daarna kan je binnen de algoritmes een aanpassing maken waardoor die documenten zwaarder meewegen tijdens het trainen. Zo leren de algoritmes patronen die ook relevant zijn voor gemeentedata.

Het werkt, maar (nog) niet goed genoeg

De modellen worden geëvalueerd op basis van de F1-score. De F1-score is een weging tussen hoeveel van de toegekende labels kloppen en hoeveel van de labels die toegekend horen te zijn ook daadwerkelijk toegekend zijn. Het is een score tussen de 0 en 1 waarbij een 1 betekent dat je het perfect hebt gedaan.

Als je probeert labels te voorspellen van documenten uit het parlement lukt dat redelijk. Je kan dat voorspellen met een F1-score van ongeveer 0.78. Probeer je gemeentedata te voorspellen dan scoor je zonder aanpassingen 0.32.

Aanpassing 2 leidt tot een verhoging tot 0.37, de eerste aanpassing verhoogt de F1-score to 0.48. De methodes tegelijkertijd gebruiken komt tot een score van 0.45. Een score van 0.48 betekent ongeveer dat de helft van de toegekende labels klopt en de helft van de labels die toegekend moeten worden ook daadwerkelijk toegekend is. Hoewel dat wel beter een flinke verbetering is ten opzichte van de 0.32, zal de hoeveelheid fouten met dit model tot frustraties leiden bij gebruikers.

What’s next

Het onderzoek laat zien dat het niet eenvoudig is om een goede classificatiemodellen te maken die getraind zijn met parlementaire data. Ook veelgebruikte methodes om de domeinverandering te overkomen leveren geen resultaten die bruikbaar zijn voor uitwerking binnen zoek.openraadsinformatie.nl.

Jammer genoeg is het eindresultaat dus nog niet goed genoeg, maar toch heeft het onderzoek een basis gelegd voor een vervolg. Het geeft uitgangspunten voor verdere verbeteringen binnen de algoritmes en het laat zien dat met genoeg relevante data betere modellen kunnen worden gebouwd. Er worden ook meerdere mogelijkheden geopperd om die data te krijgen:

  1. Meer griffies of andere belanghebbenden moeten labels bij de gemeentedocumenten plaatsen.
  2. Er kan een set gemaakt worden met trainingsdata op basis van de aanwezigheid van bepaalde woorden. Dus bijvoorbeeld alle documenten met daarin “politie”, “criminaliteit” en “Noodverordening” worden bestempeld als documenten die over veiligheid gaan.

Beide mogelijkheden bieden een manier tot betere data, iets wat de prestaties echt kan verbeteren. Met nieuwe data en misschien nog aanpassingen in de algoritmes kan verder worden gewerkt aan de classificatie en dus makkelijk doorzoekbare overheidsdata voor iedereen. Dit is iets waar Open State Foundation en VNG de komende tijd mee verder willen.

Meer weten? Lees mijn scriptie of nodig me een keer uit voor een kop koffie, ik leg het graag nog beter uit!

2 Van dit soort rekensommetjes gaat mijn hart sneller kloppen, dus voor de liefhebber nog 3 voorbeelden die ook werken:

  • Bill Gates – Microsoft + Apple = Steve Jobs
  • Pizza – Italië + Japan = Sushi
  • Moskou – Rusland + China = Beijing
envelope

Op de hoogte blijven?