B.1 朴素贝叶斯分类器
本节介绍多项式朴素贝叶斯分类器 。之所以这样命名,是因为它是一种贝叶斯分类器,并对特征之间的相互作用作了一个简化的(“朴素的”)假设。
分类器的直觉如图 B.1 所示。我们把文本文档表示成词袋 (bag of words),即忽略词序、只保留各词在文档中出现频率的无序词集合。图中的例子不再保留“I love this movie”和“I would recommend it”等短语的词序,而只记录 I 在整段文字中出现 5 次、it 出现 6 次,love 、recommend 和 movie 各出现 1 次,依此类推。
图 B.1 多项式朴素贝叶斯分类器应用于电影评论的直觉。忽略词的位置(词袋假设),并利用每个词的出现频率。
朴素贝叶斯是概率分类器:对于文档 d d d ,它从所有类别 c ∈ C c\in C c ∈ C 中返回给定该文档时后验概率最大的类别 c ^ \hat c c ^ 。式(B.1)中的帽号表示“我们对正确类别的估计”,argmax \operatorname{argmax} argmax 表示选出使某函数(这里是概率 P ( c ∣ d ) P(c\mid d) P ( c ∣ d ) )最大的自变量(这里是类别 c c c )。
c ^ = argmax c ∈ C P ( c ∣ d ) (B.1) \hat c=\operatorname*{argmax}_{c\in C}P(c\mid d)\tag{B.1} c ^ = c ∈ C argmax P ( c ∣ d ) ( B.1 ) 这种贝叶斯推断思想自 Bayes(1763)的工作以来就已为人所知,Mosteller and Wallace(1964)首次将其用于文本分类。贝叶斯分类的直觉是利用贝叶斯公式,把式(B.1)转换成具有一些有用性质的其他概率。式(B.2)给出的贝叶斯公式可把任意条件概率 P ( x ∣ y ) P(x\mid y) P ( x ∣ y ) 分解为另外三个概率:
P ( x ∣ y ) = P ( y ∣ x ) P ( x ) P ( y ) (B.2) P(x\mid y)=\frac{P(y\mid x)P(x)}{P(y)}\tag{B.2} P ( x ∣ y ) = P ( y ) P ( y ∣ x ) P ( x ) ( B.2 ) 将式(B.2)代入式(B.1),得到:
c ^ = argmax c ∈ C P ( c ∣ d ) = argmax c ∈ C P ( d ∣ c ) 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} c ^ = c ∈ C argmax P ( c ∣ d ) = c ∈ C argmax P ( d ) P ( d ∣ c ) P ( c ) ( B.3 ) 我们可以删去分母 P ( d ) P(d) P ( d ) 来简化式(B.3)。这是因为,对每个可能类别计算时,P ( d ) P(d) P ( d ) 都不变:我们始终在为同一篇文档 d d d 寻找最可能类别,该文档的概率 P ( d ) P(d) P ( d ) 必然相同。因此,只需选择使下式最大的类别:
c ^ = argmax c ∈ C P ( c ∣ d ) = argmax c ∈ C P ( d ∣ c ) 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} c ^ = c ∈ C argmax P ( c ∣ d ) = c ∈ C argmax P ( d ∣ c ) P ( c ) ( B.4 ) 朴素贝叶斯称为生成模型 ,因为式(B.4)隐含了一种文档生成假设:先从 P ( c ) P(c) P ( c ) 中采样一个类别,再从 P ( d ∣ c ) P(d\mid c) P ( d ∣ c ) 中采样生成各个词。(实际上,按这一过程可以设想生成虚构文档,至少能生成它们的词频。)第 4 章将进一步讨论生成模型的这一直觉。
回到分类问题:给定文档 d d d ,我们通过选择两个概率乘积最大的类别,求出最可能类别 c ^ \hat c c ^ 。这两个概率是类别的先验概率 P ( c ) P(c) P ( c ) 和文档的似然 P ( d ∣ c ) P(d\mid c) P ( d ∣ c ) :
c ^ = argmax c ∈ C P ( d ∣ c ) ⏟ 似然 P ( c ) ⏟ 先验 (B.5) \hat c=\operatorname*{argmax}_{c\in C}\underbrace{P(d\mid c)}_{\text{似然}}\underbrace{P(c)}_{\text{先验}}\tag{B.5} c ^ = c ∈ C argmax 似然 P ( d ∣ c ) 先验 P ( c ) ( B.5 ) 不失一般性,可以把文档 d d d 表示为一组特征 f 1 , f 2 , … , f n f_1,f_2,\ldots,f_n f 1 , f 2 , … , f n :
c ^ = argmax c ∈ C P ( f 1 , f 2 , … , f n ∣ c ) ⏟ 似然 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} c ^ = c ∈ C argmax 似然 P ( f 1 , f 2 , … , f n ∣ c ) 先验 P ( c ) ( B.6 ) 遗憾的是,式(B.6)仍然很难直接计算。如果不作简化假设,估计每一种可能特征组合(例如每一种可能的词和位置集合)的概率,需要数量巨大的参数和大得不可行的训练集。因此,朴素贝叶斯分类器作出两个简化假设。
第一个是上面直观讨论过的词袋假设 :我们假设位置无关紧要,love 出现在文档的第 1、第 20 或最后一个位置,对分类具有相同作用。因此,特征 f 1 , f 2 , … , f n f_1,f_2,\ldots,f_n f 1 , f 2 , … , f n 只编码词的身份,不编码位置。
第二个通常称为朴素贝叶斯假设 :给定类别 c c c 后,各个 P ( f i ∣ c ) P(f_i\mid c) P ( f i ∣ c ) 条件独立,因此可以“朴素地”相乘:
P ( f 1 , f 2 , … , f n ∣ c ) = P ( f 1 ∣ c ) P ( f 2 ∣ c ) ⋯ P ( f n ∣ c ) (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} P ( f 1 , f 2 , … , f n ∣ c ) = P ( f 1 ∣ c ) P ( f 2 ∣ c ) ⋯ P ( f n ∣ c ) ( B.7 ) 所以,朴素贝叶斯分类器选择类别的最终公式是:
c N B = argmax c ∈ C P ( c ) ∏ f ∈ F P ( f ∣ c ) (B.8) c_{NB}=\operatorname*{argmax}_{c\in C}P(c)\prod_{f\in F}P(f\mid c)\tag{B.8} c NB = c ∈ C argmax P ( c ) f ∈ F ∏ P ( f ∣ c ) ( B.8 ) 为把朴素贝叶斯用于文本,我们像上面建议的那样,以文档中的每个词作为一个特征,并通过遍历文档中的每个词位来考虑各词:
c N B = argmax c ∈ C P ( c ) ∏ i ∈ positions P ( w i ∣ c ) (B.9) c_{NB}=\operatorname*{argmax}_{c\in C}P(c)\prod_{i\in\text{positions}}P(w_i\mid c)\tag{B.9} c NB = c ∈ C argmax P ( c ) i ∈ positions ∏ P ( w i ∣ c ) ( B.9 ) 与语言模型的计算一样,朴素贝叶斯为避免数值下溢并提高速度,通常在对数空间中计算。因此式(B.9)通常写成:
c N B = argmax c ∈ C ( log P ( c ) + ∑ i ∈ positions log P ( w i ∣ c ) ) (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} c NB = c ∈ C argmax ⎝ ⎛ log P ( c ) + i ∈ positions ∑ log P ( w i ∣ c ) ⎠ ⎞ ( B.10 ) 在对数空间中考虑特征时,式(B.10)把预测类别计算成输入特征的线性函数。像朴素贝叶斯和逻辑回归这样,用输入的线性组合做分类决策的分类器称为线性分类器 。