引言
如果你对朴素贝叶斯的原理不太清楚,请看我的第一篇文章:http://blog.csdn.net/xlinsist/article/details/51236454
这篇文章主要介绍将朴素贝叶斯模型应用到文本分类任务的技巧和方法。
词袋模型(The Bag of Words Model)
对于机器学习算法来说,特征的选择是一个很重要的过程。那么如何从文本训练集中选出好的特征呢?在自然语言处理中,一个常见的模型就是词袋模型。
这个模型很简单,就是收集训练集中所有的词(重复地只保留一个词),收集的这些词中,每个词都是一个特征。这也叫做词汇表。
当然,在把训练集中的每个文档向量化的过程中,存在两个模型。一个是统计词在文档中出现的次数(多项式模型);一个是统计词是否在文档中出现过(柏努利模型)。下面我会详细解释这两个模型的。
关于文本处理的几个技巧
- 移除文本中的标点符号并把所有字母转换为小写的
- 移除常用的单词:
- 在网上找到特定语言的常用词列表
- 自己创建一个常用词列表,统计整个训练集中每个词出现的次数,并根据它排序,接着把前n个词从词汇表和每个训练样本中移除
- 词干提取(Stemming):它的意思就是把swim和swimming看作是一个单词。它会把每个相近的词提取主干,并把它们当作一个词。
- 词元化(Lemmatization):它的目的是把让单词之间的语法符合规范。
- N-Gram:这个百度百科上有详细的解释:http://baike.baidu.com/view/1394579.htm 下图是英文单词的例子:
在实际分类中,词干提取和词元化对分类的性能几乎不会产生什么影响。上面的方法有的不适用于中文的情况。
Multi-variate Bernoulli Naive Bayes
这个模型我们只检查词汇表的词是否在文档中出现。根据伯努利实验,我们有如下公式:
上式中的m是词汇表中单词的数量。
- Nxi|wj :训练集中包含特征 xi 并属于类别 ωj 样本的数量
- Nwj :训练集中属于类别 ωj 样本的数量
- +1、+2 是Laplace平滑参数
Multinomial Naive Bayes
这个模型我们检查词汇表的词在文档中出现的次数。它也叫做词频(term frequency),记作(tf(t, d)),表示词t在文档d中出现的次数。它也叫做自然频率分布(raw frequency)。在实际应用中,为了使算法具有更好的性能,词频经常被标准化,公式如下:
- tf(t,d) :词t在文档d中出现的次数
- nd :文档d中词的总数量
上述中的词都是指词汇表中的词,并不是文档中所有出现的单词。
基于词汇间的独立性假设,我们可得如下公式:
上式中的m是词汇表中单词的数量。
- ∑tf(xi,d∈ωj) :在所有属于类别 ωj 的训练样本中,词汇(特征) xi 的词频和
- ∑Nd∈ωj :在所有属于类别 ωj 的训练样本中,所有词汇(特征)的词频和
- α :An additive smoothing parameter (α = 1 for Laplace smoothing).
- V:词汇表的大小
Term Frequency - Inverse Document Frequency (Tf-idf)
我们可以把Tf-idf理解成加权重的词频。如果我们并没有把频繁出现的词(stop words)从词汇表中移除,那么它是非常有用的。Tf-idf认为词的重要性与它在文档中出现的次数成反比。
Tf-idf可以通过朴素贝叶斯应用到文本分类中,公式如下:
- tfn(t,d) 是正则化后的词频
- idf(t) 可通过如下公式计算
- nd :文档的总数
- nd(t) :包含词t的文档数量
由上面的公式,我们也可以看出,当一个词在越多的文档中出现的时候,它的Tf-idf就越小,也就说明它的权重越小。
Multi-variate Bernoulli和Multinomial模型的性能
如果词汇表是很大的,Multinomial模型的性能要比Multi-variate Bernoulli模型要好。然而,机器学习算法的性能高度依赖于你选择特征的好坏。在朴素贝叶斯用于文本分类的例子中,算法性能的好坏很大程度上取决于我上述所讲技巧应用的好坏。在实际应用中,我们可以将这些方法多尝试一下,从而找出最好的模型。
总结
现在,我们已经掌握了朴素贝叶斯模型分类文档的技巧。我在下篇文章中将会用这个模型分类中文的笑话(是否为成人笑话)。
Ref: http://blog.csdn.net/xlinsist/article/details/51264829