- 1 -
中国科技论文在线
一种基于词向量的分布式中文贝叶斯文本
分类器
冯梦轲,吴国仕**
作者简介:冯梦轲(1992-),男,硕士研究生,主要研究方向:大数据与智能信息处理
通信联系人:吴国仕(1961-),男,教授,主要研究方向:大数据与智能信息处理. E-
(北京邮电大学软件学院,北京 100876) 5
摘要:朴素贝叶斯分类器的提出是基于一个假定:在给定目标值时,属性值之间相互独立。
这种算法在文本分类中获得了很大的成功。但是在计算条件概率的时候,这种算法会把两个
不同的词分别当成两个不同的特征,即使它们的语义特别相近。本文提出了基于词向量的文
本分类器,它在计算条件概率的时候会考虑到语义相关的词的概率,这种计算方式可以更准10
确的表示该词对类别的贡献。词向量是一种将深度学习应用到自然语言处理的方式,它用一
个实值向量来表示一个词,通过计算向量夹角的方式便可以得到词语的相似度。除此之外,
随着文本数据规模的增大,在单台计算机上进行文本的存储和运算变得非常耗时。基于
Hadoop 平台的并行朴素贝叶斯分类器,能够有效提升文本训练和分类的速率。实验证明该
分类器能有效提升文本分类的准确率并且具有很好的执行效率。 15
关键词:中文文本分类;朴素贝叶斯;词向量;Hadoop
中图分类号:TP311
A Distributed Chinese Naive Bayes Classifier Based on
Word Embedding 20
FENG Mengke, WU Guoshi
(College of Software Engineering, Being University of Posts and Telecommunications,
Beijing,100876)
Abstract: The naive Bayes classifier is built on the assumption of conditional independence
between the attributes in a given class. The algorithm has been shown to be successful in text 25
classification. But when calculating the conditional probability these methods take two different
words as two different feature, no matter how close their meanings are. In this paper a text
classifier was proposed to improve the calculation of probability that a word belonging to a class
by using its related words base on word embedding and was named as NBCBWE (naïve Bayes
classifier based on word embedding). Word embedding provides a way of applying Deep Learning 30
to solve natural language processing problems. In this way every word can be represented by a
vector, and the similarity of two words can be calculated by their word embedding. What‟s more,
as the data set grows larger, it can be very time consuming to store and classify text in a single
computer. To increase the speed of training and test process, a parallel classifier was implemented
based on Hadoop. Our experiments shows that our model improves the precision in text 35
classificationand also processes more efficiently.
Key words: Chinese text classification; naïve Bayes; word embedding; Hadoop
0 引言
随着互联网的迅速发展,利用自动化技术来处理大规模的语料变得越来越重要,自动化40
分类方法得到了广泛的关注。文本自动分类器通常是通过自然语言处理或者机器学习的方
法,通过有监督的训练来识别待分类文本的类别。常见的分类方法[1]有支持向量机(SVM)、
K 最近邻(KNN)、神经网络、贝叶斯和决策树等。贝叶斯分类算法[2]基于贝叶斯定理,虽
然规则并不复杂,但是在实际应用中有很好的效果。
- 2 -
中国科技论文在线
朴素贝叶斯有两种分类模型[3]。其中一个是伯努利模型,它不考虑词出现的次数,将词45
是否出现对应到特征向量的 1 或者 0;另一种是多项式模型,它将每个词出现的次数用整数
表示。由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实
际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性
假设的贝叶斯分类算法,如 TAN[4] (tree augmented Bayes network)算法。
大部分贝叶斯分类算法用词语出现的次数来计算条件概率。但是语言表达方式的趋势是50
越来越多样化,这就意味着很多短语有不同的表达方式,但是表示相似的语义。如果我们在
计算某个短语的条件概率的时候,把它的相关词语考虑进来,基于语义匹配而不是基于字符
串进行硬匹配,就可以提高文本分类中条件概率的准确率。词向量就提供了一种方法来解决
这个问题,词向量的思路是把每个词用一个实数向量表示,这样就可以通过向量之间的相似
度来计算词语之间的相似度。Mikolov 的 Word2Vec[5]无论在运算速率还是准确率上都有特55
别好的表现,所以本文选择使用 Word2Vec 作为词向量训练的工具。
本文利用 NLPIR 作为中文分类器,利用 TF-IDF 算法提取文本特征,最后为了提升运算
速率,在 Hadoop 平台实现了并行的文本分类器[6]。本文对分类器的核心算法、总体模块和
运算流程进行了详细阐述。
1 基于词向量的朴素贝叶斯文本分类 60
朴素贝叶斯
贝叶斯分类器基于一个简单的假设:任何两个属性值之间相互独立[7]。对于文本分类来
说,假设任何两个词也是互相独立的[8]。基于这个假设文档属于类别的概率可以表示为:
1 2
1
, , ..., | | |
n
n i j i
j
P d Ci P w w w C P w C
有两种计算条件概率的方式:文档型和词频型。 65
1) 文档型:不考虑词在文档中出现的次数,只考虑某个词在该文档是否出现,用 0 表
示未出现,1 表示出现。
,
,
( ( ), )
( | )
( )
j k i
j k i
i
N D w C
P w C
N C
其中,N(D(wj,k),Ci)是类别 Ci中包含特征项 wj,k 的文档数,N(Ci)是类别 Ci中的文档总数。
2) 词频型:考虑词在文档中的出现频次。 70
,
, | |
1
1 ( , )
( | )
| | ( , )
Ci
Ci
j k i
j k i V
k i
k
TF w C
P w C
V TF w C
其中|VCi|是类别 Ci 中的特征项的总数,TF(wj,k,Ci)是特征项 wj,k 在类别 Ci 的文档中出现
的次数。
不管是文档型还是词频型的计算方式都是基于字符串匹配的,下面章节我们将提出一种
基于语义匹配的方式。 75
- 3 -
中国科技论文在线
基于词向量改进的朴素贝叶斯分类算法
在本论文中,我们采用了 Word2Vec 作为训练词向量的工具。Word2Vec 采用大规模的
训练文本作为输入数据,它采用了分布式表达的方式来作为词向量的输出格式,这样每个词
向量经过训练转化为一个 K 维实值向量的形式。词语之间的相似度就可以通过计算向量的
相似度得到,常见的计算方法有:余弦相似度、欧几里得距离。在本文中,我们采用了余弦80
相似度。
( , ) cos( , )i j i jsim w w w w
对类别的特征集和文档的特征集进行研究的时候,我们基于统计发现了两个现象。一个
是文档中有很多单词或者短语,在提取到的特征集中都可以找到多种表达相同意思的单词或
者短语,但是如果基于字符串硬匹配的话,它们会被归为不同的特征。这种现象在互联网语85
料中尤为常见。基于这种现象,在对那些不常见的词语计算条件概率的时候,即使它们和主
题很相关,但是由于表达不够常用的原因,会得到不够准确的概率结果。词向量是基于词语
的上下文进行训练的,它假设如果两个词的上下文类似,那么这两个词的意思也是相近的。
所以利用词向量可以很好的解决这一问题。另外一个现象是,对于大多数单词,如过它们和
主题的相关性越强,在特征集中就有越多的特征和该单词的意思相近。所以,如果我们在计90
算待分类文档 d中单词 w的条件概率的时候,如过把与它相关性较高的单词的条件概率加
起来,作为单词 w的条件概率,会使得这个概率更能表达它对待分类文档 d的贡献。因为
这种计算方式得到的值,对于与类别相关性较高的单词和相关性较低的单词,差值会更大。
引入相关词的概率以后,待分类文档中的词 w 的条件概率可以表示为:
| |
1
( | ) ( ( ( , )) ( | ))
V
i i k k
k
p w c f sim w w p w c
95
f(x)是一个用来对若相关词进行过滤并且对概率的和进行归一化的函数。我们通过实验
得到一个结论,对于低于余弦相似度小于 的相关词过滤掉,会获得较好的分类结果。
2 系统设计与实现
系统模块设计
基于词向量的文本分类器由三部分构成,分别是对词向量进行训练的模块、对分类模型100
进行训练的模块和对文本类别进行识别的模块,具体架构如图 1 所示。其中词向量训练部分
主要包含三个模块,分别是对文本进行预处理、分词、利用 Word2Vec 进行词向量训练和词
向量模型的存储和读取;对于分类模型训练的部分和文本类别识别的部分有两个公用的模
块,分别是利用 NLPIR 中文分类器对文本进行分类,利用 TF-IDF 对文本特征的权值进行统
计,它们还包含各自的预处理模块,主要对文本中的标点符号和停用词进行过滤,对特征项105
进行提取。在经过训练之后,模型中的每个类别将被以键值对<key, value>的形式存储到一
个 Map,其中 key 是该类别下的一个特征词,value 是这个特征词所对应的条件概率。
- 4 -
中国科技论文在线
图 1 基于词向量的文本分类器系统架构
Fig. 1 The system structure of the text classifier based on word vectors 110
基于 Hadoop 的并行朴素贝叶斯分类器
本文中,我们基于开源平台 Hadoop 开源平台设计并实现了并行的朴素贝叶斯分类器。
我们用了四个 MapReduce 任务分别对文本进行预处理、对分类模型进行训练和对文本类别
进行识别。本章我们重点介绍本文的创新点的实现,基于词向量对文本类别进行识别。在输
入到 Hadoop 平台之前,每篇文章都被表示成特征项和它对应的 TF 权值的格式: 115
,1 ,1 ,2 ,2 ,3 ,3 , ,: , : , : ,..., :s s s s s s s s n s nd w W w W w W w W
每个类别被表示成特征项和它对应条件概率的格式:
,1 ,1 ,2 ,2 ,3 ,3 , ,: , : , : ,..., :t t t t t t t t n t nc w p w p w p w p
其中,s 表示文档 id,t 表示类别的 id,第二个下标 1,2,...,n 表示特征项的标号。
图 2 展示了识别待分类文章时,两个 Map-Reduce 任务所做的主要操作,其中直角矩形120
里代表数据类型,圆角矩形里代表函数所做的操作。
图 2 文本分类模块中 Map-Reduce 任务的主要操作
Fig. 2 The main process of the Map-Reduce task in text classification
因为在计算某个单词 w 的条件概率的时候,要把它语义相关单词的概率累加起来,所125
键值对: <“文档 id” - “特征项及其权值”>
““”“„‟‟‟
Map 函数:按照单词对进行聚合,同时统计它所对应的文档和类别
键值对:<“ws,i|wt,j” - “ds:ct:Ws,i:pt,j”>
““”“„‟‟‟
Reduce 函数: 利用词向量计算单词对的相似度
第一个 Map
Recue 任务
键值对:<“d
s
:c
t
:ws,i:Ws,i”-“f(sim(ws,i,wt,j))×pt,j”>
““”“„‟‟‟
Map 函数: 把每个单词的语义相关特征项的概率进行累加
键值对: <“d
s
:c
t
:ws,i”-“ln(∑(f(sim(ws,i,wt,j))×pt,j))×Ws,i>
““”“„‟‟‟
Reduce 函数: 计算待分类文章属于每个类别的概率
键值对: <“d
s
”-“ct:ps,t”>
““”“„‟‟‟
第一个 Map
Recue 任务
- 5 -
中国科技论文在线
以第一步是计算该单词与类别特征项集中的每个单词的相关度。第一个 Map-Reduce 任务按
照待分类文本按照文本中的单词和类别特征项集中的单词所组成的单词对,进行聚合。
第一个 Map-Reduce 任务中的 Map 函数所做的主要操作如表 1 所示。
表 1 第一个 Map-Reduce 任务中的 Map 函数的主要操作
Tab. 1 The main process of Map function in the first Map-Reduce task 130
Algorithm 1 The main process of Map function in the first Map-Reduce task
1:
2:
3:
4:
5:
6:
7:
for(ws,i in ds){
for(ct in C){
for(wt,j in ct){
("ws,i : wt,j", "ds:ct:Ws,i:pt,j");
}
}
}
表 1 中大写字母 C 代表所有类别的集合。在经过该函数处理之后,中间数据是一个键
值对的形式,其中 key 是由两个特征项组成的,value 是由文档标识 ds,类别标识 ct以及第
一个特征项的权重 Ws,i、第二个特征项在类别 ct中的条件概率 pt,j组成。
第一个 Map-Reduce 任务中的 Reduce 函数的主要操作如表 2。
表 2 第一个 Map-Reduce 任务中的 Reduce 函数的主要操作 135
Tab. 2 The main process of Reduce function in the first Map-Reduce task
Algorithm 2 The main process of Reduce function in the first Map-Reduce task
1:
2:
3:
4:
5:
6:
7:
r = f(sim(ws,i, wt,j));
if (r > α ){
for(ds:ct:Ws,i:pt,j in list){
Ys,t,i = r × pt,j ;
(“ds:ct:ws,i:Ws,I”, “Ys,t,I”);
}
}
第一个 Map-Reduce 任务把具有相同单词对的记录进行聚合,然后统一计算,这样避免
了重复的计算,提高了吞吐率。第二个 Map-Reduce 任务对文档中单词的条件概率进行计算,
然后计算该文档属于某个类别的概率。
第二个 Map-Reduce 任务中的 Map 函数所做的主要操作如表 3 所示。 140
表 3 第二个 Map-Reduce 任务中的 Map 函数的主要操作
Tab. 3 The main process of Map function in the second Map-Reduce task
Algorithm 3 The main process of Map function in the second Map-Reduce task
1:
2:
3:
4:
5:
6:
sums,t,i = 0;
for(Ys,t,i in list){
sums,t,i = sums,t,i + Ys,t,i ;
}
ps,t,i = ln(sums,t,i) × Ws,i ;
(“ds:ct”, “ps,t,i”) ;
经过 Map 函数的运算,中间数据是一个键值对的形式,其中的 key 是一个由文档标识
ds 和类别标识 ct 组成的字符串,value 是对应的概率。ps,t,i 是文档中的词 ws,i属于类别 ct的条
件概率。 145
第二个 Map-Reduce 任务中的 Reduce 函数所做的主要操作如表 4 所示
表 4 第二个 Map-Reduce 任务中的 Reduce 函数的主要操作
Tab. 4 The main process of Reduce function in the second Map-Reduce task
- 6 -
中国科技论文在线
Algorithm 4 The main process of Reduce function in the second Map-Reduce task
1:
2:
3:
4:
5:
sums,t = 0;
for(sums,t,i in list){
sums,t = sums,t + sums,t,i ;
}
(“ds”,ct : sums,t”) ;
到这里为止,我们便可以得到文档 ds 属于类别 ct的概率 sums,t ,并且概率值最大所对
应的类别便为该文档被分到的类别。 150
3 实验及分析
在这一章节,我们首先比较了传统的朴素贝叶斯分类器和本文提出的模型在文本分类时
的结果。然后我们比较了当 Hadoop 集群的节点数不同的时候,系统的运算速率的加速比。
我们选择中文的维基百科作为 Word2Vec 的训练数据。因为 Word2Vec 的训练数据要满足两
个要求,一个是语料规模要足够大,二是要涵盖多个主题。维基百科的语料可以很好的满足155
这两个要求。我们编写了一个脚本用于过滤标点符号,并且过滤掉换行符,这样每篇文章会
被表示为一行。我们选择 NLPIR 作为中文分类器,在训练词向量的时候设置了 200 维作为
单词实数向量的维度,选择了 10 个单词作为上下文窗口的大小。
文本分类评价
为了展示本文提出的分类器在文本分类上具有更高的精度,我们选择搜狗语料集作为评160
测数据集。搜狗语料集包含经济、运动等 9 个类别,并且是一个全部由人工进行分类的语料
集。对分类问题,常常使用混淆矩阵来表示分类结果,矩阵的每一列代表一个类的实例预测,
而每一行表示一个实际的类的实例。一个典型的混淆矩阵如下:
表 5 混淆矩阵
Tab. 5 Confusion matrix 165
实际正例 实际反例
预测正例 真阳性(TP) 伪阳性(FP)
预测反例 伪阴性(FN) 真阴性(TN)
我们用准确率、召回率和 F 值作为评测指标。其中准确率 = TP / (TP + FP),反应了被
分类器判定的正例中真正的正例样本的比重;召回率 = TP / (TP + FN), 反映了被正确判定
的正例占总的正例的比重; F1 值 = 2 ×召回率×准确率/ (召回率 + 准确率)。
表 6 文本分类结果
Tab. 6 The result of text classification 170
类别 朴素贝叶斯分类器 本文提出的分类器
准确率 召回率 F1 值 准确率 召回率 F1 值
经济 % % % % % %
IT % % % % % %
健康 % % % % % %
运动 % % % % % %
旅行 % % % % % %
科技 % % % % % %
工作 % % % % % %
文化 % % % % % %
军事 % % % % % %
- 7 -
中国科技论文在线
我们共选用了 18,000 篇文章作为训练集,9,000 篇文章作为测试集。如表 6 所示,
在用朴素贝叶斯分类器进行分类的时候,共有 6,855 篇文章被正确识别,准确率为 %;
在用本文提出的分类器进行分类的时候,共有 7,054 篇文章被正确识别,准确率为 %。
结果显示,我们的分类器对于文本分类的准确率有一定的提升。
并行文本分类器在 Hadoop 平台的运行速率 175
为了测试该并行分类器在 Hadoop 平台上的表现,我们选择了一个 的语料集用以
测试它的速度。我们分别在 2、4、6、8 个节点数的 Hadoop 集群上运行了程序,如图三所
示,分类器运行速度随着节点数的增加近似于线性增长。同时,分类效果也相当优秀。
图 3 文本分类器的加速比 180
Fig. 3 Speedup curves of the text classifier
4 小结
本文提出了一种基于词向量的平行文本分类器,并在 Hadoop 平台进行了实现。本文的
创新点是利用词向量来改进待分类文档中词语条件概率的计算方法。实验结果显示该分类器
在文本分类的表现要优于传统的朴素贝叶斯分类器。除此之外,基于 Hadoop 平台的并行分185
类器,为大规模文本的分类提供了更高的运算效率,使得该分类器在分类精度和速度上都有
很好的表现。然而,在词向量应用于其它分类算法或者聚类算法方面,仍然需要进一步研究。
[参考文献] (References)
[1] 靳小波. 文本分类综述[J]. 自动化博览, 2006(S1):24-29.
[2] Friedman N, Dan G, Goldszmidt M. Bayesian Network Classifiers[J]. Wiley Encyclopedia of Operations 190
Research & Management Science, 2011, 29(2-3):598--605.
[3] Mccallum A, Nigam K. A Comparison of Event Models for Naive Bayes Text Classification[J]. IN AAAI-98
WORKSHOP ON LEARNING FOR TEXT CATEGORIZATION, 2001:41--48.
[4] Ma S C, Shi H B. Tree-augmented naive Bayes ensembles[C]// Machine Learning and Cybernetics, 2004.
Proceedings of 2004 International Conference on. IEEE, 2004:1497-1502 . 195
[5] Goldberg Y, Levy O. word2vec Explained: deriving Mikolov et al.'s negative-sampling word-embedding
method[J]. Eprint Arxiv, 2014.
[6] 张依杨, 向阳, 蒋锐权,等. 朴素贝叶斯算法的 MapReduce 并行化分析与实现[J]. 计算机技术与发展,
2013(03):23-26.
[7] Zheng Z, Webb G I. Lazy Learning of Bayesian Rules[J]. Machine Learning, 2000, 41(1):53-84. 200
[8] Kim S B, Han K S, Rim H C, et al. Some Effective Techniques for Naive Bayes Text Classification[J]. IEEE
Transactions on Knowledge & Data Engineering, 2006, 18(11):1457-1466.