Tekstclassificatie

Wat is tekstclassificatie?

Tekstclassificatie is een stuk tekst een label geven uit een vaste lijst. In welke wachtrij een supportmail hoort. Onder welke kostensoort een factuurlijn valt. Of een document een contract is of een factuur. Of een bericht spam is.

Die vaste lijst maakt het verschil met de rest van het taalwerk. Een samenvatter mag schrijven wat hij wil, een classifier kiest uit zes opties die jij op voorhand hebt opgeschreven. Net die beperking maakt het bruikbaar: de uitkomst is een waarde in een kolom, dus je kan erop filteren, ze tellen en er een workflow aan hangen.

Er bestaan twee vormen en je kiest er één voor je begint. Bij single-label classificatie krijgt elk item precies één label en sluiten de labels elkaar uit: een mail gaat naar één wachtrij. Bij multi-label classificatie kan een item er meerdere tegelijk dragen, of geen enkel: een contract kan zowel privacy als intellectuele eigendom meekrijgen. In spaCy tellen de scores van de single-label component op tot 1, terwijl er voor de multi-label component in de eigen documentatie "no particular guarantee about their sum" is. Bij Azure kies je het projecttype op het moment dat je het project aanmaakt.

Sentimentanalyse is tekstclassificatie met een specifieke labellijst, meestal positief, negatief en neutraal. Dataclassificatie in de governance-betekenis, waarbij een document publiek, intern of vertrouwelijk is, is iets anders: dat label komt uit beleid en patroonherkenning, niet uit een model dat jouw zaak uit voorbeelden geleerd heeft.

Drie manieren om er een te bouwen

Alle drie draaien ze vandaag in productie, en het zijn geen stadia die je doorloopt. Elk wint op een andere as.

Regels. Een opzoektabel of een lijst met patronen. Mail van het noreply-adres van de koerier gaat naar de leveringswachtrij. Een factuurlijn van je energieleverancier is energie. Regels kosten niets, ze zijn exact, en iedereen kan nalezen waarom een beslissing viel. Ze breken zodra de formulering varieert. Begin er toch mee: in de meeste KMO-data dekt een handvol regels al een groot stuk van het volume, en dat stuk heeft nooit een model nodig.

Een getraind model. Je labelt een paar honderd voorbeelden, het model leert welke woordcombinaties bij welk label horen en scoort nieuwe tekst in milliseconden. Dat is gewone supervised learning. Het uitgewerkte voorbeeld van scikit-learn geeft de schaal aan: vier nieuwsgroepcategorieën, ongeveer tweeduizend trainingsdocumenten, en een lineair model dat in honderdsten van een seconde traint en rond de 75 tot 78 procent nauwkeurigheid haalt op een bewust lastige testset. Na de training kost draaien bijna niets meer, en daarom wint deze aanpak nog altijd bij groot volume.

Een taalmodel met de labellijst in de prompt. Je stuurt de tekst mee met de lijst labels, één zin uitleg per label, en leest het antwoord terug. Geen trainingsrun, geen corpus dat je eerst moet aanleggen. De ticket-routing handleiding van Anthropic zegt het rechttoe rechtaan: een voorgetraind model "can effectively classify tickets with just a few dozen labeled examples". Je betaalt per rij en per token, en het gedrag kan verschuiven wanneer de leverancier een nieuwe modelversie uitbrengt.

De labellijst is het moeilijke deel

Teams besteden drie weken aan het model en één uur aan de labels. Die verhouding klopt niet. Drie problemen verklaren de meeste tegenvallende classifiers, en alle drie gaan ze over labels.

Labels die overlappen. Technische storing en leveringsprobleem passen allebei op een mail die zegt dat het toestel sinds de levering niet meer werkt. Geen enkel model lost dat op, want twee collega's raken er onderling ook niet uit. De handleiding van Microsoft bij hun eigen classificatiedienst zegt hetzelfde vanuit de andere kant: hoe dubbelzinniger je schema, hoe meer gelabelde data je nodig hebt om de klassen uit elkaar te houden, en wanneer twee klassen elkaar blijven verwarren, overweeg je ze samen te voegen.

Een restcategorie die het volume opzuigt. Elke labellijst krijgt een "overige". Zonder definitie groeit die stilletjes aan, want alles waar het model niet uit raakt belandt daar en niemand leest het na. Zodra een derde van je mail in "overige" zit, doet je classifier niets meer. Schrijf er een definitie voor, beslis welk aandeel aanvaardbaar is en lees elke maand na wat er terechtkwam.

Labels die niemand in een zin kan uitleggen. Leg dezelfde vijftig items apart voor aan twee collega's. Als ze het over veertig eens zijn, is veertig op vijftig ongeveer het plafond van elk model dat op hun labels gebouwd wordt. Één zin per label met twee voorbeelden en een tegenvoorbeeld is het echte werk, en net dat wordt overgeslagen.

Voor een getraind model raadt Microsoft ongeveer 50 gelabelde documenten per klasse aan, en waarschuwt het dat een klasse met minder dan 15 de nauwkeurigheid naar beneden trekt. Een prompt heeft veel minder voorbeelden nodig om te werken, maar je wil nog altijd een gelabelde set van die grootte, want zonder die set meet je niets.

Hoe weet je of het werkt?

Algemene nauwkeurigheid zegt hier bijna niets. Met zes wachtrijen waarvan er één 30 procent van het volume draagt, haalt een model dat de grote rij goed doet en de kleine slecht nog altijd een net cijfer, en dat cijfer verbergt precies de rijen waar je je zorgen over maakte. Lees precision en recall per label. Precision antwoordt op: van alles wat hier geklasseerd werd, hoeveel hoorde hier thuis. Recall antwoordt op: van alles wat hier thuishoorde, hoeveel is er gevonden.

label                 precision  recall  aantal
facturatie                 0.95    0.96     180
levering                   0.91    0.94     150
technische storing         0.79    0.79     108
offerteaanvraag            0.88    0.71      84
retour of klacht           0.90    0.87      60
overige                    0.33    0.56      18

De algemene nauwkeurigheid van die run is 87 procent, wat prima klinkt. Twee lijnen bederven dat. Offerteaanvraag heeft recall 0.71, dus drie op de tien offerteaanvragen geraakten nooit bij verkoop, en dat is de fout uit dit lijstje die geld kost. Technische storing heeft precision 0.79, dus één op de vijf mails die daar belandden hoorde er niet thuis. Dat zijn twee kanten van dezelfde vaststelling: in een confusion matrix zie je de ontbrekende offerteaanvragen terug in de kolom technische storing, omdat klanten eerst hun probleem beschrijven en pas daarna vragen wat een vervanging kost. Het advies van Microsoft bij zo'n beeld is de twee klassen samenvoegen, of meer voorbeelden labelen die er net tussenin zitten.

Class imbalance verklaart waarom "overige" zo slecht scoort: 18 gevallen is te weinig om iets uit te leren en te weinig om het cijfer stabiel te houden. Een confusion matrix bestaat trouwens alleen voor single-label werk. Azure zegt uitdrukkelijk dat hij niet beschikbaar is voor multi-label projecten, want een document met twee juiste labels en een voorspelling past niet in een vakje van een raster.

Twee uitgewerkte voorbeelden

3.000 supportmails per maand naar zes wachtrijen

Een groothandel krijgt ongeveer 3.000 mails per maand op één adres. Met de hand gesorteerd ziet de verdeling er zo uit: 900 facturatie, 750 levering, 540 technisch, 420 offerteaanvragen, 300 retours en klachten, 90 echt overige. Iemand opent elke mail en sleept ze naar een map, ruwweg 30 seconden per stuk, dus 25 uur per maand.

Dat via een prompt laten lopen kost bijna niets. Elke call draagt de mailtekst plus de labellijst en de instructies, zeg 500 input-tokens, want die lijst reist mee met elke rij in plaats van één keer. Dat is 1,5 miljoen input-tokens per maand. Aan de prijs van Claude Haiku 4.5 op 4 september 2026, 1 dollar per miljoen input-tokens en 5 dollar per miljoen output-tokens, met een antwoord van een label en een regel motivering van zo'n 40 tokens, kost die maand ongeveer 1,50 dollar aan input en 60 cent aan output. Twee dollar dus, of één dollar via de batch-API aan halve prijs.

Wat je echt beslist, is waar het automatisch klasseren stopt. Bij een drempel die 78 procent van het volume doorlaat, klasseren 2.340 mails zichzelf en gaan er 660 naar een controlerij aan 20 seconden per stuk, dus zo'n drie en een half uur. Van die 2.340 belandt ongeveer vier procent in de verkeerde rij en wordt later met de hand verplaatst aan een paar minuten per stuk, tel daar drie uur bij. Zeven uur werk in plaats van vijfentwintig, en die drie uur rechtzetten is het cijfer om op te volgen, niet die twee dollar.

Een getraind model geeft je een kans waarop je eerlijk een drempel kan leggen. Vraag aan een taalmodel hoe zeker het is en je krijgt een getal dat het zelf geschreven heeft, geen gemeten kans. Hang de beslissing dus aan iets steviger: klasseren wanneer het model één label noemt en de zin citeert waarop het besliste, naar de controlerij wanneer het antwoord "overige" is of wanneer de motivering twee labels noemt.

Aankoopfactuurlijnen indelen in kostensoorten

Dezelfde zaak boekt ongeveer 1.000 aankoopfactuurlijnen per maand in acht kostensoorten. Voor er een model aan te pas komt, handelt een leveranciersopzoeking er al 620 af, want 23 leveranciers boeken altijd op dezelfde soort en dat blijft zo. De overige 380 gaan naar de classifier aan ruwweg 300 input-tokens per lijn, inclusief de acht labeldefinities, dus 114.000 tokens per maand of ongeveer 11 cent. Je draait dat een jaar voor de prijs van een lunch.

Het rapport per klasse is waar het werk zit. Energie scoort bijna perfect, want de woorden zijn onmiskenbaar. Externe diensten en onderhoud lopen voortdurend door elkaar, want een onderhoudscontract met wisselstukken erin is echt allebei, en de oplossing is een geschreven regel over wie voorrang krijgt, geen beter model. Lijnen waarvan de omschrijving een kale artikelcode is, kan je uit de tekst helemaal niet indelen, dus die gaan bewust naar de boekhouder in plaats van als mislukking.

Een getraind model versus een prompt: wat kost het om je labellijst te wijzigen?

Neem een concrete wijziging: de groothandel begint serviceabonnementen te verkopen en heeft een zevende wachtrij nodig.

Met een getraind model zoek je eerst een vijftigtal voorbeelden van die nieuwe klasse, wat betekent dat je door mails graaft die al als facturatie of overige gelabeld staan. Daarna herbekijk je de bestaande labels, want een deel van de facturatiemails van vorig jaar zijn nu abonnementsmails. Dan hertrain je, evalueer je elke klasse opnieuw in plaats van alleen de nieuwe, en zet je opnieuw uit. De cijfers van de buurklassen zijn mee verschoven, dus iemand moet daar ook naar kijken. Dat is dagen werk, verdeeld over mensen met een andere dagtaak. De handleiding van Anthropic vat de keerzijde in één regel samen: eens een klassieke machine learning aanpak staat, is ze wijzigen "a laborious and data-intensive undertaking".

Met een prompt voeg je een regel toe aan de labellijst, zet je er twee voorbeelden bij, laat je je testset van 600 mails opnieuw lopen en vergelijk je de cijfers per klasse met de vorige run. Dat is een namiddag werk.

Die soepelheid heeft een prijs. Het getrainde model ligt vast, dus dezelfde mail krijgt volgend jaar hetzelfde label. De prompt niet, want het model erachter krijgt versies en wordt op termijn uitgefaseerd, en een nieuwe versie kan twijfelgevallen anders beslissen zonder dat jij iets aanraakt. Zet de modelversie vast, hou je testset bij en laat ze opnieuw lopen wanneer je overschakelt.

Waar moet je op letten bij tekstclassificatie

Drift komt binnen als een nieuw product, niet als een waarschuwing. De classifier heeft nooit gezien wat je sinds maart verkoopt, dus die mails gaan naar "overige" of naar een geloofwaardige verkeerde rij. Volg wekelijks het aandeel "overige" op en het aandeel antwoorden met lage zekerheid. Een sprong in één van beide zie je maanden voor iemand van het team komt klagen.

Meet op echt verkeer, niet op een gebalanceerde steekproef. Een testset met evenveel gevallen per klasse is makkelijker te maken en flatteert het model. Je echte mail is voor 30 procent facturatie en voor 3 procent overige, en net die scheefheid treft de kleine klassen.

De drempel is een zakelijke keuze. Meer automatisch klasseren betekent minder controle en meer rechtzetten. Reken beide kanten één keer uit in minuten per geval, en de drempel kiest zichzelf.

Bewaar het label samen met het bewijs. Hou het label, de zekerheid en de modelversie bij naast het record, zodat een vraag zes maanden later een antwoord heeft.

Herlabel je verleden niet stilzwijgend. Oude records houden hun oude label tot je ze opnieuw laat lopen, en een rapport dat dit kwartaal met het vorige vergelijkt, vergelijkt dan twee verschillende labellijsten.

Laatst Bijgewerkt: September 4, 2026 Terug naar Woordenboek
Trefwoorden
tekstclassificatie classificatie supervised learning natural language processing precision en recall confusion matrix class imbalance machine learning model drift unsupervised learning sentimentanalyse ai