朴素贝叶斯模型是一个简单却很重要的模型,在文本分类中,由于它出奇的简单实现和令人惊讶的表现,因此实际应用中,它都值得是第一个尝试的基准模型。本文接下来将从文本分类这个具体应用中介绍朴素贝叶斯模型。
在文本分类中,我们面临的问题是给定一个文本 x⃗ =[x1,x2,...,xi,...,xn] ,其中 xi 从原始文本抽出来的一个特征,可以是单个单词或者是一个ngram特征,或者是一个正则表达式特征。我们希望有一个模型可以来预测这个特定文本的标签 y ,在邮件垃圾分类中,y可以是指”垃圾邮件”或”非垃圾邮件”。这就是文本分类问题的基本描述,不同的分类模型对此问题有不同的看法,这些不同的看法中,大致可以分为两大派别,一种是”判别式模型(discriminative Model)”,比如SVM或者Logistic回归,他们直接对问题进行建模,得出如下模型:
上一节中,我们提到朴素贝叶斯是一种生成模型,也就是它对问题进行联合建模,利用概率的乘法法则,我们可以得到:
这就是朴素贝叶斯模型。显然,朴素贝叶斯的假设是一种很强的假设,实际应用中很少有满足这种假设的的情况,因为它认为只要在确定邮件是垃圾或者非垃圾的条件下,邮件内容地生成就是完全独立地,词与词之间不存在联系。
尽管朴素贝叶斯模型有很强的假设,而且实际文本也不满足这种假设,但是在分类应用中,它却表现不俗。在分类任务中,我们关心的部分是朴素贝叶斯模型的后验概率:
前面我们已经介绍了朴素贝叶斯模型,以及它是如何应用于文本分类中,接下来我们讲讲如何估计朴素贝斯模型的参数。为了估计参数,我们再来好好审视一下朴素贝叶斯模型,首先明确的是模型的组成部分 p(y) 和 ∏ip(xi|y) ,朴素贝叶斯只是将联合概率分布拆解成这两部分,但是并没有指明这两部分的模型具体是怎样的。于是我们有必要对模型进一步建模,然后通过我们最熟悉的极大似然法进行参数估计。
为了更方便进行参数求解,我们假设问题是一个有监督的问题,也就是我们的训练数据是包含标签的,比如我们有大量邮件,并且邮件已经标注好垃圾或者非垃圾。用数学记号表示,我们有 m 个训练数据,每个训练数据是(x⃗ i,yi),我们的模型希望从这些训练数据中估计出模型的参数。
p(y) 作为贝叶斯模型的先验概率分布,很多时候是根据我们对问题的理解,然后指定它的实际分布的,比如对于邮件垃圾识别问题,我们的经验告诉我们,10封邮件里面,大概只有2封是垃圾,那么我们可以指定 p(y) 的分布是:
此项在贝叶斯模型中属于数据似然部分,如果不考虑先验概率分布 p(y) ,仅仅依靠该部分来求解模型,那就是频率学派的做法。朴素贝叶斯并没有告诉我们这一部分的模型是什么,一般在文本分类中,我们会做两种假设,一种 p(xi|y) 服从伯努力分布,另一种则假设它服从多项式分布。接下来我们分别讲解在这两种假设下,朴素贝叶斯模型的参数估计是如何进行的。为了表达方便,我们用 θ 来表示模型的参数,其中 ϕy 代表 p(y) 的参数, ϕxi|y 代表 p(xi|y) 的参数,我们可以知道:
如果假设 p(xi|y) 服从伯努力分布,那么此时的朴素贝叶斯模型也叫做”多变量伯努力事件模型”(multi-variate Bernoulli event model),随机变量 xi 代表一个标识,当 xi=1 时,代表包含第 i 个词汇,当xi=0时,代表不包含第 i 个词汇。在这种假设下,朴素贝叶斯模型的生成过程如下,还是以邮件垃圾识别为例子,假设词汇总数为V:
由上述假设的过程,我们可以得到模型的极大似然表示为(每个特征都会有一个布尔变量b∈{0,1}, 当 b=1 时代表包含该特征):
如果假设 p(xi|y) 服从多项式分布,那么此时的朴素贝叶斯模型也叫做”多项式事件模型”(mutinomial event model),与多变量伯努力事件模型不同,随机变量 xi=k , k 取值为{1,2,...,V},代表的意义是第 i 个位置的词是第k个词。在这种假设下,朴素贝叶斯模型的生成过程如下,还是以邮件垃圾识别为例子,假设词汇总数为 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