Datenverarbeitungszentrale Datenverarbeitungszentrale dvz@fh-muenster.de www.fh-muenster.de/dvz Info zum Junk-Mail-Filter in Thunderbird: Der Grossteil der Benutzer verwendet zusätzlich zum zentralen Mail-Filter der DVZ auch den im Mail-Client Thunderbird enthaltenen Filter. Dabei kommt es immer wieder zu der Situation, dass reguläre Mail in den Papierkorb oder in den Junk-Ordner verschoben wird. Dieses Papier erläutert die Hintergründe zum SPAM-Filter in Thunderbird. Grundgedanke Der Junk-Filter beruht auf einem Verfahren, das naiver Bayesscher Filter genannt wird. Das Verfahren zählt die Worthäufigkeiten in den Mails und errechnet daraus eine Wahrscheinlichkeit, die widerspiegelt, ob eine Mail Junk ist oder nicht. Dabei muss der Filter am Anfang trainiert werden, lernt aber dann auf Wunsch stetig dazu. Es werden drei Arten von Mails unterschieden: a) reguläre Mail b) Junk-Mail c) nicht klassifizierte Mail Der Benutzer kann anhand des "Feuer-Symbols" in der Mail-Liste erkennen, ob eine Mail als Junk eingeordnet wurde (siehe unten). Ein Punkt an dieser Stelle bedeutet, dass die Mail regulär ist ODER dass sie unklassifiziert ist. Folgendes ist dabei der Fall: Für einen Mail-Typus, der nur WENIG oder GAR NICHT explizit (also manuell) als "KEIN-Junk" klassifiziert wurde, aber vielleicht das eine oder andere Mal als Junk, kann die errechnete Junk-Wahrscheinlichkeit unter Umständen hoch werden. Ab Wahrscheinlichkeit 0.9 stuft Thunderbird eine Mail als Junk ein. Hier an der Fachhochschule haben interne Mails zum Beispiel oft bestimmte Worte am Ende der Mail. Zum Beispiel University, applied, Corrensstr usw. Wenn diese Worte nicht oft genug in regulärer Mail vorkommen und auch trainiert werden, so kann es zur Fehlklassifikation kommen. Abhilfe: a) Mehr Mails manuell als "Kein Junk"/ Junk klassifizieren, so dass die Worthäufigkeitsstatistik aktualisiert wird und die errechneten Wahrscheinlichkeiten realistischer werden. b) Client von Grund auf neu trainieren.
How-To Der Benutzer hat nur relativ wenige Möglichkeiten den SPAM/Junk-Filter zu beeinflussen. 1.) Gezieltes manuelles Zusatztraining 2.) Alternativ kann der Filter auch von Grund auf neu trainiert werden. Zu unterscheiden sind aber die automatische Klassifikation einerseits und Trainieren/Lernen andererseits. Autom. Klassifikation von Mails erfolgt in folgenden Situationen: a) Neue Mail kommt herein b) Ungelesene Mail wird autom. klassifiziert, wenn der enthaltende Ordner geöffnet wird c) Punkt Filter Anwenden wird für einen Ordner gewählt. Autom. Klassifizierung erfolgt nicht: a) Alte Mail b) Der Absender steht auf der White List und ist somit vertrauenswürdig. c) SPAM/Junk-Ordner wird geöffnet d) Papierkorb wird geöffnet Die autom. Klassifikation entscheidet auch darüber, ob eine Mail verschoben wird (Junk-Ordner, Papierkorb). Training: Lernen erfolgt grundsätzlich nur, wenn der Benutzer Mails MANUELL klassifiziert. Es gibt keinen Lernautomatismus! 1) Eine einzelne Nachricht wird zum Beispiel durch den Button in der Symbolleiste als Junk/Kein Junk klassifiziert, 2) Es können auch mehrere Mails ausgewählt werden und dann im Kontextmenu Markieren -> Junk manuell als Junk klassifiziert werden. Dies ist gut zum Nachbessern der Trainingsdaten geeignet. Nochmals: die Option Junk-Filter anwenden ist NICHT trainingswirksam. 1) Um ein schon bestehendes Training weiterzuführen, markiert man in den Postfächern eine gewisse Menge MIT SICHERHEIT REGULÄRER Mails und setzt den Status manuell auf Kein-Junk. Ebenso markiert man in den Postfächern eine gewisse Menge echter! Junk-Mail und setzt deren Status auf Junk. Je mehr Mails auf diese Weise behandelt werden, desto besser sollte der Filter werden, weil schon bestehende Fehlklassifikationen weniger ins Gewicht fallen. Bei diesen Operationen wird in der Regel NICHTS verschoben. Dies geschieht erst bei der Anwendung des Filters. 2)Um von Grund auf neu zu trainieren wählt man den Dialog: Extras->Einstellungen->Datenschutz Und darin: Trainingsdaten löschen. Anschließend kann man wie unter 1) Verfahren. Eine gewisse Menge meint in diesem Fall 30-50 Mails (Angaben der Entwickler) Ggf. kann man - zum Zwecke der korrekten Einordnung der Mails in Ordner - dann noch einmal den Junk-Filter auf die verwendeten Ordner anwenden.
Welche relevanten Einstellungen gibt es? Unter Extras->Konten gibt es für jedes Konto die folgenden Einstellungen:
Extras->Einstellungen->Datenschutz
Wortstatistik und nicht klassifizierte Mail. Um genau sichtbar zu machen, wie Mail klassifiziert wurde, kann man das Add-on "mnenhy" installieren (http://mnenhy.mozdev.org/). Man sieht dann an einem Fragezeichen, welche Mail noch unklassifiziert ist: Außerdem kann man durch das Thunderbird Add-Onn Mnenhi die Statistik für die einzelnen Worte einsehen. (Menupunkt Extras ). Im Beispiel unten hat das Wort Chance eine besonders hohe Junk-Wahrscheinlichkeit, was mir auch plausibel zu sein scheint: Installation mnenhi -Add-on: Datei im File-System ablegen. Extras->Add-ons->Installieren Thunderbird 2 mal durchstarten.
- Hintergrund - Funktionsweise des Filters Funktionsweise des Filters (nach Graham www.paulgraham.com/spam.html ): Zunächst werden die Mails in positive und negative Mails aufgeteilt. Es wird der gesamte Text untersucht, also inklusive Headers und HTML-Tags. Es werden alphanumerische Zeichen, Striche, Apostrophe, Währungssymbole untersucht. Alles andere gilt als Trennzeichen. HTML-Kommentare und auschließlich aus Ziffern bestehende Teile werden ignoriert. Jedes Auftreten eines Wortes wird gezählt (Groß und Klein sind identisch). Es entstehen zwei Tabellen. Eine Positivliste für Worte die in Nicht-Junk-Mail auftreten und eine Negativliste für Worte die in Junk-Mail auftreten. Jede Tabelle bildet Worte auf ihre absolute Häufigkeit ab. Nun wird entsprechend des folgenden Ausdrucks eine dritte Tabelle berechnet, die für jedes Wort die Wahrscheinlichkeit angibt, dass eine Mail, die es enthält Junk ist. Formal stellt sich die Sache dar wie folgt: g = count( wort, positivliste) // Wie oft tritt Wort in allen manuell klassifizierten regulären Mails auf? b = count( wort, negativliste) // Wie oft tritt Wort in allen manuell klassifizierten Junk-Mails auf? p = g ngood b nbad + b nbad p: Junk-Wahrscheinlichkeit eines Wortes ngood: Anzahl der als regulär klassifizierten Mails. nbad: Anzahl der als Junk klassifizierten Mail anders gesagt: relative Häufigkeit des Wortes in Junk-Mails p:= ------------------------------------------------------------- relative Häufigkeit des Wortes in allen manuell klassifizierten Mails noch anders gesagt: p = Junk-Anteil am gesamten Auftreten des Wortes z.b. p=0.3 30 Prozent des Auftretens dieses Wortes deuten auf Junk (In der Praxis werden obere und untere Schranken benutzt. Siehe Original) Mit diesem Plug-In kann man auch die unklassifizierte Mail erkennen. http://mnenhy.mozdev.org/de/index.html
Der Originalalgorithmus von Paul Graham ist folgender: (Graham arbeitete mit der Sprache LISP) (let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max.01 (min.99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad))))))))) Es werden nur Worte betrachtet, die mehr als 5 mal Auftreten. Wenn eine neue Mail hereinkommt, werden die 15 interessantesten Worte benutzt, um die Gesamtwahrscheinlichkeit zu berechnen, dass es sich um Junk handelt. Interessant sind die 15 Worte, deren Wahrscheinlichkeit am weitesten von 0.5 entfernt ist, also quasi die extremsten Worte. Die Wahrscheinlichkeit für eine Mail, Junk zu sein, wird dann wie folgt berechnet: Junk -Wahrscheinlichkeit J: J = 15 i= 1 p i 15 + p i i= 1 15 i= 1 (1 p ) i In J Prozent von 100 Fällen tritt die Wortkombination auf In Lisp (original Paul Graham): (let ((prod (apply #'* probs))) (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs))))) Worte, die neu sind, bekommen Wahrscheinlichkeit 0.4 zugewiesen. (Erfahrungswert) Mail, für die sich eine eine Wahrscheinlichkeit J von mehr als 0.9 ergibt, wird als Junk klassifiziert (Erfahrungswert)