AI-monitor 2024

Technische annex bij H6

In deze technische annex worden de stappen van het gehele proces rond het ML classificatiemodel van hoofdstuk 6 in volgorde verder toegelicht. Deze annex is bedoeld om een gedetailleerder beeld te geven van het proces en de keuzes die hierin zijn gemaakt. Er wordt aangenomen dat het publiek vertrouwd is met de basisbegrippen rondom ML classificatiemodellen.

T.2.1 Handmatige labeling

Om tot een initiële test- en trainingsdataset te komen, is een set vacatures handmatig gelabeld in de categorieën AI-vacature en niet AI-vacature. Aangezien AI-vacatures erg zeldzaam zijn in de gehele dataset (rond de 0,1 procent), was het niet mogelijk een bruikbare test- en trainingsdataset te vormen uit een willekeurig steekproef. Dit zou resulteren in een trainingsdataset met te weinig positieve gevallen (AI-vacatures) om de modellen effectief te kunnen trainen. Om dit te voorkomen, is er bij het samenstellen van de initiële set van vacatures actief gezocht naar AI-vacatures door steekproeven te nemen van gefilterde populaties gebaseerd op zoektermen en/of ISCO codes. Om het gehele spectrum aan type AI-vacatures zo goed mogelijk te omvatten, is er gevarieerd met gebruikte zoektermen. Om de initiële dataset ook te voorzien van vacatures die geheel niks met AI te maken hebben is een willekeurige steekproef toegevoegd en als niet AI-vacature bestempeld, voor deze vacatures zijn enkel de titels gecheckt. In de initiële handmatige gelabelde dataset zaten 235 AI-advertenties, 372 niet AI-advertenties verzameld met AI-zoektermen en 200 niet AI-advertenties uit een willekeurige steekproef.

T.2.2 Encoding

Aangezien de ML classificatiemodellen numerieke input vereisen en het doel is vacatureteksten te classificeren, is encoding toegepast. Er zijn twee type encoding methoden getest, tf-idf en ppmi. Vervolgens zijn aan de resulterende numerieke vectoren additionele features toegevoegd. Voordat de encoding methoden zijn toegepast, zijn de vacatureteksten schoongemaakt (data cleaning). Zo zijn speciale tekens en stopwoorden weggehaald, zijn alle letters lowercase gemaakt, en is stemming toegepast. Stemming is een techniek waarbij woorden terug naar hun stam worden gebracht, zo wordt bijvoorbeeld appeltje aangepast naar appel, en calculating aangepast naar calculate.

Tf-idf

Term frequency – inverse document frecuency (tf-idf) is een encoding methode die twee technieken combineert. Eerst wordt geteld hoe vaak en welke woorden voorkomen in de vacaturetekst (tf). Vervolgens worden deze waarden gewogen op basis van de frequentie waarmee vacatureteksten de woorden normaal gesproken bevatten (idf). Woorden die regelmatig voorkomen krijgen een lager gewicht dan woorden die unieker zijn. Op deze manier krijgen woorden die onderscheidend zijn voor de specifieke tekst een hoger gewicht. De gewichten gebruikt in het idf gedeelte zijn bepaald door te tellen in hoeveel teksten uit de gehele trainingsdataset het desbetreffende woord ten minste één keer voorkomt. Om het aantal features, ofwel de dimensie van de resulterende numeriek vector, van beperkte grootte te houden, wordt gebruikt gemaakt van de paramater m. Woorden die in de gehele trainingsdataset in minder dan m teksten voorkomen krijgen een gewicht van nul. Deze woorden worden dus niet meegenomen als feature in het ML classificatiemodel. De parameter m kan verschillende waarden aannemen. In dit project zijn de waarden {5,10,15,20,25,30} uitgetest voor m.

Ppmi

Bij positive pointwise mutual information (ppmi) encoding wordt op basis van de gehele trainingsdataset bekeken wat de kans is dat twee woorden samen voorkomen binnen een bepaalde windowsize, in acht nemende hoe groot de kans is dat de losse woorden voorkomen in de tekst. In dit project is gekozen voor een windowsize van twee, wat inhoudt dat binnen een zin wordt gekeken naar twee woorden voor en twee woorden na het woord in kwestie. Deze kans wordt bijgehouden in een matrix waar de element berekend zijn met de volgende formule:

pmi(x,y)=logp(x,y)p(x)p(y)

Hier zijn x en y twee verschillende woorden, p(x,y) is de kans dat woord y binnen de windowsize van woord x voorkomt en p(x) de kans dat het woord x voorkomt, idem p(y). Alle negatieve waarden worden op nul gezet, vandaar de term postive. Net als bij tf-idf wordt bij ppmi alleen gekeken naar woorden die in meer dan m teksten voorkomen.

De resulterende ppmi matrix wordt gebruikt om elke losse vacature uit te drukken als numerieke vector. Elk woord in de vacature dat in meer dan m teksten voorkomt correspondeert met een rij in de ppmi matrix. Per vacature wordt een collectie gemaakt van alle rijen uit de ppmi matrix die corresponderen tot de woorden uit de vacature. Vervolgens wordt een L2 norm genomen over deze collectie. Voor een vacature bestaande uit 300 woorden die in meer dan m teksten voorkomen, worden dus de 300 corresponderende rijen van de ppmi matrix verzameld; het resultaat van de L2 norm over deze 300 rijen is de numeriek vector die als input wordt gebruikt.

Additionele features

Aan de resulterende tf-idf en ppmi vector kan nog extra informatie over de vacature worden toegevoegd. In dit project zijn de volgende features aan de numerieke vectoren van beide methoden toegevoegd:

  • Een binaire waarde die aangeeft of de vacature in het Nederlands of Engels is geschreven.
  • Een binaire waarde die aangeeft of de vacaturetitel minimaal één van de termen ‘ ai ‘, ‘artificial intelligence’, ‘ ml ’, ‘machine learning’, ‘ nlp ‘, ‘natural language processing’ of ‘ai/ml’ bevat.
  • Een numerieke waarde die het opleidingsniveau wat bij de vacature hoort aangeeft.
  • Een binaire waarde die aangeeft of het opleidingsniveau onbekend is.
  • Een numerieke waarde die de organisatiegrootte die bij de vacature hoort aangeeft.
  • Een binaire waarde die aangeeft of het organisatiegrootte onbekend is.

Naast deze informatie is ook getest of het toevoegen van word2vec (w2v) waarden de prestatie van het model verbeterde. Word2vec is een techniek die de betekenis van woorden omzet in numerieke vectoren. In dit project is gekozen om w2v toe te passen met een dimensie van 200. Om de w2v informatie van een gehele tekst samen te vatten is gekozen om het gemiddelde te nemen over de w2v vectoren van alle afzonderlijke woorden in de tekst. Op deze wijze zijn er twee w2v waarden geconstrueerd: over de gehele vacaturetekst en over enkel de vacaturetitel. Zo zijn er uiteindelijk vier type encoding getest gedurende het hele proces:

  1. Tf-idf
  2. Tf-idf + w2v over de gehele vacaturetekst
  3. Tf-idf + w2v over enkel de vacaturetitel
  4. Ppmi

T.2.3 Machine learning classificatiemodellen

Binnen dit project zijn 6 verschillende ML classificatiemodellen uitgetest: regularized logit, decision tree, random forest, support vector machines (SVM) en twee verschillende multilayer perceptron (MLP) configuraties37). Elk van deze modellen gebruikt als input de numerieke vector van de vorige stap en geeft als output een label: AI-vacature of niet AI-vacature. Alle modellen, behalve SVM, produceren daarnaast ook een waarschijnlijkheidsscore tussen nul en één. Hoe hoger de score, hoe hoger het model de kans acht dat het om een AI-vacature gaat.

Elk model is in essentie een beslisregel die bepaald wordt op basis van de handmatig gelabelde trainingsdataset. Deze beslisregel komt tot stand door een set aan parameters zo aan te passen dat het model de trainingsdata zo goed mogelijk classificeert. Het selecteren van de parameters gebeurt op basis van wiskundige optimalisatie. De beslisregel kan vervolgens op nieuwe gelabelde data worden toegepast. Hoe deze beslisregel in zijn werk gaat, en welke parameters in het trainingsproces worden afgestemd is eigen aan elk type ML classificatiemodel. Voor verdere informatie over de individuele methodes wordt verwezen naar scikit-learn; dit is tevens de Python package die is gebruikt om de modellen te programmeren.

T.2.4 Eerste trainingsronde

In de eerste trainingsronde zijn alle combinaties tussen de 4 encoding methodes en 6 ML classificatiemodellen getest. Daar bovenop zijn voor elke combinatie 5 verschillende waarden voor m uitgetest {5,10,15,20,25}. De waarde m bepaalt tijdens het encoderen in hoeveel teksten een woord moet voorkomen in de gehele trainingsdataset om meegenomen te worden in de uiteindelijke numerieke vector. Hiermee is m essentieel om te bepalen wat de dimensie is van de input vector. Dit levert een totaal aan 4*6*5=120 geteste combinaties op.

Om de prestatie van deze combinaties te vergelijken is de initiële handmatig gelabelde dataset in twee delen gesplitst. Een vijfde deel is gebruikt als testdata, de rest van de data is gebruikt als trainingsdata. De voorspelde classificaties van de modellen kunnen worden vergeleken met de al bekende labelwaarde van de testdata. Balanced accarucy is gebruikt als maat om te meten hoe goed een model presteert. Deze maat kijkt apart naar het percentage goede voorspellingen in de AI-vacature groep en de niet AI-vacature groep, vervolgens wordt het ongewogen gemiddelde genomen van deze twee waarden. Dit zorgt ervoor dat, alhoewel er minder AI-vacatures in de trainingsdata zitten, fouten in deze groep wel zwaar worden geteld.

Elk ML classificatiemodel bevat hyperparameters, dit zijn parameters die bepalen hoe het trainingsproces van het model verloopt. De waarden van deze parameters moeten dus voor het trainen bepaald worden, en kunnen van grote invloed zijn op het resultaat. Per combinatie van m, encoding methode en ML classificatiemodel is bepaald wat de beste set aan hyperparameters is. In dit project is gekozen om deze hyperparameters te selecteren door een combinatie van randomized search en 10-fold cross validation toe te passen. Afhankelijk van de rekenkracht die het model vergt, is een groter of kleiner aantal iteraties gekozen voor de randomized search {1000,400,200}. Voor meer informatie over deze twee technieken wordt opnieuw verwezen naar de desbetreffende pagina op scikit-learn.

Na de eerste trainingsronde is geconcludeerd dat de encoding methode ppmi consistent slechter presteerde dan tf-idf. Daarnaast bleken de ML classificatiemodellen decision tree en random forest consistent slechter te presteren dan de andere opties. Vandaar is gekozen om deze methoden in de vervolgstappen niet meer verder te testen.

T.2.5 Iteratief proces

Op basis van de eerste trainingsronde is een selectie van de best presterende model combinaties gekozen. Deze set van modellen is toegepast op 25 000 nieuwe ongelabelde vacatures uit de volledige dataset. Alle vacatures die als AI-vacature werden geïdentificeerd door minimaal één model, alle vacatures die een hogere waarschijnlijkheidsscore dan 0.25 ontvingen van minimaal één model, en alle vacatures met ‘ ai ’, ‘ ml ’, ‘ nlp ’ of hun vol uitgeschreven equivalent in de titel zijn handmatig gelabeld. De resulterende set van vacatures betreft vacatures die door de modellen worden gezien als potentieel AI. Het handmatig labelen van deze set vacatures geeft inzicht in het type vacature waar de modellen op aanslaan en legt fouten die consistent door de modellen worden gemaakt bloot.

De vacatures die resulteerden uit deze handmatige labeling zijn toegevoegd aan de trainingsdataset. Hiermee zijn extra voorbeelden toegevoegd van vacatures die in de vorige ronde onjuist waren geclassificeerd. Door vervolgens de model combinaties te trainen op deze aangevulde trainingsdata, zijn de beslisregel van elk model zodanig bijgesteld dat deze fouten minder voorkwamen.

Het proces van T.2.4 is dus opnieuw uitgevoerd op de aangevulde dataset. De enige twee verschillen met T.2.4 zijn dat de afgekeurde methodes niet meer getest zijn, en dat voor m nu de waarden {5,10,15,20,25,30} zijn uitgetest. Deze nieuwe testronde resulteerde in een nieuwe set aan best presterende model combinaties. Deze modellen zijn opnieuw gebruikt om 25 000 nieuwe ongelabelde vacatures te classificeren, waarna de gevonden potentiële AI-vacatures opnieuw handmatig gelabeld zijn. Hierna zijn de modellen een laatste keer getraind op de aangevulde trainingsdataset. Op basis van deze laatste test en de inzichten uit de handmatige labeling is besloten dat het regularized logit model het best presteerde. In combinatie met tf-idf + w2v over de gehele vacaturetekst had dit model de beste balanced accurcay score en vergeleken met de andere modellen maakte dit model weinig lastig te verklaren fouten.

T.2.6 Samenstellen van het logit ensemble

Om een robuuster model te creëren is gekozen om een ensemble van logit modellen te gebruiken. Een ensemble houdt in dat je meerdere model combinaties afzonderlijk een classificatie laat maken en dat je deze afzonderlijke classificaties samenvoegt om één uiteindelijke label over te houden. Elk logit model geeft per vacature tekst als output een waarschijnlijkheidsscore tussen 0 en 1. Er is voor gekozen om de vacature als AI-vacature te labelen indien de gemiddelde waarschijnlijkheidsscore van alle modellen in het ensemble hoger is dan 0.5. Het achterliggende idee is dat als een fout van een specifiek model niet gemaakt wordt door de andere modellen, door het gemiddelde te nemen, deze fout minder vaak meegenomen wordt in de uiteindelijke classificatie.

Het ensemble dat het best presteerde bestaat uit vier regularized logit modellen die elk gebruik maken van tf-idf + w2v over de gehele vacaturetekst encoding. Elk model is getraind op een eigen trainingsdataset en heeft een eigen m waarde. De verschillende trainingsdatasets zijn de initiële trainingsdataset, de trainingsdataset na de eerste iteratieve ronde, de trainingsdataset na de tweede iteratieve ronde en de trainingsdataset na de tweede iteratieve ronde waar nog 200 extra willekeurig geselecteerde niet AI-vacatures aan toegevoegd zijn.

T.2.7 Het model uitvoeren op de gehele dataset

Om het model toe te passen op een nieuwe ongelabelde vacature, moet de vacaturetekst eerst geëncodeerd worden. Vervolgens kan simpelweg de beslisregel van het best presterende model worden toegepast. In ons geval is dit het logit ensemble dat getraind is op verschillende versies van de trainingsdataset. Doordat een groot aantal vacatures moet worden geëncodeerd, duurt dit proces lang. Het resultaat van de classificatie is een dataset met alle vacatures die het model identificeert als AI-vacature. Alle vacatures die niet in deze dataset zitten zijn daarmee geïdentificeerd als niet AI-vacature. De dataset met AI-vacatures kan vervolgens gekoppeld worden aan de relevante informatie die beschikbaar is over de vacatures. Hiermee kunnen statistieken worden geproduceerd over de kenmerken van de AI-vacatures.

37) De eerste configuratie heeft twee lagen elk met 100 perceptrons, de tweede configuratie heeft één laag met (2/3)*(f+2) perceptrons, waar f het aantal features is van de input (dit hangt af van de encoding methode en m).