CiAgICA8IS0tIExpbmtlZEluIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIF9saW5rZWRpbl9wYXJ0bmVyX2lkID0gIjEyMzUwNzMiOwogICAgICAgIHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyA9IHdpbmRvdy5fbGlua2VkaW5fZGF0YV9wYXJ0bmVyX2lkcyB8fCBbXTsKICAgICAgICB3aW5kb3cuX2xpbmtlZGluX2RhdGFfcGFydG5lcl9pZHMucHVzaChfbGlua2VkaW5fcGFydG5lcl9pZCk7CiAgICA8L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgKGZ1bmN0aW9uKCl7dmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07CiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIGIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiO2IuYXN5bmMgPSB0cnVlOwogICAgICAgICAgICBiLnNyYyA9ICJodHRwczovL3NuYXAubGljZG4uY29tL2xpLmxtcy1hbmFseXRpY3MvaW5zaWdodC5taW4uanMiOwogICAgICAgICAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsIHMpO30pKCk7CiAgICA8L3NjcmlwdD4KICAgIDxub3NjcmlwdD4KICAgICAgICA8aW1nIGhlaWdodD0iMSIgd2lkdGg9IjEiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhbHQ9IiIgc3JjPSJodHRwczovL3B4LmFkcy5saW5rZWRpbi5jb20vY29sbGVjdC8/cGlkPTEyMzUwNzMmZm10PWdpZiIgLz4KICAgIDwvbm9zY3JpcHQ+CiAgICA8IS0tIEVuZCBMaW5rZWRJbiAtLT4KICAgIA==
Generic filters
Exact matches only
Search in title
Search in excerpt
Search in content

Text Mining: Das Wichtigste in Kürze


Auswertungen gehen flott von der Hand, wenn Daten bereits strukturiert in einer leicht verwertbaren Form wie bspw. einer Tabelle vorliegen. Häufig hat man es aber mit schwieriger nutzbaren Quellen zu tun: Wertvolle Informationen sind in unstrukturierten Darstellungen wie etwa Texten, Bildern oder Videos versteckt. Schauen wir uns heute doch einmal geeignete Methoden an, die bei Texten funktionieren!

Goldenes Jubiläum bei “Bissantz forscht”: Sie lesen gerade den 50. Beitrag der seit Februar 2013 regelmäßig im Monatsrhythmus publizierten Blogreihe. Was liegt näher als eine Analyse der bisher erschienenen 49 Artikel?

49-mal Bissantz forscht
49-mal Bissantz forscht

Um relevante Informationen aus den 49 Beiträgen extrahieren zu können, müssen sie in eine besser zugängliche Form gebracht werden. Hier versuchen wir es mit einem Ansatz, der Texte als “Bag of Words” betrachtet. Dies bedeutet, dass für jeden Text festgehalten wird, welche Wörter mit welcher Häufigkeit vorkommen. Die Reihenfolge der Wörter im Text spielt dabei aber keine Rolle!

In unserem Falle haben wir aus jedem Blogbeitrag zunächst einmal den reinen Blogtext extrahiert. Die manuell erstellten Tags, die Sie unterhalb eines Beitrags finden, wurden ignoriert und Bilder und die in ihnen enthaltenen Texte sind in diesem vereinfachten Prozess verloren gegangen.

Mittels eines Tokenizers werden nun die einzelnen Wörter eines Textes extrahiert, wobei die Leerzeichen zwischen den Wörtern hilfreiche Dienste leisten. Der verwendete Algorithmus muss darüberhinaus Trennzeichen in Wörtern erkennen und Satzzeichen wie Punkte oder Ausrufezeichen am Ende eines Satzes von angrenzenden Wörtern abtrennen können. Apostrophe, im Text vorkommende Zahlen mit Dezimalpunkt und Klammern sind weitere störende Elemente, die angemessen behandelt werden müssen.

Ist dieser Prozess vollendet, werden stur Wörter gezählt und in einer Matrix wird dann festgehalten, welche Wörter wie häufig in den Texten vorkommen. Die folgende Grafik zeigt einen Ausschnitt aus dieser Tabelle:

Ausschnitt der Worthäufigkeiten der letzten drei Blogbeiträge
Ausschnitt der Worthäufigkeiten der letzten drei Blogbeiträge

Insgesamt gibt es weit über 6000 verschiedene verwendete eindeutige Wörter in den 49 Beiträgen. Wie man in der Tabelle bereits sieht, werden bei dieser Zählweise Wörter mit identischem Stamm (wie etwa genutzt und genutzte, bzw. geographische und geographischen) als eigenständige Wörter gewertet.

Welche Wörter kommen im Korpus, also der Menge aller 49 Texte am häufigsten vor? Werfen wir einen Blick auf die Top 10 der meistverwendeten Wörter:

Rangfolge der 10 häufigsten Wörter
Rangfolge der 10 häufigsten Wörter

Wir stellen fest, dass in dieser Liste eigentlich nur wenig aussagekräftige Wörter auftauchen.

Gut geeignet ist auch eine Visualisierung mittels einer Wordcloud, bei der große Häufigkeiten durch große Fontgrößen betont werden, natürlich mit einer unveränderten Schlussfolgerung:

Wordcloud der häufigen Wörter
Wordcloud der häufigen Wörter

Unter den 50 häufigsten Wörtern deuten hier nur die zwei Wörter Wahrscheinlichkeit und Anzahl auf einen Forschungsblog hin. Wenig aussagekräftige Wörter (die sogenannten Stoppwörter bzw. stop words) – die genaue Definition hängt sicherlich auch von der Domäne ab, aus der die Texte stammen – sollten deshalb ausgefiltert werden. Nun ergibt sich das folgende Bild:

Wordcloud der häufigen Wörter ohne Stoppwörter
Wordcloud der häufigen Wörter ohne Stoppwörter

Falls es uns weiterhin stört, dass immer noch Wörter wie etwa, jedoch oder mehr erscheinen, könnten wir die Stoppwörterliste erweitern oder uns alternativ gleich auf eine Fachwörterliste beschränken (die wir aber erst einmal erstellen müssten!).

In der Wordcloud ist erkennbar, dass sich Wörter mit gleichem Stamm – wie etwa Wahrscheinlichkeit und Wahrscheinlichkeiten – die Aufmerksamkeit teilen müssen. Deshalb wird häufig das Stemming eingesetzt, bei dem nur die Stammform in die Auswertung eingeht. Der Ausschnitt aus der Tabelle der Worthäufigkeiten sähe nach dem Stemming folgendermaßen aus:

Ausschnitt der Worthäufigkeiten der letzten drei Blogbeiträge mit Stemming
Ausschnitt der Worthäufigkeiten der letzten drei Blogbeiträge mit Stemming

Hier wurden beispielsweise geographische und geographischen und möglicherweise weitere, hier nicht sichtbare Wörter aus den restlichen 46 Blogbeiträgen dem Stamm geograph untergeordnet. Eine weitere Stufe der Abstraktion wäre der Einsatz eines Thesaurus zur Darstellung sinnverwandter Wörter unter einem einzigen repräsentierenden Synonym.

Wir verzichten an dieser Stelle auf Stemming und weitere Verarbeitungen und nehmen die Wörter unmittelbar so, wie sie im Text vorkommen, hier hauptsächlich aus Gründen des besseren Verständnisses der Begriffe in der Wordcloud.

Richtig spannend wird es dann, wenn die Besonderheiten von Texten hervorgehoben werden sollen. Hiermit könnten beispielsweise mehrere Korpora gegeneinander abgegrenzt werden, indem das Typische der jeweiligen Texte eines Korpus herausgearbeitet wird (z. B. Goethe gegen Schiller, positive gegen negative Kundenstimmen).

Da wir hier nur einen Korpus vorliegen haben, widmen wir uns der Frage, welche Wörter eines Beitrags besondere Erwähnung verdienen. Wir versuchen somit, einen Text gegen die restlichen Dokumente des Korpus abzugrenzen.

Das hierzu verwendete Tf-idf-Maß zur Messung der Relevanz eines Wortes t innerhalb eines Textes d

Tf-idf-Maß
Tf-idf-Maß

besteht aus zwei Faktoren. Der erste Faktor (tf wie term frequency) hängt nur vom betrachteten Dokument d ab und zählt einfach die Vorkommen eines Wortes t in diesem Dokument. In der hier gezeigten normierten Version wird dieser Wert allerdings noch durch die Anzahl des häufigsten Wortes dieses Dokuments dividiert, um zu vermeiden, dass die Relevanz eines Wortes allein durch ständige Wiederholung über jede Grenze hinweg gesteigert werden kann.

Je häufiger ein Wort in einem Text vorkommt, desto relevanter wird es prinzipiell. Ist es aber bereits das häufigste Wort des Textes, so nimmt der erste Faktor immer den Wert 1 an, egal wie viele zusätzliche Erwähnungen noch zu beobachten sind.

Der zweite Faktor des Tf-idf-Maßes (idf wie inverse document frequency) schaut, in wie vielen Dokumenten dieses Wort insgesamt auftritt und nutzt diese Anzahl als Teiler der Gesamtanzahl N von Texten. Je mehr Texte dieses Wort enthalten, desto größer ist der Nenner bei konstantem Zähler und so geringer wird deshalb die Relevanz für das betrachtete Dokument innerhalb des Korpus. Im Extremfall enthält jeder Text dieses Wort – der Quotient ist dann 1 und der Logarithmus sorgt dafür, dass die Relevanz innerhalb des Korpus verschwindet, unabhängig von der Anzahl der Erwähnungen im betrachteten Text.

Wenn somit viele Blogbeiträge das Wort Wahrscheinlichkeit enthalten, mag dieses Wort relevant sein, um den Forschungsblog gegen den “Bissantz denkt nach”-Blog abzugrenzen; beschränkt auf den Forschungsblog ist die Relevanz für die Unterscheidung der Beiträge deutlich geringer.

Wie kann man diesen Tf-idf-Wert nun ausnutzen? Grundsätzlich kann ein Wort als Suchbegriff verwendet werden und das Dokument mit dem höchsten Wert kann dann als relevante Lektüre vorgeschlagen werden. Intern kann der Suchbegriff in den Stamm verwandelt werden, um auch ähnlich geschriebene Begriffe zu erfassen.

Spannender ist jedoch die umgekehrte Fragestellung, welche Wörter in genau diesem Dokument erwähnenswert sind. Die Wörter mit den höchsten Tf-idf-Werten könnten in einem Auto-tagging-Prozess übernommen werden.

Kann das manuelle Tagging ab jetzt entfallen? Schauen wir doch einmal auf die Wörter mit den höchsten Tf-idf-Werten im letzten Blogbeitrag Überbuchen versuchen:


Relevante Wörter im Beitrag “Überbuchen versuchen”

Falls Sie den Blog-Beitrag gelesen haben (falls nicht, bitte nachholen!), sollten Sie diesen Ergebnissen durchaus zustimmen. Starten wir einen zweiten Versuch mit Bestens in Form:

Relevante Wörter im Beitrag Bestens in Form
Relevante Wörter im Beitrag “Bestens in Form”

Auch hier wird gut herausgearbeitet, dass sich der zugehörige Blogbeitrag über die neue Geo-Analyse auslässt. Die gleichzeitige Erwähnung von karten und karte hätte mit Stemming vermieden werden können, aber dann stünde hier in der Grafik der unschöne Stamm kart.

Anfangs hatten wir eine Text-Wort-Matrix mit den absoluten Häufigkeiten errechnet. Wird die reine Häufigkeit durch das Td-idf-Maß ersetzt, lassen sich geschickt Ähnlichkeiten zwischen den Texten innerhalb des Korpus von 49 Blogbeiträgen ermitteln. Hierbei wird jeder Text als Vektor mit über 6000 Einträgen der jeweiligen Td-idf-Maße dargestellt und unter Verwendung des Cosinus-Abstands kann die textliche Ähnlichkeit zweier Blog-Beiträge errechnet werden.

Diese abgeleiteten Ähnlichkeiten könnten zur Generierung von Links auf weitere relevante Texte aufgrund des gerade betrachteten Blogbeitrags genutzt werden.

Wir schauen nun auf eine ähnliche Problemstellung und möchten alle 49 Texte clustern.

Natürlich versuchen wir, mit jedem Blogbeitrag Neues vorzustellen, aber wo sieht der Algorithmus textliche Nähen in den bereits veröffentlichten Beiträgen? Werfen wir dazu einen Blick auf das erzeugte Dendrogramm des Clusterverfahrens:

Ergebnis der Clusteranalyse
Ergebnis der Clusteranalyse

Je ähnlicher sich Texte in Bezug auf die relevanten Begriffe sind, desto eher (von unten gesehen) werden die Zweige zusammengeführt. Als ähnlichstes Paar sieht der Clusteralgorithmus die Beiträge aus Mai 2013 und November 2013. Beide Blog-Beiträge behandeln Facetten von Empfehlungssystemen.

Ein weiteres ähnliches Paar ist durch Oktober 2014 und Mai 2016 gegeben. Obwohl hier eigentlich verschiedene Themen behandelt werden, sind bpsw. die Normalverteilungen häufig genannter und gleichzeitig in anderen Blogs eher seltener auftauchender Bestandteil.

Der vorgestellte “Bag-of-Words”-Ansatz in Kombination mit dem Tf-idf-Maß liefert somit bereits durchaus nützliche Erkenntnisse. Es gibt natürlich jede Menge weiterer Ansätze, die auch den Zusammenhang zwischen den Wörtern bis zur Sinn gebenden Semantik betrachten – es verbleibt somit auch zukünftig genügend Material aus dem Gebiet des Text Minings, das eine ausführlichere Behandlung verdient.