GoerlitzFilter – Forschungsprojekt an der HS

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:

LRT = \frac{\prod \#\{WortA\ in\ GR\}}{\prod \#\{WortA\ in\ GR_{NICHT}\}}

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.

TextanalyseUI
TextanalyseUI

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.

Classifier UI
Classifier UI

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.

Relevante Wörter
Relevante Wörter

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.

Confusion Matrix
Confusion Matrix

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

Marlene Knoche Verfasst von:

Informatikerin mit Hang zur Kunst. - Theaterbegeistert, mag Katzen und Kaffee.

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload CAPTCHA.