Tech talk: documentclassificatie en -voorspelling met een geïntegreerde toepassing (deel 1)

Tekstclassificatie is een van de belangrijke taken binnen Natural Language Processing. Het is het indelen van tekstfragmenten of documenten in categorieën op basis van hun inhoud. Tekst- of documentclassificatie kent uiteenlopende toepassingen: onderzoeksgebieden van wetenschappelijke artikelen herkennen, e-mails indelen, blogposts categoriseren, klantvragen automatisch labelen enzovoort.
Het project dat we hier toelichten, is een applicatiesysteem dat verschillende documenttypes classificeert met NLP-modellen op basis van deep learning en machine learning. In een tweede fase voorspelt de applicatie de klasse van nieuwe documenten zonder label. Om de workflow, verwerking en het gebruik te optimaliseren, hebben we het project opgevat als twee afzonderlijke Flask RESTful API's met een gebruikersinterface in CSS/HTML en JavaScript:
Applicatie voor documentclassificatie en voorspellingen: deze app bevat de volledige projectworkflow. Die omvat het trainen van classificatiemodellen op een gelabelde documentenset en, in de tweede fase, het voorspellen van de klasse van nieuwe, ongelabelde documenten met het eerder getrainde model. De app kan draaien op een lokale machine en op een virtuele machine met GPU-capaciteit, nodig om de modellen te trainen.
Applicatie voor documentvoorspellingen: de tweede app bevat de workflow voor documentvoorspellingen. We bouwden die als een multilabel-webapp die overal kan draaien. Om ze te gebruiken, moeten de specificaties van het eerder getrainde model, zoals gewichten en biases, worden geüpload.
Opmerking: De dataset die we aan het systeem aanbieden, moet een map zijn met alle documenten, met submappen waarvan de namen de labels vormen. Bij multilabel-documentclassificatie, waarbij een document bij meer dan één categorie hoort, moet u documenten met meerdere labels in alle bijbehorende submappen dupliceren.
Projectkenmerken
Dit zijn de vijf belangrijkste kenmerken van het documentclassificatieproject:
Ondersteuning voor uiteenlopende documenten: zowel oorspronkelijke documentformaten als gescande documenten en afbeeldingen, via OCR;
Ondersteuning voor uiteenlopende datasets: breed inzetbare modellen voor binaire, multiclass- en multilabel-classificatie;
Bruikbaar voor beginners en experts: een gebruiksvriendelijke interface, met technische informatie om te verbeteren, zoals prestatiemaatstaven, een confusion matrix en een ROC-curve;
Goede prestaties: gebruik van goede en toonaangevende praktijken, zoals het BERT-transformermodel voor deep learning;
Overal inzetbaar: gedeeltelijk uitgerold in de cloud, met de tweede app voor de voorspellingsworkflow.
De juiste modellen voor documentclassificatie kiezen
Een van de grootste uitdagingen van dit project was classificatiemodellen bouwen die een brede waaier aan datasettypes aankunnen, voor binaire, multiclass- en multilabel-classificatie. Ze moesten ook goed presteren in realistische omstandigheden met beperkte middelen. Niet elke potentiële klant heeft immers enorme datasets met hoogwaardige documenten om modellen te trainen en later goede voorspellingen te krijgen.
Tegelijk hebben we ingezet op hoogwaardige invoerdata en de meest geschikte methoden voor tekstreiniging en voorbewerking voor documentclassificatie. NLP omvat uiteenlopende taken, zoals vertaling, tekstaanvulling, topic modeling, samenvatting en Named Entity Recognition. Niet elke methode voor tekstreiniging of voorbewerking past bij elke NLP-taak. In dit project was Part-Of-Speech-tagging bijvoorbeeld niet relevant, omdat documentclassificatie niet op woordvolgorde of zinsstructuur steunt. In sommige gevallen moeten we de reiniging en voorbewerking bovendien afstemmen op zowel de taak als het gebruikte model.
Mogelijke modellen voor documentclassificatie
Sommige recente, vooraf getrainde tekstmodellen, zoals BERT, Roberta en XLNet, hebben hun eigen tokenizer/vectorizer. Een standaardvectorizer zoals TF-IDF gebruiken is dan niet relevant. Om dezelfde reden is stemming van woorden niet van toepassing bij BERT (BertForSequenceClassification). De woordenschat van BERT bestaat uit echte woorden en subwoorden, die met een groot deel van de tot stammen herleide woorden niet overeenkomen.
Voor al deze aspecten onderzochten we de literatuur op goede praktijken en toonaangevende methoden voor tekstclassificatie en -reiniging. In de voorbereidende fase testten we verschillende veelbelovende modellen uit zowel machine learning (gaussian naive bayes, support vector machine, XGBoost) als deep learning (BERT, RoBERTa, XLNet). Na die eerste tests behielden we twee modellen om de volgende redenen:
Het deeplearningmodel BERT (BertForSequenceClassification) presteert het best van alle geteste modellen en vertoont geen neiging tot overfitting bij meer epochs, in tegenstelling tot RoBERTa en XLNet;
Het machinelearningmodel XGBoost (XGBClassifier) presteert uitstekend en vraagt veel minder rekenkracht dan BERT, waardoor het veel sneller draait.
De modelkeuze bevestigen
Om onze keuze te bevestigen, testten we de twee modellen met verschillende soorten datasets. Na training op de DBPedia-dataset, met 342.782 Wikipedia-artikelen in hiërarchische categorieën, behaalde BERT bijvoorbeeld een F1-score van 99% op het eerste classificatieniveau met 9 categorieën, en 96% op het tweede niveau met 70 categorieën.
Met het oog op een realistische bedrijfscontext testten we het model ook op twee kleinere pdf-datasets, één voor multiclass- en één voor multilabel-classificatie. We stelden die speciaal voor dit project samen met documenten van de thinktank van het Europees Parlement. De documenten gaan over EU-wetgeving en zijn ingedeeld in domeinen zoals cultuur, milieu en economische en monetaire kwesties.
We kozen bewust voor kleine datasets om de modelprestaties op de proef te stellen. De multiclass-dataset bevatte 261 pdf's, de multilabel-dataset 313 pdf's waarvan 33 met meerdere labels, verdeeld over 6 categorieën met minder dan 60 documenten per categorie. Na training op de multiclass-dataset behaalt BERT een F1-score van 97% en XGBoost een F1-score van 92%.
In het vervolg…
In deel 2 van dit artikel over documentclassificatie bespreken we het workflowontwerp, programmeren in Python, de navigatie door de gebruikersinterface van de webapp en mogelijke toepassingen.