Een volledig geautomatiseerd systeem voor het classificeren van zakelijke documenten met behulp van state-of-the-art transformer modellen. Het systeem bereikt een nauwkeurigheid van 94% op een dataset van meer dan 50.000 documenten.
Technologie Stack
Probleemstelling
De opdrachtgever ontving dagelijks honderden documenten die handmatig moesten worden gesorteerd: facturen, contracten, correspondentie, en rapporten. Dit kostte gemiddeld 4 uur per dag aan administratief werk.
Oplossing
We hebben een end-to-end pipeline gebouwd die documenten automatisch classificeert:
- OCR voor het extraheren van tekst uit gescande documenten
- Een fine-tuned DistilBERT model voor classificatie
- REST API voor integratie met bestaande systemen
- Dashboard voor monitoring en handmatige correcties
Model Architectuur
Het classificatiemodel is gebaseerd op DistilBERT, gekozen voor de balans tussen nauwkeurigheid en inferentiesnelheid.
from transformers import DistilBertForSequenceClassification
from transformers import DistilBertTokenizer
class DocumentClassifier:
def __init__(self, model_path: str):
self.tokenizer = DistilBertTokenizer.from_pretrained(model_path)
self.model = DistilBertForSequenceClassification.from_pretrained(
model_path,
num_labels=4 # factuur, contract, brief, rapport
)
def classify(self, text: str) -> dict:
inputs = self.tokenizer(
text,
truncation=True,
max_length=512,
return_tensors="pt"
)
outputs = self.model(**inputs)
probs = outputs.logits.softmax(dim=-1)
return {
"label": self.labels[probs.argmax()],
"confidence": probs.max().item()
}
Resultaten
- Nauwkeurigheid: 94.2% op de testset
- Verwerkingstijd: <100ms per document
- Tijdsbesparing: 3.5 uur per dag
- ROI: Terugverdiend binnen 3 maanden
Geleerde Lessen
Data kwaliteit bleek belangrijker dan modelcomplexiteit. De eerste iteratie met een groter model (BERT-base) presteerde slechter vanwege overfitting op de relatief kleine trainingsset. DistilBERT met agressieve data augmentatie leverde uiteindelijk de beste resultaten.