Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

B.1 朴素贝叶斯分类器

本节介绍多项式朴素贝叶斯分类器。之所以这样命名,是因为它是一种贝叶斯分类器,并对特征之间的相互作用作了一个简化的(“朴素的”)假设。

分类器的直觉如图 B.1 所示。我们把文本文档表示成词袋(bag of words),即忽略词序、只保留各词在文档中出现频率的无序词集合。图中的例子不再保留“I love this movie”和“I would recommend it”等短语的词序,而只记录 I 在整段文字中出现 5 次、it 出现 6 次,loverecommendmovie 各出现 1 次,依此类推。

图 B.1 多项式朴素贝叶斯分类器应用于电影评论的直觉。忽略词的位置(词袋假设),并利用每个词的出现频率。

朴素贝叶斯是概率分类器:对于文档 dd,它从所有类别 cCc\in C 中返回给定该文档时后验概率最大的类别 c^\hat c。式(B.1)中的帽号表示“我们对正确类别的估计”,argmax\operatorname{argmax} 表示选出使某函数(这里是概率 P(cd)P(c\mid d))最大的自变量(这里是类别 cc)。

c^=argmaxcCP(cd)(B.1)\hat c=\operatorname*{argmax}_{c\in C}P(c\mid d)\tag{B.1}

这种贝叶斯推断思想自 Bayes(1763)的工作以来就已为人所知,Mosteller and Wallace(1964)首次将其用于文本分类。贝叶斯分类的直觉是利用贝叶斯公式,把式(B.1)转换成具有一些有用性质的其他概率。式(B.2)给出的贝叶斯公式可把任意条件概率 P(xy)P(x\mid y) 分解为另外三个概率:

P(xy)=P(yx)P(x)P(y)(B.2)P(x\mid y)=\frac{P(y\mid x)P(x)}{P(y)}\tag{B.2}

将式(B.2)代入式(B.1),得到:

c^=argmaxcCP(cd)=argmaxcCP(dc)P(c)P(d)(B.3)\hat c=\operatorname*{argmax}_{c\in C}P(c\mid d)=\operatorname*{argmax}_{c\in C}\frac{P(d\mid c)P(c)}{P(d)}\tag{B.3}

我们可以删去分母 P(d)P(d) 来简化式(B.3)。这是因为,对每个可能类别计算时,P(d)P(d) 都不变:我们始终在为同一篇文档 dd 寻找最可能类别,该文档的概率 P(d)P(d) 必然相同。因此,只需选择使下式最大的类别:

c^=argmaxcCP(cd)=argmaxcCP(dc)P(c)(B.4)\hat c=\operatorname*{argmax}_{c\in C}P(c\mid d)=\operatorname*{argmax}_{c\in C}P(d\mid c)P(c)\tag{B.4}

朴素贝叶斯称为生成模型,因为式(B.4)隐含了一种文档生成假设:先从 P(c)P(c) 中采样一个类别,再从 P(dc)P(d\mid c) 中采样生成各个词。(实际上,按这一过程可以设想生成虚构文档,至少能生成它们的词频。)第 4 章将进一步讨论生成模型的这一直觉。

回到分类问题:给定文档 dd,我们通过选择两个概率乘积最大的类别,求出最可能类别 c^\hat c。这两个概率是类别的先验概率 P(c)P(c) 和文档的似然 P(dc)P(d\mid c)

c^=argmaxcCP(dc)似然P(c)先验(B.5)\hat c=\operatorname*{argmax}_{c\in C}\underbrace{P(d\mid c)}_{\text{似然}}\underbrace{P(c)}_{\text{先验}}\tag{B.5}

不失一般性,可以把文档 dd 表示为一组特征 f1,f2,,fnf_1,f_2,\ldots,f_n

c^=argmaxcCP(f1,f2,,fnc)似然P(c)先验(B.6)\hat c=\operatorname*{argmax}_{c\in C}\underbrace{P(f_1,f_2,\ldots,f_n\mid c)}_{\text{似然}}\underbrace{P(c)}_{\text{先验}}\tag{B.6}

遗憾的是,式(B.6)仍然很难直接计算。如果不作简化假设,估计每一种可能特征组合(例如每一种可能的词和位置集合)的概率,需要数量巨大的参数和大得不可行的训练集。因此,朴素贝叶斯分类器作出两个简化假设。

第一个是上面直观讨论过的词袋假设:我们假设位置无关紧要,love 出现在文档的第 1、第 20 或最后一个位置,对分类具有相同作用。因此,特征 f1,f2,,fnf_1,f_2,\ldots,f_n 只编码词的身份,不编码位置。

第二个通常称为朴素贝叶斯假设:给定类别 cc 后,各个 P(fic)P(f_i\mid c) 条件独立,因此可以“朴素地”相乘:

P(f1,f2,,fnc)=P(f1c)P(f2c)P(fnc)(B.7)P(f_1,f_2,\ldots,f_n\mid c)=P(f_1\mid c)P(f_2\mid c)\cdots P(f_n\mid c)\tag{B.7}

所以,朴素贝叶斯分类器选择类别的最终公式是:

cNB=argmaxcCP(c)fFP(fc)(B.8)c_{NB}=\operatorname*{argmax}_{c\in C}P(c)\prod_{f\in F}P(f\mid c)\tag{B.8}

为把朴素贝叶斯用于文本,我们像上面建议的那样,以文档中的每个词作为一个特征,并通过遍历文档中的每个词位来考虑各词:

cNB=argmaxcCP(c)ipositionsP(wic)(B.9)c_{NB}=\operatorname*{argmax}_{c\in C}P(c)\prod_{i\in\text{positions}}P(w_i\mid c)\tag{B.9}

与语言模型的计算一样,朴素贝叶斯为避免数值下溢并提高速度,通常在对数空间中计算。因此式(B.9)通常写成:

cNB=argmaxcC(logP(c)+ipositionslogP(wic))(B.10)c_{NB}=\operatorname*{argmax}_{c\in C}\left(\log P(c)+\sum_{i\in\text{positions}}\log P(w_i\mid c)\right)\tag{B.10}

在对数空间中考虑特征时,式(B.10)把预测类别计算成输入特征的线性函数。像朴素贝叶斯和逻辑回归这样,用输入的线性组合做分类决策的分类器称为线性分类器