Last updated on 7. Januar 2014
Für das Forschungsprojekt im 5. Semester hat sich meine Gruppe darauf verständigt, einen Bayes-Classifier zu programmieren, der anhand eines Testdatensatzes bestimmt, ob ein Text bzw. der Text einer Webseite zum gesuchten Thema gehört oder nicht. Wir haben dies am Beispiel Görlitz betrachtet.
Grundlagen und Vorarbeiten
Bayes-Classifier
Die Berechnung der Wahrscheinlichkeit, ob ein Dokument von Görlitz handelt oder nicht, ergibt sich mit Hilfe des Bayes-Classifiers inklusive der Zuhilfenahme des Likelihood Ratio Tests.
Hieraus ergibt sich die Formel:
Wir müssen also das Produkt der Wahrscheinlichkeiten, aller Wörter jeweils für ihr Vorkommen in Görlitz-Dokumenten und ihr Vorkommen in Nicht-Görlitz-Dokumenten bilden. Dadurch haben wir jeweils ein Produkt für die positive Wahrscheinlichkeit und eines für die negative. Diese beiden werden geteilt und ergeben dann einen Wert kleiner, gleich oder größer 1.
Festgelegt sind dabei folgende Bedingungen für dieses Ergebnis:
- Ist der Wert kleiner oder gleich 1, so ist das Dokument nicht über Görlitz.
- Ist der Wert größer 1, so ist das Dokument über Görlitz.
Testdatensatz und dessen Analyse
Die Vorarbeiten für den Classifier bestanden zunächst darin einen geeigneten Testdatensatz zu kreieren. Der von uns verwendete Datensatz umfasst alle darin vorkommenden Worte mitsamt ihrer Anzahl von jeweils 50 Webseiten über Görlitz und 50 Webseiten die nicht über Görlitz sind, aber einem ähnlichen Themengebiet (Städte, Verreisen, Hotels, etc.) entsprechen um einen relevanten Datensatz ermitteln zu können.
Neben dem Vorhandensein des Testdatensatzes spielte es natürlich auch eine wichtige Rolle, ob es überhaupt genügend Worte gibt, welche nur oder wesentlich häufiger in Dokumenten über Görlitz vorkommen. Betrachtet man die gesammelten Daten fällt auf, dass sich Worte wie „der“, „und“ oder „ein“ in beiden Datensätzen ähnlich anhäufen. Für die spätere Wahrscheinlichkeitsberechnung spielen sie somit also keine Ausschlaggebende Rolle. Jedoch findet man auch Wörter, die spezifisch für Görlitz sind und in solchen Dokumenten folglich auch häufiger vorkommen. Spitzenreiter ist da, wie man womöglich auch vermuten würde, „Görlitz“ selbst. Um aber eine qualitativ höherwertige Aussage treffen zu können, ob ein Text nun von Görlitz handelt oder nicht, reicht dieses eine Schlagwort allerdings nicht aus. Daher ist man auf weitere signifikante Worte angewiesen, sie sich nach näherer Betrachtung des Datensatzes auch erkennen lassen. Sie sind zumeist mit Örtlichkeiten in Görlitz verbunden und ermöglichen ein genaueres Ergebnis des Classifiers. Der gesammelte Testdatensatz ist folglich geeignet und kann nun weiterverwendet werden.
Implementierung
Erzeugung des Testdatensatzes
Damit man den nicht jeden Text selbst lesen muss und eigene Strichlisten erstellt um die Worthäufigkeiten zu ermitteln, haben wir den ersten Bestandteil unserer Anwendung programmiert. Dieser Teil erzeugt eine kommaseparierte Liste mit allen Wörtern eines Textes und deren Vorkommen. Gespeichert wird diese Liste in einer Textdatei, welche auch wieder von dem Programm eingelesen und erweitert werden kann. Das geschieht über eine einfache Swing-GUI.
Man wählt einen File aus (txt-Datei), der entweder neu erzeugt wird oder einen bereits vorhandenen mit einem Datensatz, der erweitert werden soll.
Überprüfen eines Textes – der eigentliche Classifier
Die oben beschriebene Berechnung musste nun noch implementiert werden. Sie ist Bestandteil des zweiten Teiles unserer Anwendung und kann ebenfalls durch eine kleine Swing-GUI bedient werden.
Man hat auch hier die Möglichkeit einen Text einzufügen. Dieser Text ist der Text, der überprüft werden soll. Zudem gibt man seine Testdatensätze an, welche für die Spezifizierung herangezogen werden sollen.
Relevante Wörter finden
Da es durchaus von Interesse ist, zu wissen, welche Wörter ausschlaggebend für eine Entscheidung sind, gibt es noch eine Komponente, welche die relevanten Wörter eines Testdatensatzes ermittelt. Dafür werden einfach die Verhältnisse für alle Wörter im positiven Testdatensatz gebildet.
Auf einen Screen-Shot GUI-Komponente möchte ich an dieser Stelle verzichten, da lediglich drei Textfelder für das Aussuchen der Dateien vorhanden sind.
Jedoch möchte ich einen Auszug der Tabelle für die relevanten Wörter geben. Es sind knapp über 10000 Wörter gespeichert worden.
Man sieht also deutlich, dass vor allem ortspezifische Daten relevant sind für die Klassifizierung.
Auswertung
Zuletzt möchte ich hier noch unsere Confusion Matrix zeigen, welche als unsere Auswertung und Bewertung für den Classifier herangezogen wurde.
Die Tabellen lesen sich wie folgt: „Görlitz“ und „Nicht Görlitz“ bezeichnen den Status der Seite, die untersucht wird. ‚TRUE‘ und ‚FALSE‘ stellen das Ergebnis des Classiers dar. Somit ergibt sich für diese Tabelle, dass TRUE in Kombination mit Görlitz einen
true positive Wert darstellt, Nicht Görlitz und TRUE einen true negative Wert, FALSE und Görlitz ergeben false Negative und FALSE und Nicht Görlitz ergeben zusammen true Negative.
Die Werte in der Matrix zeigen, dass der Classifier schon recht gut funktioniert, jedoch auch Optimierungspotential besteht. Dafür könnte der Datensatz erweitert werden oder auch gefiltert werden, ob es sich bei der Webseite um eine Person, eine Firma oder die Stadt selbst handelt. Beim Testen des Classifiers sind gerade hier Defizite aufgetreten, da Personen fälschlicherweise als Pro-Görlitz eingeordnet wurden.
Sonstige Informationen
Das Projekt ist bei SourceForge gehostet und kann hier eingesehen werden: Projektseite bei SF
Schreibe den ersten Kommentar