Berechnung der Wahrscheinlichkeit, dass ein Token in einem Bayes-Spam-Filter Spam ist

8

Ich habe kürzlich einen Bayes-Spam-Filter geschrieben, ich habe Paul Grahams Artikel Plan for Spam und eine Implementierung davon in C # fand ich auf Codeprojekt als Referenzen, um meinen eigenen Filter zu erstellen.

Ich habe gerade bemerkt, dass die Implementierung in CodeProject die Gesamtzahl der eindeutigen Token verwendet, um die Wahrscheinlichkeit zu berechnen, dass ein Token Spam ist (zB wenn der Schinkenkorpus 10000 Token insgesamt, aber 1500 unqiue Token enthält, wird der 1500 zur Berechnung der Wahrscheinlichkeit als ngood), aber in meiner Implementierung habe ich die Anzahl der Beiträge verwendet, wie sie in Paul Grahams Artikel erwähnt sind. Das lässt mich fragen, welche davon besser bei der Berechnung der Wahrscheinlichkeit sein sollte:

  1. Post-Zählung (wie in Paul Grahams Artikel erwähnt)
  2. Gesamtzahl eindeutiger Token (wie in der Implementierung von Codeprojekt verwendet)
  3. Gesamtzahl der Token
  4. Gesamtanzahl der enthaltenen Token (dh die Token mit b + g & gt; = 5)
  5. Gesamtanzahl der enthaltenen Token
Waleed Eissa 06.04.2009, 01:02
quelle

4 Antworten

2

In diesem EACL-Papier von Karl-Michael Schneider (PDF) heißt es, dass Sie das multinomiale Modell verwenden sollten, also das gesamte Token zählen, um die Wahrscheinlichkeit zu berechnen. Bitte sehen Sie sich das Papier für die genauen Berechnungen an.

    
Yuval F 16.04.2009 19:15
quelle
1

Im Allgemeinen haben die meisten Filter die in Grahams Arbeit beschriebenen Algorithmen hinter sich gelassen. Mein Vorschlag wäre, die SpamBayes-Quelle zu erhalten und die Kommentare zu lesen, die in spambayes / classifier.py (besonders) und spambayes / tokenizer.py (besonders oben) beschrieben sind. Es gibt eine Menge Geschichte über die ersten Experimente, die durchgeführt wurden, um solche Entscheidungen zu bewerten.

FWIW, im aktuellen SpamBayes-Code wird die Wahrscheinlichkeit so berechnet (spamcount und hamcount sind die Anzahl der Nachrichten, in denen das Token gesehen wurde (beliebig oft), und nham und nspam sind die Gesamtzahl der Nachrichten) :

%Vor%

unknown_word_strength ist (standardmäßig) 0,45 und unknown_word_prob ist (standardmäßig) 0,5.

    
Tony Meyer 30.04.2009 09:44
quelle
0

Können Sie Ihren Code ändern, um die anderen Methoden zu verwenden? Dann könnten Sie mit einem anderen Datensatz testen und die Ergebnisse veröffentlichen.

    
Simeon Pilgrim 10.04.2009 08:58
quelle
0

Vielleicht möchten Sie sich PopFile ansehen, eine zeitgeprüfte Perl-Implementierung. Es macht einen sehr guten Job. Ich bin mir ziemlich sicher, dass es Open Source ist und Sie könnten sehen, welche Formel sie verwenden.

    
Jeff Martin 14.04.2009 15:50
quelle