在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

朴素贝叶斯

朴素贝叶斯用类别先验乘以各特征的类条件概率,比较各类得分。文本的多项式版本会把每个词的出现次数计入。所谓“朴素”,是给定类别后把词出现视为独立;真实语言通常不满足这个假设。

可以把每个词看作独立发言者。训练决定它支持哪类以及支持强度;同一个词重复出现,就重复加同样的证据。模型不会主动检查两个特征是否重复表达了同一件事。

工作原理

贝叶斯公式给出 P(c|d)∝P(c)P(d|c)。直接估计所有文档的概率不可行,于是把文档中的 token 分解为:

P(c|d) ∝ P(c) · P(w₁|c) · … · P(wₙ|c)

多项式模型省略的文档组合系数对各类相同,不影响比较。先验 P(c) 来自该类文档比例,P(w|c) 来自该类的 token 计数,分母口径不同。

若一个词在某类没出现,原始概率为零,会把整个乘积压成零。加法平滑给固定词表中的每项加伪计数:

P(w|c) = (count(w,c)+α)/(total_c+α|V|)

α=1 常称 Laplace,其他正 α 可称 Lidstone。分母也必须加 α|V|,才保持类内词概率和为一。

长文档连乘小概率可能数值下溢,具体长度取决于概率和精度。改用对数:

score(c)=log P(c)+Σ log P(w|c)

对数单调,类别排序不变。动画画的是 spam 对 ham 的对数优势比:一个词把优势比乘上固定因子,在对数轴上就平移固定距离。

逐步演示

八封训练邮件:spam 3、ham 5,词表 23 项,spam 共 12 个 token、ham 共 20。查询是 free money meeting now,α=1。

  1. 先验。 spam:ham 从 3:5=0.60:1 开始,标记在中心左边。若训练中 ham 占 99%,先验就会强烈偏向 ham;这不等于已经读取邮件证据。
  2. free。 spam 出现 3 次,ham 1 次,后者来自 free coffee in the kitchen。平滑后 (3+1)/(12+23)=0.1143、(1+1)/(20+23)=0.0465,比值约 2.46,优势比变 1.47:1。free 不是绝对垃圾词,只是有一定权重。
  3. money。 spam 共 1 次、ham 0 次,概率 0.0571 对 0.0233,仍乘 2.46,到 3.62:1。ham 未见也不会得到无限权重。
  4. meeting。 spam 0、ham 2,0.0286 对 0.0698,乘 0.41,优势比降到 1.48:1。轴上的左移表示反对 spam,并非流程倒退。
  5. now。 spam 2、ham 0,0.0857 对 0.0233,乘 3.69,最终 5.47:1。
  6. 判定。 score(spam)=−12.02 高于 score(ham)=−13.72,返回 spam。归一化后 P(spam|doc)=0.8454。argmax 只需比较分数,概率是否校准是另一项检验。

重复词怎样放大优势比

把查询改成 free money meeting now now now。额外两个 now 各乘一次 3.69,优势比从 5.47:1 到 74.28:1,模型后验从 0.8454 到 0.9867。放大约 13.6 倍的是优势比,不是正确率或概率。

在这个人为重复实验中,没有加入新的邮件事实,却多算了两个相同方向的贡献。类别仍为 spam,确信程度却明显上升。每个 now 在对数轴上的步长相同。

类似问题也出现在相关词、一个词及含它的 bigram、标题和正文重复字段中。相关性可能让独立乘积高估证据,但不能反过来保证排序一定可靠或每次重复都毫无信息。排名与概率校准都应在留出数据上评价。

时间与空间复杂度

阶段成本
N 篇平均 L 词的训练O(NL),一遍计数
单篇预测O(|C|L),每类每词一次查表与加法
计数表O(|C||V|),可按稀疏方式实现

预测成本不再随训练文档数量直接增加,而取决于文档长度、类别数和查表实现。这使它适合用作成本较低的文本分类基线,但速度与准确率都应按实际数据测量。

边界情况

  • 两类都没见过的词。 本课固定词表,直接忽略。输入 urgent invoice attached 时全部丢弃,只剩先验,ham 为 62.5%;没有利用这封邮件的内容。
  • α=0。 默认查询的 money 让 ham 乘积为零,meeting 又让 spam 为零,两分数都是 −∞。两个乘积之和为零,后验 0 / 0 没有定义,本课因此明确不给预测,而不是让平手规则挑一个类;有限分数的精确平手才按规则处理。
  • α过大。 α=5 给每类加入 115 个伪计数,对比真实的 12 和 20。查询优势比从 5.47:1 缩到 1.23:1,接近均势。
  • 精确平手。 本课按字母顺序先选 ham。实际系统应明确顺序,避免无意依赖字典插入次序。
  • 重复词。 多项式 NB 按次数投票,now 三次算三次。Bernoulli NB 使用出现与否,并通常包含未出现特征的项,因此重复 now 不会额外贡献,但它不是简单删重后完全相同的模型。

常见错误

  • 把 0.99 后验解释成“类似邮件中 99% 是垃圾”。未经校准,独立性假设下的数值不保证有此频率含义。
  • 只平滑分子。分母漏掉 α|V| 会使词概率和超过一,并扭曲类别比较。
  • 给未知词临时加零计数特征。α/(total_c+α|V|) 的分母各类不同,会让无意义输入持续偏向训练 token 少的类。本课忽略词表外 token;其他模型须有明确的未知词训练策略。
  • 对长文直接连乘。下溢会让所有类变零,应加对数,再用稳定归一化求后验。
  • 用总频次当权重。money 在整个训练集只出现一次,free 总计四次,但二者类间比值同为约 2.46。判别作用来自类别比,不是频次本身。

模型选择与限制

多项式 NB 适合研究词频信号;Bernoulli NB 适合把出现与否作为特征;Gaussian NB 则对连续特征使用每类正态密度,仍保留条件独立假设。是否适合某类文本应由验证决定,不能只靠长短。

若要使用概率做决策,可在留出数据上检验并校准,例如 Platt scaling 或保序回归。对构造性冗余的特征,逻辑回归等联合拟合权重的方法能调整共同贡献,但也需正则和验证,不保证自动消除所有相关性问题。

简化范围

这里的多项式 NB 由八封邮件实时计算计数、概率和分数,没有手填演示结果。八封邮件不构成可部署的过滤器。实际任务还要决定正文、标题、URL、字符 n-gram、TF-IDF 或特征选择,以及更新与对抗规避策略。词表更大时,零概率、过度平滑与相关特征重复计证据的问题仍然存在。