一、问题背景
如何自动过滤垃圾短信/垃圾邮件?三种递进方案:
| 方案 | 思路 | 局限 |
|---|---|---|
| 黑名单 | 散列表/布隆过滤器存储号码 | 新号码无法拦截 |
| 规则匹配 | 预设关键词/格式规则 | 规则有限,易被绕过 |
| 概率统计 | 朴素贝叶斯分类 | 需要大量标注样本 |
二、朴素贝叶斯原理
2.1 贝叶斯公式
[ P(A|B) = \frac{P(B|A) \times P(A)}{P(B)} ]
通俗理解:已知事件 B 发生,反推事件 A 发生的概率。
2.2 垃圾短信分类
目标:计算一条短信是垃圾短信的概率。
[ P(\text{垃圾} | W_1, W_2, ..., W_n) = \frac{P(W_1, W_2, ..., W_n | \text{垃圾}) \times P(\text{垃圾})}{P(W_1, W_2, ..., W_n)} ]
2.3 "朴素"假设
直接计算联合概率 (P(W_1, W_2, ..., W_n | \text{垃圾})) 几乎不可能(样本中不存在完全相同的词组合)。
朴素假设:各词的出现相互独立,则:
[ P(W_1, W_2, ..., W_n | \text{垃圾}) = \prod_{i=1}^{n} P(W_i | \text{垃圾}) ]
每个 (P(W_i | \text{垃圾})) 都可以通过样本统计轻松获得。