Tech Talk: een complete aanpak om informatie-extractie uit documenten te automatiseren

Steeds meer organisaties gebruiken machine learning en verwante algoritmes om documenten automatisch te verwerken, een domein dat ook bekendstaat als optische tekenherkenning (OCR).
Wie grote hoeveelheden beeld- of tekstbestanden verwerkt, kan met ML en automatisering in de juiste tools veel tijd en kosten besparen ten opzichte van handmatige verwerking.
Dit artikel beschrijft hoe we in een van onze projecten de classificatie van documenten en extractie van informatie aanpakten. De klant wilde een automatisch proces voor documentclassificatie toevoegen aan zijn al goed uitgebouwde operationele omgeving. Het doel: scans in pdf-formaat ontvangen van documenten die klanten met de hand hadden ingevuld, alle nodige informatie uitlezen en die aan de opdrachtgever bezorgen.
De oplossing voor informatie-extractie uit documenten
We bouwden een pipeline met opeenvolgende controles en verwerkingsstappen. Elke pdf doorliep de volledige pipeline.
Eerst bepaalden we welk sjabloon het document gebruikte, uit een reeks mogelijke sjablonen. De herkenning gebeurt via de voorpagina, met een koptekst en doorgaans andere specifieke kenmerken. Die vergemakkelijken het onderscheid in OpenCV. Met cv2.matchTemplate berekenen we een correlatiescore tussen de eerste pagina van het document en alle eerste pagina's in de sjablonendatabase. Als de beste kandidaat boven een minimale drempel scoort, geldt het sjabloon als herkend.
We bewaarden de sjablonendatabase en configuratiebestanden in een S3-bucket op AWS, die werd bevraagd vanuit een Docker-image met de pipeline.
Vervolgens koppelden we elke te verwerken pagina aan de overeenkomstige pagina van het herkende referentiesjabloon. Zo weten de algoritmes op welke pagina ze werken. Dat is cruciaal om te bepalen welke informatie bij welke vraag hoort. De pipeline vergelijkt de eerste pagina van het referentiedocument met de eerste pagina van het te verwerken document, enzovoort. Bij ontbrekende pagina's of scans in de verkeerde volgorde gaat het document naar handmatige controle. De vergelijking per pagina gebruikt hetzelfde principe als de sjabloonherkenning, opnieuw met veelvuldig gebruik van cv2.matchTemplate.
Na de identificatie van de pagina's worden de informatievakken automatisch gedetecteerd. Dat gebeurt vooral met cv2.morphologyEx en cv2.connectedComponentsWithStats uit OpenCV. cv2.morphologyEx past een horizontale en verticale randfilter toe op de pagina's. cv2.connectedComponentsWithStats zoekt de gesloten vakken die door die randen ontstaan en geeft hun posities terug.
Daarna houdt een extra filter alleen de vakken over die voldoen aan bepaalde voorwaarden voor positie en afmetingen. Op basis van de uiteindelijke posities snijdt de pipeline de informatievakken uit de pagina-afbeelding. In ons geval bevatten die vakken de antwoorden op de vragen in het document. De voorwaarden staan in het configuratiebestand van het sjabloon.
Als de pipeline niet alle informatievakken op een pagina detecteert, geldt die stap als mislukt en gaat het document naar handmatige controle.
De pipeline stuurt de uitgesneden afbeeldingen naar een convolutioneel neuraal netwerk (CNN). Dat al getrainde netwerk beoordeelt elk aankruisvak en koppelt er een betrouwbaarheidsscore aan. Die confidence-score is de waarschijnlijkheid die aan het label voor de inhoud van het vak wordt toegekend. Onder een bepaalde drempel is het model onvoldoende zeker over de inhoud en gaat het document naar handmatige controle.
Als alle voorgaande stappen slagen, stuurt de pipeline de antwoorden in JSON-formaat naar de klant.
De uitdagingen bij informatie-extractie uit documenten
Tijdens de ontwikkeling stuitten we op enkele uitdagingen: uiteenlopende sjablonen, verschillen in menselijk gedrag en strenge betrouwbaarheidseisen.
Uiteenlopende sjablonen
Het bedrijf gebruikte ongeveer tien verschillende sjablonen. Om voldoende documenten te kunnen verwerken, moest de pipeline er meerdere herkennen. We kozen de twee meest voorkomende, samen goed voor 90% van alle documenten. Voor elk sjabloon was bovendien een configuratiebestand nodig om de gedetecteerde vakken te koppelen aan de bijbehorende vragen.
De oplossing: Omdat die configuratie ingewikkeld kan zijn voor een onervaren gebruiker, maakten we een sjabloongenerator waarmee in enkele klikken een nieuw sjabloon kan worden toegevoegd.
Verschillen in menselijk gedrag
Een andere uitdaging was begrijpen hoe verschillend mensen documenten invullen en daarmee omgaan. We moesten een evenwicht vinden tussen zoveel mogelijk automatisch verwerken en de complexiteit beperken. Hoe meer uitzonderingen u wilt afdekken, hoe complexer het proces wordt.
Bovendien is binnen de huidige opzet geen foutpercentage van 0% te garanderen, vooral bij de classificatie van vakken met het neurale netwerk. De documenten waren oorspronkelijk niet voor automatische verwerking ontworpen, waardoor geschreven antwoorden dubbelzinnig kunnen zijn.
De oplossing: Er bestaat geen eenduidig antwoord voor dat evenwicht. Afhankelijk van de klant kunt u meer tijd investeren in een zeer complexe infrastructuur die bijna 100% van de documenten verwerkt. Maar de bouwkosten zouden dan niet opwegen tegen de winst. Doorgaans wil een klant zijn return on investment (ROI) optimaliseren, rekening houdend met het feit dat papieren documenten in een steeds digitalere wereld zeldzamer worden.
Voor het invullen van de vakken is de enige oplossing een helder kader dat klanten uitlegt hoe ze het document moeten invullen. Die uitleg moet op toekomstige sjablonen staan.
Een strenge betrouwbaarheidseis voor informatie-extractie
Tot slot moesten we aan een strenge betrouwbaarheidseis voldoen: idealiter 0% fouten. In machinelearningtermen moesten we 100% precision verzekeren, ten koste van de recall, ofwel het aandeel dat we afdekken.
Een hoge betrouwbaarheid is nodig zodat klanten de automatisering volledig vertrouwen en in hun werking opnemen. Dat beperkt wel het aantal documenten dat we kunnen automatiseren.
De oplossing: Binnen een gegeven architectuur is hyperparameteroptimalisatie de gebruikelijke manier om 100% precision te combineren met een zo groot mogelijke dekking. Met de dataset van eerdere documenten kunnen de parameters per stap worden bijgesteld om aan beide voorwaarden te voldoen. Hier gaat het vooral om de correlatiedrempels voor sjabloon- en paginaherkenning en de confidence-drempel van het neurale netwerk. Een zeer strenge drempel verzekert 100% precision, maar verlaagt de dekking. Een te soepele drempel laat fouten door, waardoor 100% precision verloren gaat. We ontwikkelden twee versies.
De tools voor informatie-extractie uit documenten
Om deze pipeline te bouwen en volledig in productie te brengen, gebruikten we OpenCV, PyTorch, Docker en AWS.
OpenCV
We gebruikten de OpenCV-bibliotheek intensief in verschillende processtappen. OpenCV is een bekende opensourcebibliotheek voor klassieke computer vision. We gebruikten ze voor sjabloonherkenning, controle van de paginavolgorde en automatische detectie van informatievakken.
PyTorch
We ontwikkelden het neurale netwerk in PyTorch. Het is een convolutioneel neuraal netwerk (CNN), zeer geschikt voor beeldclassificatie. We pasten transfer learning toe: we vertrokken van de voorgetrainde ResNet50-architectuur en trainden die vervolgens op de afbeeldingen van de klant. Het CNN geeft de klasse en een waarschijnlijkheidsscore die aangeeft hoe zeker het van zijn keuze is. Die score helpt verkeerde classificaties te vermijden.
Docker
We brachten de pipeline in productie in een container met Docker. Het grote voordeel is dat compatibiliteitsproblemen bij uitrol op nieuwe servers geen zorg meer zijn. Het proces draait in een afgesloten container en werkt op elke machine waarop Docker is geïnstalleerd.
Amazon Web Services (AWS) en de Cloud Development Kit
Onze klant had al meerdere diensten in een stack op AWS. We zorgden dat dit project aansloot op de rest van die omgeving. In de praktijk draaien de processen dagelijks op servers van Amazon, die onze klant huurt.
Het voordeel van de Cloud Development Kit is dat de volledige infrastructuur als code kan worden vastgelegd en via de commandoregel uitgerold. De belangrijkste onderdelen zijn Buckets, Lambda-functies, Elastic Container Service en Batch. Daarmee kunnen we Docker-containers uitrollen en flexibel inspelen op het aantal te verwerken documenten door meer of minder servers toe te wijzen.
AWS biedt ook een tool om grote datasets efficiënt door mensen te laten labelen. Die was essentieel om het neurale netwerk op de klantdata te trainen. De tool verdeelt het labelwerk over verschillende mensen, die het juiste label aan elke afbeelding toekennen.
Conclusie
In de uiteindelijke versie kon de klant de verwerking van 47% van alle documenten die de pipeline binnenkwamen automatiseren na de informatie-extractie. Dat bespaarde de klant ongetwijfeld veel tijd en kosten.
Geschatte besparing door informatie-extractie
Onze klant ontvangt gemiddeld 100 documenten per dag. Handmatige verwerking kost 75 seconden per document. De klant schat die kosten op ongeveer 26.000 € per jaar. Gezien de prijzen van Amazon-servers zouden de kosten van onze installatie minder dan 100 € per jaar moeten bedragen, een verwaarloosbaar bedrag. Omdat we ~50% van de documenten automatiseren, bedraagt de jaarlijkse besparing ~13.000 €.
Een ander voordeel is de modulaire architectuur: die kan tegen lagere kosten worden uitgebreid naar andere documenttypes van de klant waaruit informatie moet worden gehaald.
Beperkingen en mogelijke verbeteringen
De pipeline werkt als het document een geschikt sjabloon gebruikt, de pagina's in de juiste volgorde staan en de informatie correct in de bestemde vakken is ingevuld.
Een ander risico bij zulke machinelearningprocessen is dat data veranderen, ook wel dataset shift genoemd. Als de sjablonen veranderen of de kwaliteit van de pdf-scans daalt, kan de dekking afnemen. Dagelijkse prestatierapportering is nodig om betekenisvolle verschillen in de resultaten vast te stellen.
De dekking kan worden verbeterd door duidelijkere invulinstructies in het document op te nemen en nog slechts één goed sjabloon te gebruiken.
Binnen de huidige architectuur kunnen twee rechtstreekse verbeteringen betere resultaten opleveren: betere automatische vakdetectie, nu slechts 75% maar mogelijk bijna 100%, en automatisch herschikken van pagina's die in de verkeerde volgorde staan.
Voor een aanzienlijke ROI zou de architectuur idealiter worden uitgebreid naar alle documenten met informatievakken die nog handmatig worden verwerkt.