English Version

垃圾邮件过滤计划

2002年8月

(本文描述了在我们构建的用于测试Arc的反垃圾邮件网络邮件阅读器中使用的垃圾邮件过滤技术。改进的算法在《更好的贝叶斯过滤》中有描述。)我认为可以阻止垃圾邮件,而基于内容的过滤器是实现这一目标的方法。垃圾邮件发送者的致命弱点是他们的消息。他们可以绕过你设置的任何其他障碍。至少到目前为止是这样。但他们必须传递他们的信息,无论是什么。如果我们能够编写识别他们消息的软件,就没有办法能够绕过它。

对收件人来说,垃圾邮件很容易识别。如果你雇佣某人阅读你的邮件并丢弃垃圾邮件,他们会毫无困难地做到这一点。我们需要做多少工作,除了人工智能之外,来自动化这个过程?

我认为我们将能够用相当简单的算法解决这个问题。事实上,我发现你可以使用不比单个词的垃圾邮件概率的贝叶斯组合更多的东西来相当好地过滤现在的垃圾邮件。使用一个稍微调整的(如下所述)贝叶斯过滤器,我们现在在每1000封垃圾邮件中遗漏少于5封,误报率为0。

统计方法通常不是人们编写垃圾邮件过滤器时首先尝试的方法。大多数黑客的第一本能是尝试编写识别垃圾邮件单个特征的软件。你看着垃圾邮件,想,这些家伙竟然敢给我发送以"亲爱的朋友"开头的邮件,或者主题行全是大写并以八个感叹号结尾的邮件。我可以用大约一行代码过滤掉这些东西。

于是你这样做了,开始时它有效。几个简单的规则会大量减少你收到的垃圾邮件。仅仅查找"点击"这个词就会捕获我垃圾邮件语料库中79.7%的邮件,误报率只有1.2%。

在尝试统计方法之前,我花了大约六个月编写查找单个垃圾邮件特征的软件。我发现的是,识别最后百分之几的垃圾邮件变得非常困难,而且当我使过滤器更严格时,我得到了更多的误报。

误报是被错误识别为垃圾邮件的无辜邮件。对于大多数用户来说,错过合法邮件比收到垃圾邮件糟糕一个数量级,因此产生误报的过滤器就像带有死亡风险的痤疮治疗。

用户收到的垃圾邮件越多,他们注意到一封无辜邮件坐在垃圾邮件文件夹中的可能性就越小。奇怪的是,你的垃圾邮件过滤器越好,误报就变得越危险,因为当过滤器真的很好时,用户更可能忽略它们捕获的一切。

我不知道为什么我这么长时间才尝试统计方法。我想这是因为我对试图自己识别垃圾邮件特征上了瘾,好像我在和垃圾邮件发送者玩某种竞争游戏。(非黑客通常不会意识到这一点,但大多数黑客非常有竞争心。)当我尝试统计分析时,我立即发现它比我聪明得多。它当然发现了像"virtumundo"和"teens"这样的术语是垃圾邮件的良好指标。但它还发现"per"和"FL"和"ff0000"是垃圾邮件的良好指标。事实上,“ff0000”(亮红色的html)结果证明和任何色情术语一样是垃圾邮件的良好指标。

以下是我如何进行统计过滤的概述。我从一个垃圾邮件语料库和一个非垃圾邮件语料库开始。目前每个语料库中大约有4000条消息。我扫描每个语料库中每条消息的整个文本,包括标题、嵌入的html和javascript。我目前认为字母数字字符、破折号、撇号和美元符号是标记的一部分,其他一切都是标记分隔符。(这里可能还有改进的空间。)我忽略全是数字的标记,我也忽略html注释,甚至不将它们视为标记分隔符。

我计算每个标记(目前忽略大小写)在每个语料库中出现的次数。在这个阶段,我最终得到两个大的哈希表,每个语料库一个,将标记映射到出现次数。

接下来我创建第三个哈希表,这次将每个标记映射到包含它的电子邮件是垃圾邮件的概率,我计算如下[1]:(let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad))))))))) 其中word是我们计算其概率的标记,good和bad是我在第一步创建的哈希表,ngood和nbad分别是非垃圾邮件和垃圾邮件的数量。

我将此解释为代码以显示几个重要细节。我想稍微偏向概率以避免误报,通过反复试验,我发现一个好的方法是将good中的所有数字加倍。这有助于区分偶尔确实出现在合法邮件中的词和几乎从不出现的词。我只考虑总共出现超过五次的词(实际上,由于加倍,在非垃圾邮件中出现三次就足够了)。然后是关于给在一个语料库中出现但不在另一个语料库中出现的词分配什么概率的问题。同样通过反复试验,我选择了.01和.99。这里可能还有调整的空间,但随着语料库的增长,这种调整无论如何都会自动发生。

特别细心的人会注意到,虽然为了计算出现次数的目的我将每个语料库视为一个长文本流,但在计算垃圾邮件概率时,我使用每个语料库中的邮件数量,而不是它们的组合长度作为除数。这增加了另一个轻微的偏向以防止误报。

当新邮件到达时,它被扫描成标记,最有趣的十五个标记,其中有趣度是通过它们的垃圾邮件概率与中性的.5相差多远来衡量的,被用来计算邮件是垃圾邮件的概率。如果probs是十五个单独概率的列表,你这样计算组合概率:(let ((prod (apply #’* probs))) (/ prod (+ prod (apply #’* (mapcar #’(lambda (x) (- 1 x)) probs))))) 实践中出现的一个问题是给你从未见过的词分配什么概率,即没有出现在词概率哈希表中的词。我再次通过反复试验发现,.4是一个好数字。如果你以前从未见过一个词,它可能是相当无辜的;垃圾邮件词往往太熟悉了。

在本文末尾的附录中有这个算法应用于实际邮件的例子。

如果上述算法给邮件的垃圾邮件概率超过.9,我将其视为垃圾邮件。但实际上我在哪里设置这个阈值并不重要,因为很少有概率最终落在范围的中间。

统计方法的一大优势是你不必阅读那么多垃圾邮件。在过去的六个月里,我确实阅读了数千封垃圾邮件,这真的有点令人沮丧。诺伯特·维纳说,如果你与奴隶竞争,你就会变成奴隶,与垃圾邮件发送者竞争也有类似的贬低作用。要识别单个垃圾邮件特征,你必须试图进入垃圾邮件发送者的思想,坦率地说,我想尽可能少花时间在垃圾邮件发送者的思想内。

但贝叶斯方法的真正优势,当然是你知道你在测量什么。像SpamAssassin这样的特征识别过滤器给邮件分配垃圾邮件"分数"。贝叶斯方法分配实际概率。“分数"的问题是没有谁知道它意味着什么。用户不知道它意味着什么,但更糟糕的是,过滤器的开发者也不知道。包含"性"这个词的邮件应该得多少分?概率当然可能是错误的,但对于它意味着什么,或者如何结合证据来计算它,几乎没有模糊性。基于我的语料库,“性"表示包含它的电子邮件是垃圾邮件的.97概率,而"性感"表示.99概率。贝叶斯规则,同样明确地说,包含两个词的邮件,在(不太可能的)没有任何其他证据的情况下,有99.97%的几率是垃圾邮件。

因为它测量概率,贝叶斯方法考虑邮件中的所有证据,好的和坏的。在垃圾邮件中比例极低出现的词(如"虽然"或"今晚"或"显然”)对降低概率的贡献与坏词如"取消订阅"和"选择加入"对增加概率的贡献一样多。所以一封 otherwise 无辜的碰巧包含"性"这个词的邮件不会被标记为垃圾邮件。

理想情况下,当然应该为每个用户单独计算概率。我收到很多包含"Lisp"这个词的邮件,而且(到目前为止)没有垃圾邮件这样做。所以这样的词实际上是发送邮件给我的某种密码。在我早期的垃圾邮件过滤软件中,用户可以建立这样的词列表,包含它们的邮件会自动通过过滤器。在我的列表上,我放了像"Lisp"这样的词,还有我的邮政编码,这样( otherwise 听起来相当像垃圾邮件的)在线订单收据会通过。我以为我很聪明,但我发现贝叶斯过滤器为我做了同样的事情,而且发现了很多我没想到的词。

当我在开始时说我们的过滤器每1000封垃圾邮件遗漏少于5封,误报率为0时,我谈论的是基于我的邮件语料库过滤我的邮件。但这些数字并不误导,因为那是我倡导的方法:基于用户收到的垃圾邮件和非垃圾邮件过滤每个用户的邮件。基本上,每个用户应该有两个删除按钮,普通删除和删除为垃圾邮件。任何被删除为垃圾邮件的东西都进入垃圾邮件语料库,其他一切都进入非垃圾邮件语料库。

你可以用种子过滤器开始用户,但最终每个用户应该有自己基于实际收到的邮件的每词概率。这(a)使过滤器更有效,(b)让每个用户决定自己对垃圾邮件的精确定义,(c)也许最重要的是使垃圾邮件发送者难以调整邮件以通过过滤器。如果过滤器的大部分大脑在个体数据库中,那么仅仅调整垃圾邮件以通过种子过滤器并不能保证它们通过个体用户的不同且训练有素的过滤器的效果。

基于内容的垃圾邮件过滤通常与白名单结合使用,白名单是发送者列表,其邮件可以不经过滤就被接受。构建这样一个白名单的一个简单方法是保持用户曾经发送过邮件的每个地址的列表。如果邮件阅读器有删除为垃圾邮件按钮,你也可以添加用户已作为普通垃圾删除的每封邮件的发件人地址。

我是白名单的倡导者,但更多是作为节省计算的方法而不是作为改进过滤的方法。我曾经认为白名单会使过滤更容易,因为你只需要过滤你从未听说过的人的邮件,而第一次给你发邮件的人受到惯例的约束,在他们对你说什么方面。你已经认识的人可能会给你发送谈论性的邮件,但第一次给你发邮件的人不太可能。问题是,人们可以有多个电子邮件地址,所以新的发件人地址并不保证发件人是第一次给你写信。老朋友(特别是如果他是黑客)突然用新的发件人地址给你发送邮件并不罕见,所以你不能通过对来自未知地址的邮件进行特别严格的过滤来冒误报的风险。

但从某种意义上说,我的过滤器本身确实体现了一种白名单(和黑名单),因为它们基于整个消息,包括标题。所以在某种程度上它们"知道"可信发送者的电子邮件地址,甚至邮件从他们到我这里的路由。它们对垃圾邮件了解同样的情况,包括服务器名称、邮件程序版本和协议。

如果我认为我能保持目前的垃圾邮件过滤率,我会认为这个问题解决了。但能够过滤掉现在的大多数垃圾邮件并不意味着什么,因为垃圾邮件在进化。确实,到目前为止,大多数反垃圾邮件技术就像杀虫剂,只不过创造了一种新的、有抗药性的虫子。

我对贝叶斯过滤器更有希望,因为它们与垃圾邮件一起进化。所以当垃圾邮件发送者开始使用"c0ck"而不是"cock"来规避基于单个词的简单思维垃圾邮件过滤器时,贝叶斯过滤器会自动注意到。确实,“c0ck"比"cock"是更有力的证据,而贝叶斯过滤器确切知道多少更有力。

尽管如此,任何提出垃圾邮件过滤计划的人都必须能够回答这个问题:如果垃圾邮件发送者确切知道你在做什么,他们能够多好地绕过你?例如,我认为如果基于校验和的垃圾邮件过滤成为严重障碍,垃圾邮件发送者将只是转向使用mad-lib技术生成消息体。

要击败贝叶斯过滤器,垃圾邮件发送者使他们的邮件独特或停止使用单个脏词是不够的。他们必须使他们的邮件与你的普通邮件无法区分。我认为这将严重限制他们。垃圾邮件大多是推销词,所以除非你的普通邮件都是推销词,否则垃圾邮件将不可避免地有不同的特征。垃圾邮件发送者当然也必须改变(并不断改变)他们的整个基础设施,因为否则标题对贝叶斯过滤器来说看起来和以前一样糟糕,无论他们对消息体做了什么。我不太了解垃圾邮件发送者使用的基础设施,不知道使标题看起来无辜有多难,但我的猜测是,这比使消息看起来无辜更难。

假设他们能够解决标题问题,未来的垃圾邮件可能看起来像这样:嘿。我想你应该查看以下内容:http://www.27meg.com/foo 因为这是基于内容的过滤将留给垃圾邮件发送者空间制作的推销词。(事实上,即使这样也很难通过过滤器,因为如果邮件中的其他一切都是中性的,垃圾邮件概率将取决于url,使其看起来中性需要一些努力。)

垃圾邮件发送者范围从不试图隐藏身份的运营所谓选择加入列表的企业,到劫持邮件服务器发送推广色情网站的垃圾邮件的人。如果我们使用过滤将他们的选择缩减到像上面那样的邮件,那应该基本上将垃圾邮件发送者频谱的"合法"端置于业务之外;他们觉得受到各种州法律的约束,必须包含关于为什么他们的垃圾邮件不是垃圾邮件的样板文本,以及如何取消你的"订阅”,而这类文本很容易识别。

(我曾经认为相信更严格的法律会减少垃圾邮件是天真的。现在我认为,虽然更严格的法律可能不会减少垃圾邮件发送者发送的垃圾邮件数量,但它们肯定可以帮助过滤器减少收件人实际看到的垃圾邮件数量。)

在整个频谱中,如果你限制垃圾邮件发送者可以制作的推销词,你将不可避免地使他们停业。商业这个词是记住的一个重要词。垃圾邮件发送者是商人。他们发送垃圾邮件是因为它有效。它有效是因为虽然响应率低得可怜(最好每百万15封,而目录邮寄为每百万3000封),但对他们来说成本几乎为零。对收件人来说成本是巨大的,每百万收件人花费一秒删除垃圾邮件约5人周,但垃圾邮件发送者不必支付那个。

发送垃圾邮件确实给垃圾邮件发送者带来一些成本。[2] 所以我们能够使响应率越低——无论是通过过滤,还是通过使用过滤器迫使垃圾邮件发送者稀释他们的推销词——会发现发送垃圾邮件值得的企业就越少。

垃圾邮件发送者使用他们所做的那种推销词的原因是增加响应率。这可能比进入垃圾邮件发送者的思想更令人厌恶,但让我们快速看一下回应垃圾邮件的人的思想。这个人要么是惊人地轻信,要么在性兴趣上深度否认。无论哪种情况,对我们来说垃圾邮件似乎令人厌恶或愚蠢,但对他们来说是令人兴奋的。垃圾邮件发送者不会说这些事情,如果它们听起来不令人兴奋的话。“我想你应该查看以下内容"根本不会像垃圾邮件发送者现在说的那样对垃圾邮件收件人有吸引力。结果:如果不能包含令人兴奋的推销词,垃圾邮件作为营销工具变得不那么有效,想要使用它的企业就更少。

这是最终的巨大胜利。我开始编写垃圾邮件过滤软件是因为我不想再看这些东西了。但如果我们足够擅长过滤垃圾邮件,它将停止工作,垃圾邮件发送者实际上将停止发送它。

在所有对抗垃圾邮件的方法中,从软件到法律,我相信贝叶斯过滤将是单一最有效的。但我 also 认为我们进行的反垃圾邮件努力种类越多越好,因为任何限制垃圾邮件发送者的措施都将倾向于使过滤更容易。即使在基于内容的过滤世界中,我认为如果同时使用许多不同种类的软件将是好事。不同的过滤器越多,垃圾邮件发送者调整垃圾邮件以通过它们就越困难。

附录:过滤示例

这是在我写这篇文章时到达的垃圾邮件的示例。这封垃圾邮件中最有趣的十五个词是:qvp0045 indira mx-05 intimail $7500 freeyankeedom cdo bluefoxmedia jpg unsecured platinum 3d0 qves 7c5 7c266675 这些词是来自标题和消息体的东西的混合,这是垃圾邮件的典型特征。垃圾邮件的另一个典型特征是,在我的数据库中,这些词中的每一个都有.99的垃圾邮件概率。事实上,有超过十五个词的概率为.99,这些只是最先看到的十五个。

不幸的是,这使得这封邮件成为使用贝叶斯规则的无聊例子。要看到有趣的各种概率,我们必须看看这封实际上相当不典型的垃圾邮件。

这封垃圾邮件中最有趣的十五个词及其概率是:madam 0.99 promotion 0.99 republic 0.99 shortest 0.047225013 mandatory 0.047225013 standardization 0.07347802 sorry 0.08221981 supported 0.09019077 people’s 0.09019077 enter 0.9075001 quality 0.8921298 organization 0.12454646 investment 0.8568143 very 0.14758544 valuable 0.82347786 这次证据是好坏的混合。像"shortest"这样的词几乎和像"madam"或"promotion"这样的词对有罪的证据一样是无辜的证据。但有罪的情况仍然更强。如果你根据贝叶斯规则组合这些数字,结果概率是.9027。

“Madam"显然来自以"尊敬的先生或女士"开头的垃圾邮件。它们不是很常见,但"madam"这个词从未出现在我的合法邮件中,而且这都是关于比例的。

“Republic"得分高是因为它经常出现在尼日利亚骗局邮件中,并且在提及韩国和南非的垃圾邮件中也出现一两次。你可能会说,它因此帮助识别这封垃圾邮件是偶然的。但我在检查垃圾邮件概率时发现有很多这样的偶然,它们有一种不可思议的趋势,将事情推向正确的方向而不是错误的方向。在这种情况下,“Republic"这个词出现在尼日利亚骗局邮件和这封垃圾邮件中并不完全是巧合。有一整类涉及发展中国家的可疑商业提议,而这些国家反过来更有可能有明确指定(因为它们不是)它们是共和国的名称。[3]

另一方面,“enter"是一个真正的失误。它主要出现在取消订阅说明中,但在这里以完全无辜的方式使用。幸运的是,统计方法相当稳健,在结果开始偏离之前可以容忍相当多的失误。

为了比较,这里是那种罕见鸟类的例子,一封通过过滤器的垃圾邮件。为什么?因为纯粹的偶然,它碰巧充满了出现在我实际邮件中的词:perl 0.01 python 0.01 tcl 0.01 scripting 0.01 morris 0.01 graham 0.01491078 guarantee 0.9762507 cgi 0.9734398 paul 0.027040077 quite 0.030676773 pop3 0.042199217 various 0.06080265 prices 0.9359873 managed 0.06451222 difficult 0.071706355 这里有几个好消息。首先,这封邮件可能不会通过不碰巧专门研究编程语言并且有一个名叫Morris的好朋友的人的过滤器。对于普通用户来说,这里的前五个词都是中性的,不会贡献垃圾邮件概率。

其次,我认为基于词对(见下文)的过滤很可能抓住这个:“成本效益”,“设置费”,“退款”——相当 incriminating 的东西。当然,如果他们继续给我(或我所属的网络)发送垃圾邮件,“Hostex"本身将被识别为垃圾邮件词。

最后,这是一封无辜的邮件。它最有趣的十五个词如下:continuation 0.01 describe 0.01 continuations 0.01 example 0.033600237 programming 0.05214485 i’m 0.055427782 examples 0.07972858 color 0.9189189 localhost 0.09883721 hi 0.116539136 california 0.84421706 same 0.15981844 spot 0.1654587 us-ascii 0.16804294 what 0.19212411 这里的大多数词表明邮件是无辜的。有两个闻起来坏的词,“color”(垃圾邮件发送者喜欢彩色字体)和"California”(出现在推荐信中,也出现在表单的菜单中),但它们不足以压倒明显无辜的词如"continuation"和"example”。

“describe"被评为如此彻底无辜很有趣。它从未出现在我的4000封垃圾邮件中的任何一封中。数据结果充满了这样的惊喜。当你分析垃圾邮件文本时学到的一件事是垃圾邮件发送者使用的语言子集有多窄。正是这个事实,加上任何个体用户邮件的同样特征性词汇,使贝叶斯过滤成为一个好赌注。

附录:更多想法

我还没有尝试过的一个想法是基于词对,甚至三元组,而不是单个词进行过滤。这应该产生更精确的概率估计。例如,在我当前的数据库中,“offers"这个词的概率是.96。如果你基于词对计算概率,你最终会得到"special offers"和"valuable offers"的概率为.99,而"approach offers”(如在"这种方法提供"中)的概率为.1或更少。

我还没有这样做的原因是基于单个词的过滤已经如此有效。但这确实意味着如果垃圾邮件变得更难检测,有空间收紧过滤器。(奇怪的是,基于词对的过滤器实际上将是反向运行的马尔可夫链文本生成器。)

特定的垃圾邮件特征(例如在to字段中看不到收件人地址)当然在识别垃圾邮件方面有价值。它们可以通过将它们视为虚拟词来在这个算法中考虑。我可能会在将来的版本中这样做,至少对于少量最令人发指的垃圾邮件指标。特征识别垃圾邮件过滤器在许多细节上是正确的;它们缺乏的是结合证据的总体纪律。

识别非垃圾邮件特征可能比识别垃圾邮件特征更重要。误报是如此令人担忧,它们要求非凡的措施。我可能会在将来的版本中添加第二级测试,专门设计以避免误报。如果邮件触发这第二级过滤器,即使其垃圾邮件概率高于阈值,也会被接受。

我不期望这第二级过滤是贝叶斯的。它将不可避免地不仅是临时的,而且基于猜测,因为误报的数量不会大到足以注意到模式。(无论如何,如果备份系统不依赖与主系统相同的技术也是好事。)

我将来可能尝试的另一件事是对电子邮件的特定部分给予额外关注。例如,大约95%的当前垃圾邮件包含他们希望你访问的网站的url。(剩下的5%希望你拨打一个电话号码,通过电子邮件回复或回复到美国邮件地址,或在少数情况下购买某只股票。)在这种情况下,url本身几乎足以确定电子邮件是否是垃圾邮件。

域名不同于(非德语)电子邮件中的其余文本,因为它们通常由几个粘在一起的词组成。虽然在一般情况下计算成本高,但尝试分解它们可能是值得的。如果过滤器以前从未见过标记"xxxporn”,它将具有.4的个体垃圾邮件概率,而"xxx"和"porn"分别具有(在我的语料库中).9889和.99的概率,以及.9998的组合概率。

我期望随着垃圾邮件发送者逐渐被迫停止在消息文本中使用 incriminating 词,分解域名变得更加重要。(带有ip地址的url当然是极其 incriminating 的迹象,除了在少数系统管理员的邮件中。)

有一个合作维护的垃圾邮件发送者推广的url列表可能是个好主意。我们需要Raph Levien研究的信任度量类型来防止恶意或无能的提交,但如果我们有这样的东西,它将为任何过滤软件提供推动。它也将是抵制行动的便利基础。

测试可疑url的另一种方法是在用户查看提到它的电子邮件之前发送爬虫查看该网站。你可以像对邮件一样使用贝叶斯过滤器对网站进行评级,在网站上发现的任何东西都可以包含在计算电子邮件是垃圾邮件的概率中。导致重定向的url当然是特别可疑的。

我认为确实是个好主意的一个合作项目是积累一个巨大的垃圾邮件语料库。一个大的、干净的语料库是使贝叶斯过滤工作良好的关键。贝叶斯过滤器实际上可以使用语料库作为输入。但这样的语料库对其他类型的过滤器也有用,因为它可以用来测试它们。

创建这样的语料库带来一些技术问题。我们当然需要信任度量来防止恶意或无能的提交。我们还需要从语料库中的邮件中删除个人信息的方法(不仅仅是收件人地址和抄送,还有例如取消订阅url的参数,它们通常编码收件人地址)。如果有人想承担这个项目,这对世界来说将是一件好事。

附录:定义垃圾邮件

我认为对什么是垃圾邮件有粗略的共识,但有明确的定义会有用。如果我们想建立垃圾邮件的中心语料库,或者甚至有意义地比较垃圾邮件过滤率,我们需要这样做。

首先,垃圾邮件不是未经请求的商业电子邮件。如果我邻里的某人听说我在寻找一辆状况良好的旧Raleigh三速自行车,并给我发送电子邮件提供卖给我一辆,我会很高兴,然而这封邮件既是商业的又是未经请求的。垃圾邮件的定义特征(事实上,它存在的理由)不是它是未经请求的,而是它是自动化的。

垃圾邮件通常是商业的也仅仅是偶然的。例如,如果有人开始发送大量邮件来支持某种政治事业,它将与推广色情网站的邮件一样是垃圾邮件。

我建议我们将垃圾邮件定义为未经请求的自动化电子邮件。这个定义因此包括许多法律定义不认为是垃圾邮件的电子邮件。垃圾邮件的法律定义,可能受到游说者的影响,倾向于排除与收件人有"现有关系"的公司发送的邮件。但从公司购买东西,例如,并不意味着你已经请求他们的持续邮件。如果我从在线商店订购东西,然后他们向我发送一系列垃圾邮件,它仍然是垃圾邮件。

发送垃圾邮件的公司经常给你一种"取消订阅"的方法,或者要求如果你想要停止接收垃圾邮件就去他们的网站改变你的"账户偏好”。这不足以阻止邮件成为垃圾邮件。不选择退出不同于选择加入。除非收件人明确勾选了清晰标记的框(默认为否)请求接收邮件,否则它就是垃圾邮件。

在一些商业关系中,你确实隐含地请求某些类型的邮件。当你在线订购时,我认为你隐含地请求收据,以及订单发货时的通知。当Verisign向我发送邮件警告域名即将到期时,我不介意(至少,如果它们是实际的注册商)。但当Verisign向我发送提供免费电子商务网站建设指南的电子邮件时,那是垃圾邮件。

注释:

[1] 本文中的例子被翻译成Common Lisp,信不信由你,为了更大的可访问性。这里描述的应用程序是我们为了测试一个尚未发布的新Lisp方言Arc而编写的。

[2] 目前最低的费率似乎是发送一百万垃圾邮件约200美元。这非常便宜,每封垃圾邮件1/50美分。但例如过滤掉95%的垃圾邮件,将使垃圾邮件发送者接触给定受众的成本增加20倍。很少有人能有足够大的利润率来吸收那个。

[3] 作为经验法则,国家名称前的限定词越多,统治者越腐败。一个叫做X社会主义人民共和国的国家可能是你世界上最不想生活的地方。

感谢Sarah Harlin阅读草稿;Daniel Giffin(他也在编写生产Arc解释器)提供了几个关于过滤的好想法并创建了我们的邮件基础设施;Robert Morris、Trevor Blackwell和Erann Gat进行了许多关于垃圾邮件的讨论;Raph Levien提供了关于信任度量的建议;Chip Coldwell和Sam Steingold提供了关于统计的建议。你会在《黑客与画家》中找到这篇文章和其他14篇。更多信息:垃圾邮件过滤计划FAQ更好的贝叶斯过滤反击的过滤器过滤器会杀死垃圾邮件吗?日文翻译西班牙文翻译中文翻译概率垃圾邮件是不同的过滤器与黑名单信任度量过滤研究微软专利Slashdot文章错误的方式LWN:过滤器比较CRM114达到99.87%