Seminar WS 2006/07
AI Tools

Michael Kipp     Alassane Ndiaye    Dominik Heckmann    Michael Feld


Zurück


  Aufgabe: SPAM-Filter mit WEKA

Ziel dieser praktischen Übung aus dem Teilbereich WEKA und Machine Learning ist der Entwurf einer Java-Applikation, welche die WEKA-Bibliothek verwendet, um eMail-Nachrichten in SPAM und kein SPAM zu klassifizieren.

 

Vorgehensweise

  1. Erstelle ein Anwendungsgerüst in Java. Die Anwendung soll eMail-Nachrichten aus einem gegebenen Ordner einlesen und parsen können (jede Textdatei stellt eine eMail dar). Es genügt ein rudimentäres Parsing (Trennung in Kopfdaten und Inhalt). Die Anwendung kann entweder grafisch oder als Konsolen-Version implementiert werden. Ein Beispiel für eine GUI-Variante könnte folgendermaßen aussehen:



     

  2. Für jede eMail-Nachricht kann der Benutzer optional angeben, ob es sich um SPAM handelt oder nicht (HAM). Diese Kennzeichnung als SPAM/HAM sollte möglichst für den Benutzer sichtbar sein und abgespeichert werden (= Datei trainfile), so dass sie nach dem Neustart der Anwendung noch verfügbar ist.
     
  3. Füge der Anwendung einen WEKA-Klassifizierer hinzu. Dieser soll beim Beenden persistent in einer Datei classifierfile gespeichert werden (siehe Serialisierung in Java). Wenn noch keine solche Datei existiert (d.h. beim ersten Start), werden alle eMails aus dem trainfile aus (2) zum Erstellen des initialen Modells verwendet. Das Modell soll dann inkrementell trainiert werden, wenn der Benutzer neue Nachrichten markiert. Überlegen Sie sich dazu geeignete Merkmale, die auf dem Wortvorkommen basieren.
     
  4. Richte es so ein, dass die Anwendung nach jedem Start alle Nachrichten, die noch nicht vom Benutzer markiert wurden, mit einem Markierungsvorschlag (bzw. einer temporären Markierung) als SPAM oder HAM versieht (oder SPAM in einen Junk-Ordner verschiebt o.ä.). Dazu soll der in (3) trainierte Klassifizierer verwendet werden. Im gleichen Schritt soll die Liste der auf diese Weise markierten eMails in eine Datei evalfile exportiert werden, und zwar eine Zeile pro eMail mit dem Format

    <Dateiname> <Klasse>

    z.B.

    email-1.txt SPAM
    email-2.txt HAM
     
  5. Evaluiere 5 verschiedene "einfache" Klassifizierungsverfahren, z.B. k-Nearest-Neighbour, Naive Bayes, Entscheidungsbaum, Neural Network, Support Vector Machine. Verwende hierzu die in WEKA eingebaute 10-fache Cross Evaluation für dein Modell (aus dem Code heraus). Stelle dabei sicher, dass du mit dem gleichen trainfile arbeitest.
     
  6. Entwirf und evaluiere einen eigenen Meta-Klassifizierer, welcher von WEKA's classifier abgeleitet ist. Dieser könnte z.B. über mehrere Standard-Klassifizierungsalgorithmen aus (5) ein Majority Voting durchführen.

 

Abgabe

Abzugeben sind der Code zur Applikation, die Ergebnisse aus (5) und (6) als Ausgabe der WEKA Evaluierung sowie euer classifierfile des besten Klassifizierers. Bei der Vorstellung der Ergebnisse werdet ihr einige ausgewählte eMails erhalten, auf denen die beiden besten Klassifizierer dann gegeneinander antreten können. Zur Überprüfung der Ergebnisse ist es wichtig, dass euer evalfile das korrekte Format besitzt (siehe oben). Für die Bewertung ist die Abgabe relevant, nicht das Ergebnis der Competition.

Abgabetermin: 8.2.07
Präsentation: 15.2.07

 

Hinweise / Updates

  • Statt WEKA kann auch YALE verwendet werden.
  • Optional: Um den Klassifizierer für die Competition noch zu verbessern könnt ihr auch erweiterte Merkmale verwenden, die nicht auf Wortvorkommen basieren.
  • Binäre Daten / Anlagen werden in den Testdaten nicht enthalten sein, HTML möglicherweise schon.
  • Die Testdaten werden in Englisch sein.