Text Mining – oder einfach Spaß haben

Zurück zum Blog

Künstliche Intelligenz (KI) ist nicht nur in aller Munde, sie ist cool und bringt Spaß.

Wir stecken einfach jede Menge Daten in einen geeignet konfigurierten Computer, starten die Analyse und bekommen ungeahnte Zusammenhänge in den schönsten Farben visualisiert.

„Have a lot of fun!“ lautet dann auch der Wahlspruch der Linux-Veteranen von (mittlerweile) openSUSE. Und weil Linux-Distributionen inzwischen out of the box alles mitbringen, was der KI-Fan sich wünscht, geht das auch hier voll auf.

Text Mining – gar nicht so einfach

Aber wenn das wirklich so einfach ist, warum sprechen uns immer wieder Kunden an, die „schon alles“ probiert haben, die „schon nicht mehr daran glauben“, dass ihr Problem sich lösen lässt und die uns mit ihren Fragestellungen tatsächlich regelmäßig ganz schön zum Schwitzen bringen?

Wikipedia führt auf eine Spur; ein Missverständnis, das man immer wieder erlebt und das dort so wunderschön auf den Punkt gebracht wird. Im dem sehr schönen Artikel über Text Mining steht dort unter mehreren Schritten zur Datenaufbereitung von Texten:

„Eigennamen für Personen, Orte, von Firmen, Staaten usw. müssen erkannt werden, da sie eine andere Rolle für die Konstitution der Textbedeutung haben als generische Substantive.“

Typische Fragen?

Was irritiert daran? Dazu muss man ein wenig ausholen: Der typische Anwendungsfall, mit dem wir uns bei Empolis beschäftigen, liegt darin, dass unsere Kunden eine sehr konkrete Fragestellung haben, die sich aus irgendwo verfügbaren Texten vermutlich beantworten ließe. Die Menge der Texte ist aber so groß, dass der Aufwand für die Beantwortung wirtschaftlich nicht mehr zu leisten ist.

Fiktive Beispiele/Fragestellungen:

Welche Wettbewerber haben wir, die wir noch gar nicht kennen, weil sie gerade erst gegründet wurden und erst in Listings erscheinen, wenn sie mit einer genialen neuen Idee ihren Markt längst erobert haben?

Wie entwickelt sich der Ethereum-Kurs in den nächsten 60 Minuten, weil der fragende Trader 120 Minuten bräuchte, um alle zur Prognose relevanten Informationsquellen manuell auszuwerten?

Generische Substantive?

Um solche Fragen zu beantworten, finden wir die meisten hilfreichen Informationen in Texten. Ein Start-up als neuer Wettbewerber hat vielleicht noch kein Produkt und nicht einmal den ersten Kunden, aber eine Webseite, über die das Unternehmen gefunden werden kann.

Die Kursentwicklung von Kryptowährungen ist noch so anfällig, dass einzelne Twitter-Meldungen oder Regierungserklärungen binnen Minuten zu sagenhaften Kurssprüngen führen können, die sich aus den Kurz-, Mittel- und Langfristtrends der Kurse nicht einmal hätten erahnen lassen.

Um aber die richtigen Daten zu finden und die richtigen Informationen zu gewinnen, brauchen wir gerade das, was Wikipedia als generische Substantive beiseiteschiebt.

Wenn man neue Wettbewerber sucht, muss man natürlich Eigennamen von Firmen erkennen – und das ist einfach. Sie finden zahllose Softwarebibliotheken und Modelle, die das machen und jeden Daimler, jeden Chrysler und jeden Mercedes erkennen (einige wenige differenzieren dabei auch noch zwischen Autos der Marke Mercedes und gleichnamigen Personen).

Aber wir suchen Unternehmen, die ganz neu sind und deren Namen noch niemand hundertfach in seinem Trainingskorpus gelabelt hat, damit die KI weiß, dass Medibloc oder Zigzag Namen von Unternehmen sind.

Da endet für viele Data Scientists der Spaß – für den leidenschaftlichen Text Miner fängt der Spaß genau hier an.

Spaß am Text Mining

Bleiben wir beim Beispiel Start-up: Um die generischen Substantive „Medibloc“ und „Zigzag“ auch begrifflich in Unternehmen zu verwandeln, müssen wir ein bisschen arbeiten. Über „Medibloc“ finden wir im Web beispielsweise die Information:

„Medibloc is a much-talked-about medical logistics blockchain startup that wants to create a medical record database on blockchain, uniting multiple hospitals’ records on one secure, decentralized ledger.”

Perfekt! Wenn wir gar nicht erst nach Unternehmensnamen suchen, sondern nach dem (generischen) Substantiv „startup“, finden wir eine Spur zu diesem Text – und wenn wir den Term „startup“ um die Varianten „start-up“, „start up“, „new company“ und einige weitere ergänzen, finden wir auch ähnliche Muster. Jetzt müssen noch mindestens zwei Fragen beantwortet werden:

Bezieht sich das „startup“ auch tatsächlich auf ein Unternehmen und wenn ja: Wie heißt es?

Interessiert das genannte Unternehmen im aktuellen Kontext – also: Will mein Kunde das wissen?

Der erste Teil lässt sich tatsächlich halbwegs generisch beantworten: Wir suchen nach einem Substantiv, auf das sich das bereits gefundene Substantiv „startup“ bezieht. Für solche Analysen können Dependency Parser verwendet werden, welche die Relation der einzelnen Satzbestandteile darstellen. Für den oben genannten Satz liefert beispielsweise displaCy eine wohlstrukturierte Darstellung der Zusammenhänge. Alternativ kann die selbe Analyse auch durch linguistische Regelsprachen wie Apache Ruta ausgeführt werden. Auf beiden Wegen kommen wir zum Substantiv „Medibloc“ von dem wir dann wissen, dass es ein „startup“ ist.

Auf dieselbe Weise können wir auch nach Adjektiven oder Adverben suchen, die unser „startup“ näher beschreiben. In diesem Fall finden wir die Eigenschaft „medical logistics blockchain“, die dem „startup“ zugewiesen wird und über das Verb „create“ können wir im nächsten Schritt das anvisierte Produkt („record database on blockchain“) ableiten.

Indem wir abschließend in einem kleinen Modell all die Themen beschreiben, mit denen sich ein für uns interessantes Start-up-Unternehmen beschäftigen soll, können wir die Spreu vom Weizen trennen. Also nehmen wir nochmal viele „generische Substantive“ und beschreiben damit unsere Interessensgebiete. Unsere Trader interessieren sich für „blockchain“, „ethereum“, „bitcoin“ etc., meine Kollegen aus dem Industrial-Analytics-Bereich interessieren sich für „predictive maintenance“,“ IoT“, „anticipatory maintenance“ usw., und für andere Nutzer definieren wir bei Bedarf weitere Klassen.

Dann haben wir am Ende einen generischen Mechanismus zur Erkennung von erwähnten Start-ups in Texten und für jede Domäne, die uns interessiert; ein kleines Modell, um die relevanten Domänen zu bestimmen.

Bis zu einer sehr zuverlässigen Erkennungsrate bleibt in der Regel einige Arbeit für die Sammlung möglicher Muster und die Erstellung der Analyseregeln und Modelle zu tun. Aber selbst mit sehr einfachen Mitteln lässt sich viel mehr an Informationen gewinnen als durch manuelle Suche. Und jede hilfreiche Information, die wir vorher nicht hatten, steigert den Spaßfaktor ungemein.

Funktionieren kann das aber nur, wenn wir uns sukzessive darum kümmern, den „Generischen Substantiven“ (und Adjektiven und Adverben und Präpositionen und so weiter) Bedeutung zu verleihen. Oder anders: Es gibt kein Generisches Substantiv. Es gibt Dinge, die wir wissen wollen und Dinge, die uns egal sind. Um die ersten kümmern wir uns jetzt, um die letzteren gar nicht.

Bessere Daten und Anwendungen durch Text Analytics

KI sei cool, hatten wir behauptet, und mit KI zu arbeiten, brächte Spaß. Ein wesentlicher Grund dafür ist, dass eine große Anzahl an Bibliotheken und Verfahren zur Verfügung steht, mit denen schnell gute Ergebnisse erzielt werden. Wenn unsere Daten aber noch in unstrukturierten Texten liegen – wie es allzu oft der Fall ist – dann müssen wir sie diesen Data-Analytics-Tools erst verfügbar machen. Vielen Data Scientists erscheint das so mühsam, dass sie diesen Schritt lieber überspringen, mit schlechteren Daten leben oder Use Cases mit solchen Anforderungen gar nicht erst angehen.

Besser gefallen würde mir, wenn die Data Scientists viel häufiger die Experten für Text Analytics einbeziehen würden, um gemeinsam schneller zu besseren Daten und zu besseren Anwendungen zu kommen, wenn beide gemeinsam das beitragen würden, was ihnen jeweils den größten Spaß bringt und wenn sich auf diesem Weg künftig immer mehr Text-Analytics-Anforderungen so einfach umsetzen ließen, wie das für andere Bereiche der KI schon passiert.