0%

寓言:贝郎中的分简术 (贝叶斯垃圾邮件过滤)

寓言:贝郎中的分简术

大治年间,天下承平,商贾云集。京城通政司的信房每天都要接收来自全国各地成千上万的竹简。

起初,这些竹简多是各地官员汇报旱涝灾情、秋收粮草的军国大事。但渐渐地,信房的文书们发现,竹简里混入了大量毫无用处的“废简”。有江湖道士推销“长生仙丹”的,有西域商人声称“稳赚不赔”寻找合伙的,还有假冒远房亲戚借钱的。

文书们苦不堪言。他们每天必须逐字逐句阅读每一枚竹简,才能判断这是十万火急的边关战报,还是骗人钱财的无稽之谈。由于废简太多,真正重要的“要简”常常被积压,险些误了国家大事。

通政司里有一位名叫贝晔的郎中,精通算学。他见文书们日渐憔悴,便立下军令状:“给我一月时间,我能让信房只留要简,片纸废简皆不得入内。”

众人皆不信。贝晔不慌不忙,他并未教文书们如何去辨别骗子的语气,而是让人把过去一年里已经确认的“废简”堆在左边,确认的“要简”堆在右边。

随后,贝晔雇了几十个账房先生,什么都不做,只负责“拆字”。

他让账房先生统计:在左边的十万卷废简中,“仙丹”二字出现了多少次?“稳赚”出现了多少次?“速汇”出现了多少次?同样,右边的十万卷要简中,“粮草”、“水利”、“流寇”又各自出现了多少次?

一月后,贝晔编纂了一本《字眼概率大账》。

这天,信使送来一卷新竹简,文书刚要解开绳结细读,贝晔拦住他,只扫了一眼简牍上的几个词:“绝密”、“祖传”、“金锭”、“速来”。

贝晔翻开大账,拨动算盘:“‘绝密’一词,在过往的废简中出现过三千次,在要简中只出现过五十次;‘金锭’在废简中出现两千次,要简中三十次……综合这几个字眼同时出现的几率来算,此简为废简的可能,已达九成九。”

贝晔判定:“烧了,不必细看。”

文书半信半疑地打开那卷原本要烧掉的竹简,果然是一封声称在深山挖到前朝宝库,需要一点盘缠去运宝的骗子信件。

众人大惊,奉若神明。此后,信房再也不用逐句读信。每来一简,只提取其中几个特殊的字眼,对照贝晔的大账一算,便知真伪。

后来,江湖骗子们听闻了这套阵法,便狡猾地改变了用词。他们不再写“仙丹”,改写“神药”;不再写“金锭”,改写“通宝”。

文书们本以为贝晔的阵法要失效了,谁知贝晔微微一笑:“大账并非死物。”每当有漏网的废简被识破,贝晔就会把这卷新废简扔进左边的库房,重新统计字眼。渐渐地,“神药”和“通宝”在废简中出现的数字水涨船高,很快又被大账精准地挡在了门外。

通政司自此纲纪肃然,贝晔的这套算账之法,也被后人称为“贝氏分简术”。


概念解析:贝叶斯垃圾邮件过滤 (Bayesian Spam Filtering)

在上面的寓言中,贝晔郎中使用的“分简术”,正是计算机科学中极为经典的贝叶斯垃圾邮件过滤模型。这个概念的核心不是去“理解”邮件的含义,而是利用统计学 and 概率论来计算一封邮件是垃圾邮件的可能性。

以下是故事与真实技术概念的对应关系:

  • 贝晔郎中:代表托马斯·贝叶斯 (Thomas Bayes) 提出的贝叶斯定理,以及基于该定理的分类算法。
  • 废简与要简的分类堆放:代表机器学习中的**训练集 (Training Data)**。过滤器必须先“吃下”大量已知是垃圾邮件 (Spam) 和正常邮件 (Ham) 的样本,才能进行学习。
  • 账房先生拆字统计:代表特征提取 (Feature Extraction) 和词频统计。系统会将邮件拆分成一个个词语(Token),并计算这些词语在垃圾邮件和正常邮件中出现的频率。
  • 《字眼概率大账》:代表训练后生成的概率模型。模型知道“免费”、“中奖”、“伟哥”这类词在垃圾邮件中出现的概率极高,而在正常邮件中概率极低。
  • 综合字眼计算判定:代表朴素贝叶斯分类器 (Naive Bayes Classifier) 的核心运作。当一封新邮件到来时,系统会提取其中的词汇,并使用贝叶斯定理计算在包含这些特定词汇的条件下,这封邮件是垃圾邮件的后验概率。

其背后的核心数学逻辑是贝叶斯定理
$$P(Spam|Words) = \frac{P(Words|Spam)P(Spam)}{P(Words)}$$

在实际的垃圾邮件过滤中,假设一封邮件包含词汇 $W_1, W_2, … W_n$,计算它是垃圾邮件 ($S$) 的概率公式通常展开为:
$$P(S|W_1, …, W_n) = \frac{P(S) \prod P(W_i|S)}{P(S) \prod P(W_i|S) + P(H) \prod P(W_i|H)}$$
(其中 $S$ 代表垃圾邮件, $H$ 代表正常邮件)

  • 骗子改换词汇与大账的持续更新:代表贝叶斯过滤器的**自适应与持续学习能力 (Adaptive Learning)**。垃圾邮件发送者会不断改变策略(例如将 “Viagra” 写成 “V1agra”),但只要用户手动将漏网的邮件标记为“垃圾邮件”,贝叶斯过滤器就会将这些新词汇纳入计算库,重新调整概率权重。这种“魔高一尺,道高一丈”的动态更新,是贝叶斯过滤器在早期互联网时代大获成功的关键。