Poststellen großer Unternehmen müssen jedes Jahr unzählige Schriftstücke entgegennehmen, kategorisieren und anschließend an die Fachabteilungen des Unternehmens weiterleiten. Dabei wird die Post in vielen Unternehmen heutzutage zuerst eingescannt, sodass sie den Mitarbeitern schnell auf elektronischem Wege zugestellt werden kann. Das Kategorisieren der eingescannten Dokumente wird jedoch vielerorts noch manuell ausgeführt. Möchte man auch diesen Vorgang automatisieren, wird eine Software benötigt, welche die einzelnen Dokumententypen identifizieren und entsprechend zuordnen kann. Zu diesem Zweck muss eine Dokumentenklassifikation durchgeführt werden.
Bei einer Dokumentenklassifikation ordnet die Software jedes einzelne Dokument genau einer Kategorie zu, welche aus einer vorab definierten Liste von Kategorien stammen muss. In dem hier vorgestellten Fallbeispiel handelt es sich bei dem Unternehmen um eine Versicherung, deren Posteingänge aus dem Bereich Kfz-Haftpflicht beispielsweise in die folgenden Kategorien eingeteilt werden sollen:
- Schadensanzeige
- Kostenvoranschlag
- Gutachten Kfz
- Rechnung Werkstatt
- Medizinisches Gutachten (bei Personenschäden)
- Rechnung Arzt (bei Personenschäden)
- Vollmacht
- Sonstiges
- Schadensanzeige
- Kostenvoranschlag
- Gutachten Kfz
- Rechnung Werkstatt
- Medizinisches Gutachten (bei Personenschäden)
- Rechnung Arzt (bei Personenschäden)
- Vollmacht
- Sonstiges
Bei mehrseitigen Schriftstücken stellt sich zudem die Frage, ob man jede einzelne Seite als ein eigenes Dokument auffassen soll oder ob das gesamte Schriftstück ein einziges Dokument darstellt. Im Folgenden gehen wir davon aus, dass jede Seite einzeln klassifiziert werden soll. Dies ist in unserem Fallbeispiel sinnvoll, da mehrseitige Briefe z. B. einen Kostenvoranschlag und ein Gutachten Kfz enthalten können.
Supervised Learning
Damit die Software die korrekte Kategorie eines Dokuments automatisch erkennen kann, muss sie vorab durch Supervised Learning (dt.: Überwachtes Lernen) trainiert werden. Beim Supervised Learning wird eine hinreichend große Menge (>=1.000) an Dokumenten als Trainingsset ausgewählt. Jedes Trainingsdokument wird dabei gelabelt, d.h. die korrekte Kategorie wird manuell vorgegeben, sodass sie der Software bekannt ist. Nun müssen Features (dt.: Merkmale) gefunden werden, anhand derer die Software unterscheiden kann, in welche Kategorie ein Trainingsdokument fällt. Bei einer Dokumentenklassifikation kann man zwischen Text-Features und Bild-Features unterschieden.
Text-Features ergeben sich aus dem reinen Textinhalt des Dokumentes wie beispielsweise die Häufigkeit bestimmter Wörter oder das Verhältnis von Ziffern zu Buchstaben.
Bild-Features werden aus dem Layout der Seite abgeleitet, wie beispielsweise das Vorhandensein von Fotos auf einer Seite oder die Position und Größe der Textblöcke.
Text-Feature-Extraktion
Zur Extraktion von Text-Features muss im ersten Schritt eine Software zur Texterkennung (OCR für engl.: optical character recognition) eingesetzt werden. Diese extrahiert aus der zunächst nur als Bild vorliegenden Seite den eigentlichen Text und macht ihn für die Weiterverarbeitung verfügbar. Für die Texterkennung kann beispielsweise Tesseract (OpenSource, kostenlos) oder ABBY FineReader (komerziell) eingesetzt werden.
Der durch die OCR-Software gewonnene Text wird nun in verschiedenen Schritten weiter aufbereitet:
Tokenisierung:
Der fortlaufende Text wird in einzelne Wörter aufgeteilt und in eine geeignete Datenstruktur überführt.
Bereinigung (Cleaning):
Entfernen von Satzzeichen und Stoppwörtern. Dies sind Wörter mit grammatikalischen Funktionen wie z.B. Hilfsverben, Präpositionen oder Artikel, die aufgrund ihrer Häufigkeit kaum Rückschlüsse auf den Inhalt eines Dokuments zulassen und somit zur Dokumentenklassifikation ungeeignet sind.
Rechtschreibkorrektur:
Korrigieren von Rechtschreibfehlern und Fehlern, die durch fehlerhaftes OCR entstanden sind. Hierfür kann beispielsweise die freie Software Hunspell eingesetzt werden.
Lemmatisierung:
Die Wörter werden auf ihre Grundform zurückgeführt. So wird z.B. aus „gehe“, „gehst“, „ging“ etc. das Hauptwort „gehen“. Für diese Aufgabe kann die freie Programmbibliothek spaCy verwendet werden.
Im nächsten Schritt wird nun ein Wörterbuch erstellt, das alle Wörter der Trainingsdokumente nach Bereinigung, Rechtschreibkorrektur und Lemmatisierung enthält. Anschließend wird für jedes Trainingsdokument ein Vektor erstellt, der zu jedem Wort aus dem Wörterbuch einen numerischen Wert enthält. Dieser Wert sollte möglichst groß sein, falls das Wort zur Klassifikation des Dokuments geeignet ist, andernfalls sollte er möglichst nahe null sein. Auf den ersten Blick ist es naheliegend, die Häufigkeit des Wortes im Dokument anzugeben.
Jedoch ist ein solches Wort nicht zur Klassifikation geeignet, falls es auch in Dokumenten anderer Kategorien häufig auftritt. Aus diesem Grunde verwenden wir das sogenannte Tf-idf-Maß (von englisch term frequency (=Vorkommenshäufigkeit) und inverse document frequency (=inverse Dokumentenhäufigkeit)). Dieses gibt an, wie häufig ein Wort in einem Dokument relativ zu allen anderen Dokumenten vorkommt und hat einen Wert zwischen 0 und 1 (für Details zur Berechnung siehe Infobox).
Als zusätzliches Text-Feature kann für manuell vorgegebene Wörter oder Wortteile angegeben werden, ob sie in einem Dokument auftauchen oder nicht. Dem oben genannten Vektor wird dann entsprechend eine 0 oder 1 angefügt. So taucht z. B. das Wort „Rechnung“ in einer Rechnung oft nur einmal auf, jedoch ist es in unserem Fallbeispiel trotzdem für die Dokumentenklassifikation nützlich.
Bild-Feature-Extraktion
Bei der Bild-Feature-Extraktion wird ein Bild in eine Reihe von Zahlen (einen Feature-Vektor) umgewandelt, welcher die charakteristischen Eigenschaften eines Bildes möglichst gut repräsentieren soll. Gleichzeitig sollten ähnliche Bilder ähnliche Feature-Vektoren aufweisen. Hierzu werden heutzutage in der Regel Convolutional Neural Networks (CNNs) eingesetzt.
In diesem Fallbeispiel haben wir MobileNet eingesetzt. Dies ist ein CNN, welches bereits mit einer großen Bilddatenbank (ImageNet) vortrainiert wurde und daher direkt eingesetzt werden kann. Das rechenaufwändige Trainieren eines eigenen CNNs kann damit entfallen, auch wenn der Verzicht auf ein usecase-spezifisiches Training des CNNs mit leichten Performanceeinbußen verbunden ist.
Support Vector Machine zur Klassifikation
Für jedes Trainingsdokument werden die beiden Vektoren aus der Text-Feature- und der Bild-Feature-Extraktion nun zusammengeführt. Mit diesem zusammengeführten Vektor wird eine Support Vector Machine (SVM) trainiert, welche die eigentliche Dokumentenklassifikation durchführt. In diesem Fallbeispiel wird jedes Dokument (=der zusammengeführte Feature-Vektor) genau einer Kategorie zugeordnet.
Bei einer späteren Klassifikation eines neuen, unbekannten Dokuments wird dieses genau wie die Trainingsdokumente zunächst in einen Text-Feature- und Bild-Feature-Vektor umgewandelt, die beiden Vektoren zusammengeführt und dann von der Support Vector Machine einer Kategorie zugeordnet, womit das Dokument dann klassifiziert ist.
In Abbildung 1 sind die einzelnen Schritte noch einmal grafisch zusammengefasst.
Performance-Test
Um die Performance des Modells zu testen, wird eine hinreichend große Zahl an Testdokumenten benötigt, die wieder gelabelt sind, sodass die korrekte Kategorie bekannt ist. Das Verhältnis zwischen Trainings- und Testdokumenten sollte dabei etwa 80 zu 20 betragen. Anschließend werden die Testdokumente mithilfe der Software klassifiziert.
Abbildung 2 zeigt die Klassifikationsgenauigkeit in Form einer Tabelle (Confusion Matrix). Hierbei ist die von der Software bestimmte Kategorie horizontal dargestellt, während die tatsächliche Kategorie vertikal aufgelistet ist.
Die Anzahl der korrekt klassifizierten Dokumente pro Kategorie würde in der Diagonalen von links oben nach rechts unten aufgelistet. Da wir uns aber nur für die falsch klassifizierten Testdokumente interessieren, wurden die Einträge auf der Diagonalen durch Nullen ersetzt.
Fazit
Mit dem hier beschriebenen Verfahren wurde trotz eines relativ kleinen Trainingsset von ca. 1.000 Dokumenten bereits eine Performance von 86 % erreicht. Mithilfe größerer Trainingssets lässt sich die Performance dagegen weiter steigern. So kann man z.B. anstelle der SVM auch ein Recurrent Neural Network (RNN) trainieren, welches für kleine Trainingssets zwar ungeeignet ist, jedoch bei hinreichend großen Trainingssets eine deutliche Steigerung der Performance gegenüber einer SVM bewirken kann. Die automatische Dokumentenklassifikation ist somit eine kosteneffiziente Alternative zur manuellen Sortierung der Posteingänge eines Unternehmens.