1978年5月3日,数字设备公司(DEC)的市场经理Gary Thuerk做了一件在当时看来平平无奇的事:他给ARPANET上的393个用户发了一封邮件,宣传公司的新产品演示会。邮件主题是"DIGITAL WILL BE GIVING A PRODUCT PRESENTATION OF THE NEWEST MEMBERS OF THE DECSYSTEM-20 FAMILY"。

这封邮件带来了约1200万美元的销售额,也带来了ARPANET用户的愤怒投诉。一位系统管理员回复说:“这是对ARPANET的严重滥用。“没有人意识到,这一天标志着垃圾邮件时代的开端。四十七年后的今天,全球每天发送超过3600亿封电子邮件,其中约47%是垃圾邮件。这场没有硝烟的战争,催生了计算机安全领域最精彩的攻防博弈之一。

规则引擎:第一道防线的得与失

早期的垃圾邮件过滤完全是手工劳动。系统管理员看着垃圾邮件,总结出一些特征——标题全是大写字母、正文包含"免费”、“赚钱"等关键词、发件人地址可疑——然后写出规则把它们过滤掉。这种方法简单直接,初期效果还不错。Paul Graham在2002年回忆说,单是搜索"click"这个词就能抓住79.7%的垃圾邮件,误报率只有1.2%。

但规则引擎有一个致命缺陷:它是静态的。垃圾邮件发送者很快学会了规避这些规则。他们开始用"cl1ck"代替"click”,用"fr*e"代替"free”,用图片代替文字。规则越来越长,维护成本越来越高,效果却越来越差。更糟糕的是,随着规则变得严格,误报率开始攀升。Paul Graham形容说,一个会产生误报的过滤器就像一种可能杀死患者的祛痘药——对大多数用户来说,错过一封正常邮件比收到十封垃圾邮件更糟糕。

1997年,Paul Vixie创建了第一个实时黑名单(RBL,Real-time Blackhole List),开启了基于IP声誉的过滤时代。这是一种完全不同的思路:不再看邮件内容,而是看它从哪里来。如果一个IP地址发送了大量垃圾邮件,就把它列入黑名单,以后这个IP发的所有邮件都直接拒绝。这种方法在当时的网络环境下非常有效,因为垃圾邮件发送者往往使用固定的服务器群。

但IP黑名单也有局限。合法邮件服务器可能因为配置不当被劫持发送垃圾邮件,然后被列入黑名单,影响正常用户的邮件发送。更麻烦的是,垃圾邮件发送者开始使用僵尸网络——成千上万台被恶意软件感染的家用电脑——发送垃圾邮件。这些IP地址分散在全球各地,无法简单地用黑名单封锁。

2001年左右,规则引擎技术发展到了一个高峰。SpamAssassin这类系统集成了数百条规则:检查邮件头部的异常、分析正文的关键词密度、查询多个黑名单、验证发件人域名……每条规则都有一个分数,最终得分超过阈值就判定为垃圾邮件。这套机制比单纯的黑白名单复杂得多,但也暴露出规则引擎的根本问题:分数没有明确的数学意义。给"免费"加0.5分还是1.5分?这个决定缺乏科学依据,完全靠经验调参。

贝叶斯革命:让数据说话

2002年8月,Paul Graham发表了一篇题为"A Plan for Spam"的文章。这篇文章没有提出全新的算法——贝叶斯分类早在18世纪就被发明,1998年就有学者将其应用于垃圾邮件过滤——但它改变了整个行业的思维方式。

Paul Graham的核心洞察是:不要试图让过滤器理解什么是垃圾邮件,让它从数据中学习。他的方法出奇简单:收集一批垃圾邮件和正常邮件,统计每个词在两类邮件中出现的频率,然后用贝叶斯公式计算一个词"暗示垃圾邮件"的概率。当新邮件到来时,提取其中概率最高(最极端)的15个词,综合计算整封邮件是垃圾邮件的概率。

结果令人震惊:在Paul Graham的测试中,这个简单的方法抓住了99.5%的垃圾邮件,误报率低于0.03%。而他引用的Pantel和Lin 1998年的论文,使用类似方法只达到了92%的拦截率,误报率高达1.16%。这种差异的根源不在于算法本身,而在于实施细节。

Paul Graham在2003年的后续文章"Better Bayesian Filtering"中详细分析了这些细节。第一个关键点是不要忽略邮件头。早期的过滤器开发者认为邮件头"太乱",只分析正文。但邮件头恰恰是垃圾邮件的阿喀琉斯之踵:伪造的Received字段、不存在的域名、可疑的路由路径……这些都是极好的特征。第二个关键点是token的处理方式。Paul Graham发现,“free"出现在邮件主题和出现在正文中,暗示垃圾邮件的概率差异巨大——前者是98%,后者只有65%。通过区分token的上下文(主题、正文、URL等),过滤器的词汇量从23,000增长到187,000,判别能力大幅提升。

xychart-beta
    title "贝叶斯过滤器的拦截率与误报率演进"
    x-axis ["Pantel-Lin 1998", "Paul Graham 2002", "Paul Graham 2003"]
    y-axis "百分比" 0 --> 100
    bar [92, 99.5, 99.75]
    line [1.16, 0.03, 0.06]

贝叶斯过滤器有一个深层的优势:个性化。每个人的正常邮件都不同,一个程序员收到大量包含"Python"的邮件,一个医生收到大量包含"患者"的邮件。如果使用统一的全局过滤器,这些词可能被误判。但如果每个用户都有自己的概率表,那么"Python"对程序员来说就是正常词,“免费"对市场营销人员来说也可能是正常的。这种个性化不仅提高了准确率,还给垃圾邮件发送者制造了巨大的困难——他们无法针对性地优化邮件内容,因为每个人的过滤器都不同。

然而,贝叶斯过滤器并非完美。它需要一定数量的训练数据才能有效工作——对于新邮箱来说这是个问题。它也容易受到"贝叶斯投毒"攻击:垃圾邮件发送者在邮件中插入大量正常词汇,试图污染用户的概率表。更根本的是,贝叶斯假设词与词之间独立,这个假设在现实中并不成立。“免费"单独出现可能意味着垃圾邮件,但"免费软件”、“自由软件"中的"免费"则完全正常。

机器学习的百花齐放

贝叶斯分类器打开了一扇门:既然统计方法有效,那么其他机器学习算法是否也能派上用场?2000年代中期,垃圾邮件过滤成为机器学习研究的标准测试场。支持向量机(SVM)、决策树、随机森林、神经网络……几乎所有分类算法都被尝试过。

研究表明,不同算法各有优劣。在Enron数据集(一个广泛使用的垃圾邮件测试数据集)上,Bernoulli朴素贝叶斯达到了98.90%的准确率,而其他朴素贝叶斯变体约为91%。SVM在某些场景下表现优异,特别是在高维特征空间中。但所有机器学习方法都面临一个共同挑战:特征工程

早期的机器学习垃圾邮件过滤器需要人工提取特征:邮件长度、链接数量、特殊字符比例、发件人域名是否存在、HTML标签的比例……这些特征的质量直接决定了模型的上限。一个好的特征可能让模型性能提升几个百分点,而发现这样的特征需要大量的领域知识和反复试验。

特征工程的瓶颈在2010年代初期开始松动。研究者开始使用TF-IDF、词袋模型(Bag of Words)、N-gram等技术自动从文本中提取特征。更进一步,词嵌入(Word Embedding)技术如Word2Vec和GloVe能够将词语映射到连续的向量空间,捕捉词语之间的语义关系。这意味着模型不再需要人工定义"免费"和"免费软件"是不同的概念——它可以从数据中学习这种关系。

timeline
    title 垃圾邮件过滤技术演进时间线
    section 规则时代
        1978 : 第一封垃圾邮件
        1997 : RBL实时黑名单诞生
        2001 : SpamAssassin发布
    section 统计时代
        2002 : Paul Graham贝叶斯革命
        2003 : 改进版贝叶斯过滤器
    section 机器学习时代
        2005-2010 : SVM/决策树/随机森林
        2012 : 词嵌入技术成熟
    section 深度学习时代
        2015 : TensorFlow开源
        2018 : BERT预训练模型
        2019 : Gmail使用TensorFlow

深度学习:从手工特征到端到端学习

深度学习带来的最大变化是端到端学习。传统机器学习流程是:原始数据 → 特征工程 → 模型训练 → 预测。深度学习将特征工程也交给神经网络来完成。卷积神经网络(CNN)可以自动学习文本中的局部模式,循环神经网络(RNN)和长短期记忆网络(LSTM)可以捕捉序列依赖关系,注意力机制(Attention)可以聚焦于邮件中最重要的部分。

2018年,BERT(Bidirectional Encoder Representations from Transformers)的发布标志着预训练语言模型时代的到来。BERT在海量文本上学习了丰富的语言知识,然后可以迁移到垃圾邮件分类等下游任务。研究表明,在垃圾邮件检测上,微调后的BERT模型能够达到接近99%的准确率,显著超越传统机器学习方法。

但深度学习有一个实际部署的障碍:计算成本。BERT有超过1亿个参数,对一封邮件进行分类需要大量的计算资源。对于一个每天处理数十亿封邮件的服务来说,这种成本是不可接受的。这就是为什么Gmail直到2019年才开始大规模使用TensorFlow进行垃圾邮件过滤——不是因为深度学习技术不够成熟,而是因为工程实现的挑战。

Gmail的TensorFlow实践

2019年2月,Gmail宣布使用TensorFlow每天额外拦截1亿封垃圾邮件。这个数字背后的技术架构值得深入分析。

Gmail的垃圾邮件过滤是一个多层防御系统。第一层是基于IP声誉和发件人认证的过滤。发件人需要通过SPF(Sender Policy Framework)、DKIM(DomainKeys Identified Mail)和DMARC(Domain-based Message Authentication, Reporting and Conformance)三项验证。这三项技术构成了现代电子邮件身份验证的基石:

  • SPF:域名所有者在DNS中发布一个列表,声明哪些IP地址可以代表该域名发送邮件。接收方可以查询这个列表来验证发件人是否被授权。
  • DKIM:发件人使用私钥对邮件进行数字签名,公钥发布在DNS中。接收方可以验证签名,确认邮件在传输过程中未被篡改。
  • DMARC:告诉接收方如果SPF或DKIM验证失败该如何处理——隔离、拒绝或放行,同时向域名所有者发送报告。

这三项认证不仅直接过滤了大量伪造发件人地址的垃圾邮件,还为后续的内容过滤提供了可靠的特征。一封未通过认证的邮件,即使内容看起来完全正常,也极有可能是垃圾邮件。

第二层是基于规则和启发式方法的过滤。这一层类似于早期的SpamAssassin,但规则集更大、更复杂,并且不断更新。规则可以快速响应新型的垃圾邮件攻击,在机器学习模型更新之前提供保护。

第三层是机器学习模型。这里Gmail使用了一种务实的策略:不是用最复杂的深度学习模型,而是用最适合生产环境的模型。Google的工程师发现,使用良好的特征工程配合逻辑回归,就能达到与深度学习相近的效果,而计算成本只有后者的零头。TensorFlow的价值不在于使用最先进的神经网络架构,而在于:

  1. 规模化训练:可以在海量数据上快速训练和更新模型
  2. 实时预测:低延迟的在线推理服务
  3. 实验效率:TensorBoard等工具让工程师能够快速评估新模型的效果

Gmail声称其垃圾邮件过滤达到了99.9%的拦截率,误报率低于0.05%。这个数字意味着,每1000封垃圾邮件中只有不到1封能进入用户收件箱,而每2000封正常邮件中只有不到1封会被误判。这种精度是四十七年技术积累的结果,也是多层防御策略的胜利。

攻防博弈:没有终点的战争

垃圾邮件过滤不是静态的技术问题,而是一场动态的攻防博弈。每当过滤器进步,垃圾邮件发送者就会进化。

对抗性攻击是垃圾邮件发送者的常用手段。他们尝试各种方法来欺骗过滤器:在邮件中插入不可见字符或空白字符来分割敏感词汇、使用图片代替文字来绕过文本分析、伪造邮件头使其看起来来自可信来源、在邮件底部添加大量正常文本来稀释垃圾词汇的密度……

研究人员发现,通过在垃圾邮件中添加精心选择的"良性"词汇,可以将贝叶斯分类器的误分类率从几乎为零提升到超过50%。更隐蔽的是"反向贝叶斯投毒"攻击:攻击者注册一个邮箱服务,然后故意将大量垃圾邮件标记为正常邮件,从而污染该服务的全局过滤器,影响所有用户。

图片垃圾邮件(Image Spam)是另一个挑战。垃圾邮件发送者将广告内容渲染成图片,然后作为附件发送。传统的文本过滤器完全无法分析图片内容。早期的应对方法是OCR(光学字符识别),提取图片中的文字再进行分析。但垃圾邮件发送者开始使用扭曲字体、噪点干扰、背景花纹等技术来对抗OCR。深度学习的出现改变了这个局面——卷积神经网络可以直接对图片进行分类,不需要先进行文字提取,而且对各种扭曲和干扰都有很强的鲁棒性。

开源生态:从SpamAssassin到Rspamd

垃圾邮件过滤领域有一个活跃的开源生态。Apache SpamAssassin是其中的老牌项目,从2001年至今仍在活跃开发。它采用Perl编写,使用基于规则的评分系统,每条规则由社区贡献和维护。SpamAssassin的优势在于成熟稳定、规则丰富,但性能是它的短板——处理一封邮件需要数十毫秒,对于高流量的邮件服务器来说是瓶颈。

Rspamd是新一代的开源垃圾邮件过滤器,使用C++编写,性能比SpamAssassin快13倍。它不仅支持传统的规则评分,还内置了统计学习模块(包括贝叶斯和神经网络)、DKIM/SPF/DMARC验证、模糊哈希匹配等功能。更重要的是,Rspamd的设计理念是"快速失败”——先执行最快的检查,只有在前面的层无法确定时才执行更复杂的分析。这种分层架构在保证准确率的同时大幅提升了吞吐量。

开源工具的价值不仅在于免费,更在于透明。用户可以查看每条规则的具体内容,理解为什么某封邮件被标记为垃圾邮件。这种可解释性在企业环境中尤为重要——当一封重要的商业邮件被误判时,系统管理员需要知道原因并调整规则。深度学习模型的"黑盒"特性在这一点上是劣势,也是为什么许多企业仍在使用传统机器学习方法。

数据集与评估:如何衡量过滤器的好坏

垃圾邮件过滤的评估比表面看起来更复杂。最直观的指标是准确率(Accuracy):正确分类的邮件占总邮件的比例。但准确率会掩盖一个关键问题:类别不平衡。假设垃圾邮件占所有邮件的50%,一个总是回答"正常"的预测器也有50%的准确率,但它毫无用处。

真正重要的是两个指标:召回率(Recall,多少比例的垃圾邮件被正确识别)和精确率(Precision,被标记为垃圾邮件的邮件中真正是垃圾邮件的比例)。召回率和精确率之间存在权衡:更严格的阈值会提高精确率但降低召回率,更宽松的阈值则相反。

对于垃圾邮件过滤来说,误报(正常邮件被标记为垃圾邮件)比漏报(垃圾邮件进入收件箱)严重得多。一封漏网的垃圾邮件只是 annoyance,一封被误判的求职面试通知可能是灾难。因此,评估时通常会为误报赋予更高的惩罚权重。F-beta分数(Fβ-score)就是为此设计的,当β<1时,精确率的权重高于召回率。

垃圾邮件研究的标准数据集包括Enron数据集(来自安然公司的真实邮件,约33,000封)、SpamAssassin公共语料库、LingSpam数据集等。这些数据集虽然年代较早,但仍然是算法比较的标准基准。需要注意的是,数据集的质量直接影响研究结果——标注错误、类别不平衡、时间漂移都会影响结论的可靠性。

未来展望:大模型时代的垃圾邮件战争

大语言模型(LLM)的出现为垃圾邮件过滤带来了新的可能,也带来了新的威胁。

从防御角度看,LLM能够理解邮件的语义和上下文,而不是仅仅依赖词汇频率和浅层特征。“这是一个限时优惠"和"这是我的研究论文的限时存取"都包含"限时"一词,但语义完全不同。LLM可以捕捉这种差异,做出更准确的判断。一些研究已经尝试将GPT等模型应用于垃圾邮件检测,初步结果显示出潜力。

但攻击者也在使用LLM。他们可以用LLM生成语法正确、内容连贯的垃圾邮件,而不是使用生硬的模板。他们可以用LLM改写邮件内容,规避基于关键词的检测。他们甚至可以用LLM自动测试和优化邮件内容,找到绕过特定过滤器的方法。这场攻防博弈正在进入一个新的阶段:AI对AI

更根本的问题是:垃圾邮件的定义在模糊。“内容营销邮件”、“产品更新通知”、“个性化推荐”……这些是用户订阅的邮件,但很多人也会把它们视为垃圾。垃圾邮件过滤正在从二分类问题(垃圾/正常)演变为多分类甚至连续评分问题。Gmail的做法是提供多个分类标签:主要、社交、促销、更新、论坛。用户还可以将特定发件人的邮件标记为"重要"或"垃圾”,系统会学习这些偏好。

这种个性化、多维度的分类,可能才是垃圾邮件过滤的最终形态。每个人的邮箱都是一个独特的生态系统,过滤器需要理解每个用户的偏好和上下文。这不是一个可以完全自动化的问题——它需要人机协作,需要用户反馈,需要持续学习。

从Gary Thuerk的那封ARPANET邮件到现在,四十七年过去了。垃圾邮件从一种新奇的技术滥用,演变成了一个数十亿美元的黑灰产业,再演变成了网络安全攻防的经典战场。在这个过程中,我们发明了贝叶斯过滤、支持向量机、深度学习、预训练模型……这些技术早已超越了垃圾邮件领域,成为人工智能大厦的基石。也许这就是这场战争的意义:它迫使我们不断突破技术的边界,而突破的成果惠及了更广阔的世界。


参考资料

  1. Paul Graham. “A Plan for Spam.” August 2002. https://paulgraham.com/spam.html
  2. Paul Graham. “Better Bayesian Filtering.” January 2003. https://paulgraham.com/better.html
  3. Google. “Spam does not bring us joy—ridding Gmail of 100 million more spam messages with TensorFlow.” February 2019. https://workspace.google.com/blog/product-announcements/ridding-gmail-of-100-million-more-spam-messages-with-tensorflow
  4. Patrick Pantel, Dekang Lin. “SpamCop—A Spam Classification & Organization Program.” AAAI-98 Workshop on Learning for Text Categorization, 1998.
  5. Mehran Sahami et al. “A Bayesian Approach to Filtering Junk E-Mail.” AAAI-98 Workshop on Learning for Text Categorization, 1998.
  6. Cloudflare. “什么是 DMARC、DKIM 和 SPF?” https://www.cloudflare.com/learning/email-security/dmarc-dkim-spf/
  7. Apache SpamAssassin. Official Documentation. https://spamassassin.apache.org/
  8. Rspamd. “Fast, free and open-source spam filtering system.” https://rspamd.com/
  9. Statista. “Spam e-mail traffic share monthly 2024-2025.” https://www.statista.com/statistics/420391/spam-email-traffic-share/
  10. Enron Email Dataset. Kaggle. https://www.kaggle.com/datasets/wcukierski/enron-email-dataset