2012-04-09 10 views
3

Was ist der aktuelle Stand der Technik in Spam-Präventionstechniken?State of the Art in der Spam-Prävention

Ich habe bereits Paul Grahams Artikel über Bayes'sche Filterung gelesen. (A Plan for Spam und Better Bayesian Filtering)

und wollten wissen, ob es noch mehr aktuelle Artikel gibt? (vorzugsweise AI verwandte)

+6

Spamschutz *? Das erfordert eine bessere Kindererziehung. – Kaz

+1

Filtern jeglicher Art ist ärgerlich, da Ihr SMTP-Server den Spam akzeptieren (d. H. Übermitteln) muss. Das Problem beim Akzeptieren von Spam besteht darin, dass sich falsche Spam-Mails in Ihrem Spam-Ordner befinden, ohne dass weitere Maßnahmen ergriffen werden müssen. Jemand wartet darauf, dass Sie auf etwas antworten, das Sie noch nicht gesehen haben, und es wird keine Benachrichtigung über die Nichtlieferung generiert, um sie darauf hinzuweisen. Wenn Sie in Ihrem Spam-Ordner nachsehen, haben die Spammer gewonnen. Du hast nichts erreicht; Sie scannen immer noch Ihre E-Mails, indem Sie Spam von Nicht-Spam trennen, nur in einem anderen Ordner. – Kaz

+0

Auf der Suche nach theoretischen Lösungen wäre es wahrscheinlich besser, wenn Sie [stackexchange] (http://cs.stackexchange.com/) fragen. –

Antwort

1

Ich war (aus reiner Faulheit) mit SpamAssassin 's Bayes Implementierung für eine Weile, und es war eher schlecht.

Vor ein paar Monaten, habe ich kollaborative Filtersysteme Vipul's Razor und Pyzor zu meinem Arsenal, mit Spamassassin in der Steuerung, die Spam-Scores zu erhöhen. Ich füttere meine Spams halb regelmäßig auf beiden Systemen. Es ist immer noch nicht perfekt, aber mein Handy geht jetzt viel seltener aus.

Es scheint "State-of-the-Art" ist eine Kombination von effektiven Techniken.

+0

Ich suche eigentlich nach AI-Techniken oder zumindest nach einigen theoretischen Lösungen. –

3
4

Wenn Sie versuchen, Spam-Wörter, Sätze wie "faddhusdhfi" und nichts anderes zu verhindern, könnten Sie immer eine Datenbank mit Wörtern und deren Synonymen haben. Sie könnten dann überprüfen, ob die Eingabe weniger als 50% bekannte Wörter in der Datenbank hat, Sie könnten eine Markierung setzen. Sie können eine Offline-Datenbank erstellen, die ich nicht empfehlen würde, oder Sie könnten einige Online-Datenbanken verwenden. Eine Liste von Wörtern, würde ich

http://thesaurus.com/

Eine Liste von Synonymen dieser Wörter vorschlagen, würde ich

http://www.synonyms.net/

Ich denke, deuten darauf hin, diese beiden wahrscheinlich das beste für das wäre Zweck, wie sie beide eine API haben (für synonyms.net ist es auf this Seite), die Sie verwenden können, so erfordert es nicht, die zurückgegebenen Seiten nach Wörtern zu analysieren.

Sie könnten dann wiederum kombinieren Sie dies mit anderen Methoden, wie zuvor erwähnt, wie Bayesian Filterung.

Dies passt zwar nicht wirklich zu Ihren AI-Anforderungen, verhindert jedoch eine Reihe von Meldungen.

Um Ihre 'AI' Anfrage zu erfüllen, könnten Sie wahrscheinlich in der Lage sein, ALICE's Spam.aiml anzupassen. Es ist in AIML Format, enthält aber eine Menge von Permutationen von 4-Symbol-Spam. Das Problem dabei ist, dass es langsam ist.

Eine mögliche Alternative zu Spam.aiml wäre, die Regeln der englischen Sprache zu verwenden, um Spam zu erkennen und zu filtern. Die folgenden Regeln könnten verwendet werden:

Jedes Wort muss mindestens einen Vokal haben. Der Buchstabe "Y" wird dafür als Vokal betrachtet.

Kein Wort hat mehr als 3 Konsonanten hintereinander. Zu diesem Zweck wird "TH" als ein Buchstabe betrachtet (um Wörter wie "strENGTH" nicht zu stören).

Kein Wort ist länger ist länger als 34 Buchstaben. Die Ausnahmen davon wären die Wörter here.

Einige Buchstabenkombinationen können nicht vorkommen. Ein Beispiel dafür wäre, dass die Buchstaben "R" und "C" niemals direkt nebeneinander in einer normalen Unterhaltung ohne Slang erscheinen.

Sie könnten eine Datenbank mit unmöglichen Kombinationen haben. Ich habe einen kleinen durch jede Permutation von 2-Buchstaben gegen eine Datenbank mit 6578 Worten ausgeführt wird, und kam mit diesen Ergebnissen auf:

df bf kf gf jk kj sj fj gj hj lj sl 

Das ist alles unmöglich Kombinationen. Natürlich werden Kombinationen wie 'zz' weggelassen. Diese sind:

'oo' ist weggelassen, wie es in vielen Wörtern, wie 'Aussehen' erscheint.

Segmente der Zeichenfolge, die länger als 2 Zeichen sind und nacheinander wiederholt werden, werden als Spam gekennzeichnet. In der Zeichenfolge "lololololol" ist das wiederholte Segment "lo" und wird als Spam gekennzeichnet.

Mehr als 3 gleiche Vokale im selben Wort würden als Spam markiert werden. Zum Beispiel: 'oooouuuu' würde als Spam markiert werden, da 'o' und 'u' Vokale sind, die länger als 3 mal wiederholt wurden.

Kein Wort, das größer als 1 Zeichen ist, kann nur aus Vokalen bestehen. In diesem Fall würde "Y" nicht als Vokal betrachtet, um ein falsches Positiv auf "Sie" zu vermeiden.

Alle Eingaben, die diesen Vorschriften nicht um 15% oder mehr entsprechen (Marge für Rechtschreibfehler), werden zu Spam umgeleitet.

Wenn Sie sich entscheiden, ALICE-Dateien zu ändern, können Sie eine Menge von ihnen erhalten here. Neuere Version kann bei ALICE's Google Code page gefunden werden.

Sie könnten auch eine Rechtschreibprüfung verwenden, um bei der Spam-Erkennung zu helfen. Sie könnten die Eingabe für eine Rechtschreibprüfung wie PyEnchant (für Python) ausführen und die Vorschläge lesen. Wenn die Eingabe keine Vorschläge enthält, kann in den meisten Fällen davon ausgegangen werden, dass sie Spam ist.

Es ist nicht perfekt, aber es sollte in einem begrenzten Umfang. . Ich habe ein kleines Programm zu zeigen, was Spam wie diese Filterung in Folge würde dies die Ausgabe lautet:

>>> fdsahjfsd 
'fdsahjfsd' is spam since more than 3 consonants appear in a row 
>>> fhsdjhfksd 
'fhsdjhfksd' is spam since it has no vowel 
>>> jfsdkjl 
'jfsdkjl' is spam since it has no vowel 
>>> dk 
'dk' is spam since it has no vowel 
>>> ddds 
'ddds' is spam since it has no vowel 
>>> uxxs 
'uxxs' is not spam 
>>> kd 
'kd' is spam since it has no vowel 
>>> ukd 
'ukd' is not spam 
>>> asdjaskljlaskjldkasjkljdklas 
'asdjaskljlaskjldkasjkljdklas' is spam since it is too long 
>>> hdjaskj 
'hdjaskj' is spam since invalid sequences detected 

Wie ich schon sagte, es ist nicht perfekt, da es falsch positive Ergebnisse (wie ‚uxxs‘) liefert, aber das könnte mit einer Implementierung der Rechtschreibprüfung behoben werden.

Die Backdraw mit einer Implementierung der Rechtschreibprüfung würde bedeuten, dass Ihre Spam-Erkennung auf der Anzahl der Wörter basiert, die das Wörterbuch hat. Die meisten Rechtschreibprüfungen haben nur die ersten 10.000 Wörter, daher können einige ungewöhnliche Wörter als Spam geblockt werden. Wenn jedoch überprüft wird, ob mehr als 15% der Eingabe ungültig sind, könnte dies behoben werden.

Wenn Sie denken, dass es Ihnen helfen kann, können Sie das kleine Programm, das ich von here gemacht habe. Es ist in Python geschrieben.

Wie andere Antworten hier bereits gesagt haben, würde ein "State-of-the-Art" -Spam-Filter eine Mischung von Methoden erfordern.

können Sie verwenden SpamAssasin, PyZor, Reverend und Orange, aber wahrscheinlich das Beste, was alle diejenigen versuchen zu tun wäre, zusammen zu kombinieren.

Wenn Sie Lisp für dieses verwenden möchten, ist ein schöner Artikel über Bayesian Filterung in Lisp here.

Wenn Sie dies über ein neuronales Netzwerk tun möchten, dann this Codeproject Artikel kann nützlich sein. Es verwendet eine einfache und einfach zu bedienende DLL, und der Beispielcode kann fast direkt für die Aufgabe der Spam-Filterung verwendet werden.

Hoffe, dass geholfen hat!

+0

Warum die Daunenabstimmung ohne Erklärung? Was habe ich falsch gemacht? – Xyene

+0

Ich habe nicht downvote, aber es scheint, als gäbe es keine echte "Antwort" in Ihrem Beitrag und ist mehr eine Wäscheliste von Vorschlägen. – Woot4Moo

+0

Stimmt, aber die Frage selbst ist ein bisschen vage. Es wird keine "bevorzugte" Programmiersprache angegeben, daher gab ich eine Liste von Implementierungen in verschiedenen Sprachen, und es wird nicht angegeben, ob es sich um Spam-E-Mail-Erkennung oder um die Erkennung von Spam-Strings handelt. Nein noch einmal, "bevorzugte" Implementierung wird entweder angegeben. Also habe ich ein paar Online-Datenbanken veröffentlicht. Deshalb habe ich versucht, so viele, wie Sie sagten, Vorschläge zu machen, basierend auf der Frage. Wenn die Frage tatsächlich nach SPAM-EMAIL-Erkennung gefragt wurde, dann ist meine Antwort, oder eine Liste von Vorschlägen, nutzlos, abgesehen von den letzten Links. – Xyene

3

Der Stand der Technik ist nicht so sehr ein patrikulärer Algorithmus als in der Qualität und Menge der Eingabedaten. Um den Stand der Technik zu erreichen, benötigen Sie Hunderttausende aktive Benutzer, Millionen von Nachrichten pro Tag. Mit anderen Worten, seien Sie Gmail, Yahoo oder Hotmail oder haben Sie die Möglichkeit, ähnlich große Mengen an Echtzeitdaten zu erhalten.

Speichern Sie Ihr Urteil bis zum letzten möglichen Moment; bereit sein, eine Nachricht aus dem Posteingang des Benutzers zu ziehen, kurz bevor sie eine Nachrichtenliste anfordert. Finden Sie heraus, welchen Benutzern Sie vertrauen und wenden Sie ihre Urteile auf die Nachrichten aller anderen Benutzer an. Sammeln Sie so viele externe Eingaben wie möglich (Benutzerbeurteilungen, Absender-Reputation, URL-Zielanalyse, was Sie haben) und füttern Sie sie in Ihre maschinellen Lernmaschinen.

Der Versuch, Spam nur anhand der Nachrichteninhalte zu filtern, ist ein verlierendes Spiel. Die Spammer wissen, wie sie ihre Nachrichten zu einem Punkt mutieren müssen, an dem ein Bayesscher Klassifikator kaum etwas anderes als Rauschen sehen kann. Aber Sie können das gegen sie verwenden. SpamAssassin hat viele Beweise dafür, aber auch hier brauchen Sie eine dynamische Analyse von Echtzeitdaten, um wirklich davon abzulenken. Ich würde sogar behaupten, dass, sobald Sie genügend relevante Eingaben haben, die genaue Methode, die Sie für die Formulierung eines Urteils verwenden, von sekundärer Bedeutung ist.

Verwandte Themen