Content Intelligence met RapidMiner

Elk CMS zou eigenlijk tools moeten hebben om content te analyseren. Bijvoorbeeld om content te classificeren, trefwoorden eruit te halen, of inhoudelijk gerelateerde content te suggereren. Helaas is het nog geen gemeengoed onder de CMS software leveranciers om dergelijke functionaliteit integraal aan te bieden. Als je toch content wilt analyseren ben je vaak aangewezen op gespecialiseerde software. Bijvoorbeeld RapidMiner. RapidMiner is een data-science platform voor o.a. data bewerking, machine learning en text mining. Oorspronkelijk is het pakket ontwikkeld aan de TU van Dortmund. RapidMiner heeft een gratis demoversie met alle functionaliteit die echter beperkt blijft tot datasets van maximaal 10.000 records.

We hebben een data-set van 128 door mensen geclassificeerde nieuwsberichten als input gebruikt. De records uit deze data-set zijn verdeeld over de volgende categorieën: Auto, Economie, Politiek en Sport. Het oorspronkelijke format was XML, afkomstig van een export uit een CMS systeem. Hieronder staat het RapidMiner model met de Performance resultaten uitgedrukt in Precision en Recall.


Performance resultaat

Uit de XML data zijn de Titel, Tekst en Categorie gehaald en na wat bewerkingen zoals tokenizing, case-conversion en stopword-filtering, aangeboden als trainingsdata aan k-NN, Naive Bayes en Deep Learning (DL) neural network. Het Crossvalidation subproces is bedoeld om een deel van de aangeboden trainingsdata te gebruiken als trainingsdata en een deel van de trainingsdata te gebruiken als test-data.
Van elk algoritme zijn de Recall Re en Precision Pr bepaald en daarmee de F1 score (2*Re*Pr/(Re+Pr). F1 is een maat voor de accuraatheid van het algoritme gegeven de dataset waarmee getraind en getest wordt. Hieronder staan de F1-scores.

Uit het F1 overzicht zien we dat k-NN (groen) over het algemeen de hoogste F1 score heeft. Naive Bayes (bruin) presteert vergelijkbaar. Bayes doet het iets slechter bij Economische content en beter bij Politieke en Sport content. Deep Learning (blauw) scoort aanzienlijk lager over alle categorieën. Alleen bij Sport komt het in de buurt van k-NN en Bayes.
De solid lijnen presenteren de F1-scores met N-Gram gelijk aan 1. De gestippelde lijnen zijn de resultaten met N-Gram=2 (NG=2). Met N-Gram generatie kun je samengestelde woorden als een eenheid meenemen in de analyse. N-Gram=2 betekent dat je twee woorden die bij elkaar staan als een eenheid meeneemt. Bijvoorbeeld air france genereert bij N-Gram =2, ook air_france als woord.

Een mogelijke verklaring voor die lagere score van DL is dat DL gevoeliger is voor de mix van de verschillende categorieën. Nieuwsberichten over auto’s kunnen ook Economie gerelateerde onderwerpen bevatten.
Evenzo en wellicht nog sterker is dit bij berichten over economie en politiek. Beide domeinen zijn vaak verwant aan elkaar. Bij het beoordelen van een bericht door een mens is het goed mogelijk dat een bericht dat over economie en politiek gaat door de beoordelaar die twijfelt tussen de categorie Economie of Politiek, in de categorie Economie geplaatst wordt omdat de inhoud net iets meer neigt naar Economie en er nu eenmaal één van de categorieën gekozen moet worden. Dat DL beter scoort bij Sport is met dezelfde redenering te verklaren omdat in het algemeen sportberichten minder vaak vermengd zijn met de andere categorieën.

De lagere F1 score van het Deep Learning algoritme betekent dus niet dat het resultaat slechter is. Sterker, je kunt redeneren dat Deep Learning eigenlijk een betere voorspelling doet over de ‘aboutness’ van het bericht omdat het rekening houdt met de verschillende domeinen die in een bericht aan bod komen.
Hoe zou je dit kunnen ondervangen? Een oplossing kan zijn om toe te staan dat er meerdere categorieën aan een bericht toegekend kunnen worden. Probleem is dan wel dat alle categorieën even zwaar meetellen en dat willen we ook weer niet. Een ander oplossing is om ‘tussencategorieën’ of een soort fuzzy (vage) classificatie in te voeren. Bijvoorbeeld uitgedrukt in percentages. Een bericht krijgt dan de kwalificatie van 20% Economie en 80% Politiek in plaats van Politiek. Dit gaan we nog een keer onderzoeken.

Voorlopige conclusie: k-NN en Naive Bayes presteren goed, echter het is de vraag of ze de content goed begrijpen. Deep Learning is wellicht beter in staat de verschillende aspecten in een tekst te onderkennen.