朴素贝叶斯(Naive Bayes)模型简介

朴素贝叶斯模型是一个简单却很重要的模型,在文本分类中,由于它出奇的简单实现和令人惊讶的表现,因此实际应用中,它都值得是第一个尝试的基准模型。本文接下来将从文本分类这个具体应用中介绍朴素贝叶斯模型。

文本分类问题

在文本分类中,我们面临的问题是给定一个文本 x⃗ =[x1,x2,...,xi,...,xn] ,其中 xi 从原始文本抽出来的一个特征,可以是单个单词或者是一个ngram特征,或者是一个正则表达式特征。我们希望有一个模型可以来预测这个特定文本的标签 y ,在邮件垃圾分类中,y可以是指”垃圾邮件”或”非垃圾邮件”。这就是文本分类问题的基本描述,不同的分类模型对此问题有不同的看法,这些不同的看法中,大致可以分为两大派别,一种是”判别式模型(discriminative Model)”,比如SVM或者Logistic回归,他们直接对问题进行建模,得出如下模型:

p(y|x⃗ )

另一派是不直接对问题建模,而是从生成(generative)角度去看待问题,也就是”生成式模型(generative model)”,比如我们本文的主角Naive Bayes就是属于这种模型,与判别式模型不同,生成式模型对问题进行联合建模,从而得出如下模型:
p(y,x⃗ )

朴素贝叶斯模型

上一节中,我们提到朴素贝叶斯是一种生成模型,也就是它对问题进行联合建模,利用概率的乘法法则,我们可以得到:

p(y,x⃗ )=p(y,x1,x2,...,xn)=p(y)p(x1|y)p(x2|x1,y)p(x3|x1,x2,y)...p(xn|x1,....,xn1,y)=p(y)p(x1|y)i=2p(xi|x1,...,xi1,y)

由于上述形式复杂,因此朴素贝叶斯作出一个假设,也就是在给定 y 的条件下,x1,...,xn 之间的生成概率是完全独立的,也就是:
p(y,x1,x2,....,xn)=p(y)ip(xi|y)

注意此处并不是说 x1,...,xn 的生成概率是相互独立的,而是在给定 y 的条件下才是独立的,也就是这是一种”条件独立”。了解概率图模型的同学,下面的图模型就可以很好地阐述这个问题:
朴素贝叶斯(Naive Bayes)模型简介_第1张图片
既然我们说朴素贝叶斯是一种生成模型,那它的生成过程是怎样的呢?对于邮件垃圾分类问题,它的生成过程如下:

  • 首先根据p(y)采用得到 y ,从而决定当前生成的邮件是垃圾还是非垃圾
  • 确定邮件的长度n,然后根据上一步得到的 y ,再由p(xi|y)采样得到 x1,x2,...,xn

    这就是朴素贝叶斯模型。显然,朴素贝叶斯的假设是一种很强的假设,实际应用中很少有满足这种假设的的情况,因为它认为只要在确定邮件是垃圾或者非垃圾的条件下,邮件内容地生成就是完全独立地,词与词之间不存在联系。

    朴素贝叶斯应用于文本分类

    尽管朴素贝叶斯模型有很强的假设,而且实际文本也不满足这种假设,但是在分类应用中,它却表现不俗。在分类任务中,我们关心的部分是朴素贝叶斯模型的后验概率:

    p(y|x⃗ )

    根据贝叶斯公式,我们可以得到:
    p(y|x⃗ )=p(y)p(x⃗ |y)p(x⃗ )=p(y)ip(xi|y)p(x⃗ )

    对于分类任务,比如邮件垃圾分类,我们可以通过计算
    p(y=|x⃗ )p(y=|x⃗ )

    然后比较哪个概率大,从而确定邮件是垃圾或者非垃圾。数学上,我们是求解一个最优化问题:
    argmaxyp(y|x⃗ )=argmaxyp(y)p(x⃗ |y)p(x⃗ )=argmaxyp(y)p(x⃗ |y)=argmaxyp(y)ip(xi|y)

    朴素贝叶斯参数估计

    前面我们已经介绍了朴素贝叶斯模型,以及它是如何应用于文本分类中,接下来我们讲讲如何估计朴素贝斯模型的参数。为了估计参数,我们再来好好审视一下朴素贝叶斯模型,首先明确的是模型的组成部分 p(y) ip(xi|y) ,朴素贝叶斯只是将联合概率分布拆解成这两部分,但是并没有指明这两部分的模型具体是怎样的。于是我们有必要对模型进一步建模,然后通过我们最熟悉的极大似然法进行参数估计。

    为了更方便进行参数求解,我们假设问题是一个有监督的问题,也就是我们的训练数据是包含标签的,比如我们有大量邮件,并且邮件已经标注好垃圾或者非垃圾。用数学记号表示,我们有 m 个训练数据,每个训练数据是(x⃗ i,yi),我们的模型希望从这些训练数据中估计出模型的参数。

    求解 p(y)

    p(y) 作为贝叶斯模型的先验概率分布,很多时候是根据我们对问题的理解,然后指定它的实际分布的,比如对于邮件垃圾识别问题,我们的经验告诉我们,10封邮件里面,大概只有2封是垃圾,那么我们可以指定 p(y) 的分布是:

    p(y=)=0.2p(y=)=0.8

    如果你觉得不太放心,还是想靠数据说话,那么一般我们会假设 p(y) 服从多项式分布,然后从训练数据中学习它的分布,假设 m 封邮件中有n封邮件是垃圾,剩下的是非垃圾,那么它的分布就是:
    p(y=)=nmp(y=)=mnn

    求解 p(xi|y)

    此项在贝叶斯模型中属于数据似然部分,如果不考虑先验概率分布 p(y) ,仅仅依靠该部分来求解模型,那就是频率学派的做法。朴素贝叶斯并没有告诉我们这一部分的模型是什么,一般在文本分类中,我们会做两种假设,一种 p(xi|y) 服从伯努力分布,另一种则假设它服从多项式分布。接下来我们分别讲解在这两种假设下,朴素贝叶斯模型的参数估计是如何进行的。为了表达方便,我们用 θ 来表示模型的参数,其中 ϕy 代表 p(y) 的参数, ϕxi|y 代表 p(xi|y) 的参数,我们可以知道:

    L(θ)=logimp(yi,x⃗ i)=imlogp(yi,x⃗ i)=imlogp(yi)jp(xij|yi)=imlogp(yi)+imjlogp(xij|yi)=imlogϕyi+imjlogϕxij|yi

    由于先验分布 p(y) 的参数估计在上一节中已经解决,我们重点关注后半部分。

    多变量伯努力事件模型

    如果假设 p(xi|y) 服从伯努力分布,那么此时的朴素贝叶斯模型也叫做”多变量伯努力事件模型”(multi-variate Bernoulli event model),随机变量 xi 代表一个标识,当 xi=1 时,代表包含第 i 个词汇,当xi=0时,代表不包含第 i 个词汇。在这种假设下,朴素贝叶斯模型的生成过程如下,还是以邮件垃圾识别为例子,假设词汇总数为V:

    • 首先根据先验分布 p(y) 采样得到 y ,从而确定邮件内容是否为垃圾
    • 确定邮件不重复的词汇数N,然后遍历整个字典,根据 p(xi|y) 决定要不要包含此时的词汇,使得不重复词汇数为 N ,此时的生成模型可以看成是多次伯努力采样后的结果

    由上述假设的过程,我们可以得到模型的极大似然表示为(每个特征都会有一个布尔变量b{0,1}, 当 b=1 时代表包含该特征):

    L(θ)=imlogϕyi+imjVlogϕbxij=1|yi(1ϕxij=1|yi)(1b)

    在约束条件:
    xj{0,1}ϕxj|y=1ϕxj|y0j=1,2,3,...y{}

    求解最大的似然估计,可以转化为有约束的最优化问题,通过最优化手段求解最终可得模型得参数估计:
    ϕxj=1|y==mi1{xij=1yi=}mi1{yi=}ϕxj=1|y==mi1{xij=1yi=}+1mi1{yi=}

    为了使模型更加健壮,一般会对估计的参数进行”拉普拉斯平滑”,平滑后的参数估计为:
    ϕxj=1|y==mi1{xij=1yi=}+1mi1{yi=}+2ϕxj=1|y==mi1{xij=1yi=}mi1{yi=}+2

    其中 1{} 代表一个标示函数,如果括号里面为真则返回1,否则返回0。

    多项式事件模型

    如果假设 p(xi|y) 服从多项式分布,那么此时的朴素贝叶斯模型也叫做”多项式事件模型”(mutinomial event model),与多变量伯努力事件模型不同,随机变量 xik k 取值为{1,2,...,V},代表的意义是第 i 个位置的词是第k个词。在这种假设下,朴素贝叶斯模型的生成过程如下,还是以邮件垃圾识别为例子,假设词汇总数为 V :

    • 首先根据先验分布p(y)采样得到 y ,从而确定邮件内容是否为垃圾
    • 确定邮件的长度N,现在有一个 V 项的多项式分布p(x|y),每次从这个多项式分布采样出一个词汇,直到邮件长度为 N

    由上述假设的过程,我们可以得到模型的极大似然表示为:

    L(θ)=imlogϕyi+imjNilogϕxij|yi

    其中 Ni 代表第 i 个邮件的长度。在约束条件:
    xj{1,2,...,V}ϕxj|y=1ϕxj|y0j=1,2,3,...y{}

    求解最大的似然估计,可以转化为有约束的最优化问题,通过最优化手段求解最终可得模型得参数估计:

    ϕxj=k|y==miNij1{xij=kyi=}mi1{yi=}Niϕxj=k|y==miNij1{xij=kyi=}mi1{yi=}Ni

    同样的,如果采取拉普拉斯平滑,则最终参数估计为:
    ϕxj=k|y==miNij1{xij=kyi=}+1mi1{yi=}Ni+Vϕxj=k|y==miNij1{xij=kyi=}+1mi1{yi=}Ni+V

    朴素贝叶斯模型实现

    在stanford-nlp算法库中,有上述两种模型的实现,运用实现好的算法包相当简单,只要对原始文本进行分词,去除停用词,提取ngram特征,正则表达式特征等等特征工程,就可以很方便地调用算法包输出结果。

    参考引用

    Michael Collins lecture note: The Naive Bayes Model, Maximum-Likelihood Estimation, and the EM Algorithm
    Andrew Ng cs229 lecture note:http://cs229.stanford.edu/notes/cs229-notes2.pdf
    Sebastian Raschka: Naive Bayes and Text Classification Introduction and Theory
    stanford-nlp https://nlp.stanford.edu/software/classifier.html

你可能感兴趣的:(机器学习,朴素贝叶斯,NaiveBayes,文本分类,nlp)