3

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

我已经阅读了 Paul Graham 关于贝叶斯过滤的文章。(垃圾邮件更好的贝叶斯过滤计划)

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

4

4 回答 4

4

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

http://thesaurus.com/

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

http://www.synonyms.net/

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

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

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

为了满足您的“人工智能”要求,您可能能够适应ALICE 的 Spam.aiml。它是AIML格式,但包含大量 4 符号垃圾邮件的排列。这样做的问题是它很慢。

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

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

没有一个单词连续有超过 3 个辅音。为此,“TH”被认为是一个字母(以免弄乱“strNGTH”之类的词)。

没有一个词长于 34 个字母。此处列出的词除外。

某些字母组合不能出现。这方面的一个例子是字母“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”不会被视为元音,以免误报“you”。

任何不符合这些规定 15% 或更多(拼写错误的余量)的输入都将被重定向到垃圾邮件。

如果你决定修改 ALICE 的文件,你可以在这里得到很多。较新的版本可以在ALICE 的 Google 代码页面上找到。

您还可以使用拼写检查器来帮助检测垃圾邮件。您可以针对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% 的输入无效可以解决这个问题。

如果你觉得对你有帮助,可以从这里获取我制作的小程序。它是用 Python 编写的。

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

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

如果你想为此使用 Lisp,这里有一篇关于 Lisp 中贝叶斯过滤的好文章

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

于 2012-04-10T20:05:23.440 回答
3

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

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

试图仅根据消息内容过滤垃圾邮件是失败的游戏;垃圾邮件发送者知道如何改变他们的信息,以至于贝叶斯分类器只能看到噪音。但是你可以用它来对付他们。SpamAssassin 对此有很多证明,但同样,您需要对实时数据进行动态分析才能真正做到这一点。我什至会声称,一旦你有足够的相关输入,你用于制定判决的精确方法是次要的。

于 2012-04-13T15:14:42.613 回答
1

我已经(纯粹出于懒惰)使用SpamAssassin的贝叶斯实现有一段时间了,它的表现相当糟糕。

几个月前,我在我的武器库中添加了协同过滤系统Vipul's RazorPyzor,由 SpamAssassin 控制,提高了垃圾邮件分数。我会半定期地向这两个系统发送垃圾邮件。它仍然不完美,但我的手机现在不那么频繁了。

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

于 2012-04-09T18:58:32.527 回答