有了新闻分类的语料库,接下来我们就可以进行文本分类了。
首先说一下大概的流程:
1.进行分词
2.去停用词
3.取名词
4.特征提取
5.特征加权
6.构造分类器
正式开始
1 进行分词
现在网上有很多开源的分词工具可以供我们选择, 选择结巴分词进行分词。虽然中科院的分词工具号称是最好的中文分词工具,但是它并木有进行开源。
首先进行jieba的安装,结巴的github托管地址:github。里面有结巴的安装教程,比较好理解。
貌似分词就这么简单的结束了。
2 去停用词
貌似是更加简单的一步,只要找一个停用词表,然后写个小程序进行剔除 就可以了。
3 取名词
根据结巴的分词标注结果进行取名词操作,因为往往名词是一篇文章的重点关注对象。这一步需要根据实际任务来做,如果是新闻的话,名词代表的可能就足够了。
4 特征提取
进行语料库(保存很多文章的地方)的各个文章类别的特征提取。采用卡方检验进行特征的提取。
A:在c类下包含词w的文档数量;
B:不在c类下包含词w的文档数量;
C:在c类下不包含词w的文档数量;
D:不c类下且不包含词w的文档数量;
N:所有文档的数量,即N=A+B+C+D;
对于每一类,分开计算。然后取各类前400作为词表。即分类的特征。
5 特征加权
采用td-idf对每篇文章所具有的特征进行赋值td-idf
TF-IDF是一个度量一个词对所属文档主题贡献程度的一个非常重要的标准,也是将文档转化为向量表示过程中的重要一环。
TF-IDF主要思想为:如果某一个词或者短语在一篇文章中出现的频率TF很高,并且在其它文章中很少出现,则认为该词或者短语具有很好的类别区分能力,适合用来作为特征。
词频TF:
其中 tfw,d 表示为词w在文章d中的权重, nw,d 为词 w 在文章
逆向文档频率:
其中 |D| 为语料库中文件总数,分母为包含 wi 的文件数目。
注意:由于词表中的每个词不一定在每个类中都会出现,因为需要采取平滑的方法。采用分母+1平滑的方法。
6 构造分类器
采用svm作为分类器。选取libsvm来训练模型。
1.为了使模型训练时间降低,首先使用svm-scale命令,对训练数据和测试数据进行缩放操作,上限为1,下限为0
2.使用grid.py对使用内核为rbf的svm模型进行参数选择。
3.使用svm-predict命令,对测试数据进行测试。