垃圾邮件预防的最新技术

时间:2012-04-09 07:02:39

标签: artificial-intelligence spam article spam-prevention

垃圾邮件预防技术的最新技术水平是什么?

我已经阅读了Paul Graham关于贝叶斯过滤的文章。 (A Plan for Spam Better Bayesian Filtering

并想知道是否有更多最新文章可用? (最好是AI相关的)

4 个答案:

答案 0 :(得分:4)

如果您试图阻止垃圾词,句子,例如“fasdhusdhfi”,而不是其他任何内容,您可以随时拥有单词及其同义词的数据库。然后,您可以检查输入的数据库中是否有少于50%的已知单词,您可以引发一个标志。您可以创建一个我不推荐的脱机数据库,或者您可以使用一些在线数据库。对于单词列表,我建议

http://thesaurus.com/

对于这些单词的同义词列表,我建议

http://www.synonyms.net/

我认为这两个可能是最好的目的,因为它们都有一个API(对于您在this页面上的synonyms.net)你可以使用,所以它不需要解析返回的页面对于单词。

然后,您可以将其与其他方法结合使用,如前所述,例如贝叶斯过滤。

虽然这并不适合您的AI需求,但它确实阻止了一系列消息。

为了适应您的'AI'请求,您可能可以调整ALICE's Spam.aiml。它采用AIML格式,但包含大量4符号垃圾邮件的排列。这个问题是它很慢。

Spam.aiml的另一种可能替代方法是使用英语规则来检测垃圾邮件并对其进行过滤。可以使用以下规则:

每个单词必须至少有一个元音。为此,字母“Y”被视为元音。

没有一个单词连续超过3个辅音。为此,'TH'被认为是一个字母(以免弄乱像'streNGTH'这样的词。)

没有字长于34个字母。例外情况是列出的单词here

有些字母组合不会发生。这方面的一个例子是字母“R”和“C”在常规的非俚语对话中永远不会直接出现在彼此之间。

您可以拥有一个不可能组合的数据库。我通过对包含6578个单词的数据库运行每个2个字母的排列做了一个小的,并得出了这些结果:

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

这些都是不可能的组合。当然,省略诸如'zz'的组合。那些是:

aa bb cc dd ee ff gg hh ii jj kk ll mm nn pp qq rr ss tt uu vv ww xx yy zz
省略了

'oo',因为它出现在很多单词中,例如'look'。

超过2个字符且连续重复的字符串细分将被标记为垃圾邮件。在字符串'lololololol'中,重复的段是'lo',并被标记为垃圾邮件。

同一个单词中超过3个相同的元音会被标记为垃圾邮件。例如:'oooouuuu'会被标记为垃圾邮件,因为'o'和'u'是重复了3次以上的元音。

大于1个字符的单词可能只由元音组成。在这种情况下,“Y”不会被视为元音,因为不会对“你”产生误报。

任何不遵守这些规定15%或更多(错误拼写的保证金)的输入都会被重定向到垃圾邮件。

如果你决定修改ALICE的文件,你可以获得很多here。可以在ALICE's Google Code page找到更新的版本。

您还可以使用拼写检查程序来帮助检测垃圾邮件。您可以针对拼写检查器运行输入,例如PyEnchant(对于Python),并阅读建议。如果输入没有建议,那么在大多数情况下,可以安全地假设它 垃圾邮件。

它并不完美,但确实应该在有限的范围内。我做了一个小程序来演示这样的垃圾邮件过滤会产生什么。这是输出:

>>> 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

正如我之前所说,它并不完美,因为它返回误报(例如'uxxs'),但这可以通过拼写检查实现来修复。

使用拼写检查实施的反向提取将是您的垃圾邮件检测将基于字典具有的单词数量。大多数拼写检查程序只有前10,000个单词,因此一些不常见的单词可能被阻止为垃圾邮件。但是,检查超过15%的输入是否无效可以解决这个问题。

如果您认为它对您有所帮助,您可以从here获取我制作的小程序。它是用Python编写的。

此外,正如其他答案所述,“最先进的”垃圾邮件过滤器需要多种方法。

您可以使用SpamAssasinPyZorReverendOrange,但最好的办法是尝试将所有这些组合在一起。< / p>

如果您想使用Lisp,可以在here找到一篇关于Lisp中贝叶斯过滤的好文章。

如果您想通过神经网络这样做,那么this Codeproject文章可能会有用。它使用简单易用的dll,示例代码几乎可以直接用于垃圾邮件过滤任务。

希望有所帮助!

答案 1 :(得分:3)

答案 2 :(得分:3)

现有技术不是任何心室算法,而是输入数据的质量和数量。要达到最先进水平,您需要每天数十万活跃用户,数百万条消息。换句话说,是Gmail,Yahoo或Hotmail,或者有办法获得类似的大量实时数据。

保存你的判决,直到最后一刻;准备好在请求邮件列表之前将消息从用户的收件箱中拉出。找出要信任的用户,并将他们的判断应用于所有其他用户的消息。收集尽可能多的外部输入(用户判断,发件人信誉,URL目的地分析,你有什么),并将它们提供给你的机器学习机器。

尝试根据邮件内容过滤垃圾邮件是一场失败的游戏;垃圾邮件发送者知道如何将他们的消息变异到贝叶斯分类器除了噪声之外几乎看不到任何东西的程度。但你可以用它来反对他们。 SpamAssassin有很多这方面的证据,但同样,你需要对实时数据进行动态分析才能真正实现这一目标。我甚至声称,一旦你有足够的相关输入,你用来制定判决的精确方法是次要的。

答案 3 :(得分:1)

我曾经(出于纯粹的懒惰)与SpamAssassin的贝叶斯实施了一段时间,而且表现相当糟糕。

几个月前,我将协同过滤系统Vipul's RazorPyzor添加到我的工具库中,控制SpamAssassin,提高了垃圾邮件分数。我定期将我的垃圾邮件提供给两个系统。它仍然不完美,但我的手机现在不那么频繁了。

似乎“最先进的”是有效技术的结合。