Comments working again

I finally did it and wrote the spam filter that I had promised a while back. It was less work than I thought, actually. Anyway, you can now write comments again.

The filter is a so-called Naive Bayes filter. It calculates the probability that a comment is spam, based on how often the words in the comment were observed in spam comments and in normal comments. The implementation generally follows [the english Wikipedia article about this](http://en.wikipedia.org/wiki/Bayesian_spam_filtering), without any additional heuristics for rare words and the like.

If anyone cares, I can post the code for you all to read. It isn’t that much. The most significant single point that I noticed was that the spam filter might go crazy if it finds a word that was never seen either as spam or as not-spam, which is a so-called zero frequency problem. To solve that, whenever I add a new word, I first set both sightings as spam and sightings as not-spam to one (and then one more for whatever I saw it as). This makes the results slightly less accurate, but it remains good enough to work.

Currently the filter has three levels. If the probability that a post is spam is higher than 95%, then the comment isn’t even written to the database, but rejected immediately. A comment that has a chance of more than 70% is saved, but remains hidden until I’ve decided whether it is spam or not. Every time I make such a decision, the spam filter gets trained a little bit to become more accurate. Of course, I may have to change these thresholds in the future.

Written on July 3rd, 2010 at 11:36 pm

5 Comments

  1. Posted 4 July 2010

    Septdeneuf

    Ist denn ein Kommentar, in dem das Wort SPAM vorkommt selbst SPAM? Keine ahnung, warum mein iphone SPAM immer grosschreibt, aber egal. Schöne grüße aus ny, falls dieser Eintrag seinen weg in deine Datenbank findet.

  2. Posted 4 July 2010

    Torsten Kammer (admin)

    Nein, der Spam-Filter schaut nur, welche Worte viel in Spam-Nachrichten vorkommen. SPAM großgeschrieben tut das nie. Das einzige Wort in deinem Artikel, dass er als Spam bewertet hat ist das wort "in", was etwa doppelt so oft in Spam vorkommt wie in normalen Nachrichten und was du auch noch zweimal drin hast. Trotzdem ist die gesamte Spam-Wahrscheinlichkeit für deinen Kommentar nur 5.4503091189246*10^-27. :D

  3. Posted 5 July 2010

    Björn

    Soso, die Steffi ist in den USA.

    Dort gibt es laut E-Mails immer günstiges VIAGRA, STELLENANGEBOTE, FLAGGENMÄSTE, CHEF-SESSEL oder auch JOBS.
    Es gibt bestimmt auch Sachen für unter 20 CENT.
    Schreibe mir doch auch mal eine MAIL.

    Hier klicken um diesen Post abzubestellen.

    - BUY VIAGRA NOW - SHIPPING FOR FREE !

    -> UNSUBSCRIBE HERE <-

  4. Posted 5 July 2010

    Torsten Kammer (admin)

    Der Filter ist auf meinen Kommentarspam trainiert, nicht den von Emails. "Unsubscribe here" stand bei mir noch nie in einem Kommentar^^. Außerdem unterscheidet der Filter nach Groß- und Kleinschreibung. Daher ist deiner auch als "sehr wahrscheinlich erlaubt" eingestuft.

    Aber trotzdem, seit dem der Filter läuft habe ich keine Spamkommentare mehr erhalten, in der Testphase ohne Filter waren es 50 pro Tag und mehr.

  5. Posted 21 July 2010

    Torsten (admin)

    Nur noch ein Test…

New comments can no longer be posted because it got to annoying to fight all the spam.