之前做过一些文本挖掘的项目,比如网页分类、微博情感分析、用户评论挖掘,也曾经将libsvm进行包装,写了一个文本分类的开软软件Tmsvm。所以这里将之前做过一些关于文本分类的东西整理总结一下。
1 基础知识
1. 1 样本整理
如下面的整理的样本,1为正类,-1为反类(为了能便于展示,这里使用了一些即时聊天工具中的文本,里面的一些对话都是YY,并非真实的)。
表 1.1‑1 一个训练样本的例子
标签 |
样本 |
1 |
如要购买商品的请加我qq61517891联系我购买! |
1 |
联系qq1121107282 |
1 |
你好需要订购请加扣扣 |
-1 |
索尼爱立信手机的体验是一个月吗 |
-1 |
不好意思这个价钱最便宜了 |
-1 |
3件的那个他是高价在卖 |
1.2 特征选择
文本分类中最著名的特征提取方法就是向量空间模型(VSM),即将样本转换为向量的形式。为了能实现这种转换,需要做两个工作:确定特征集和提取特征。
1.2.1 确定特征集
特征集其实就是词典,而且还需要给每个词设定一个编号。
一般可以将所有样本的词都提取出来作为词典,而词典的编号可以随意设置,默认情况下,所有词的权重都是等同的。如何从样本中提取出一个个意义的词呢?最常用的方法就是使用分词工具,比如“如要购买商品的请加我qq61517891联系我购买!”,可以分成“如^要^购买^商品^的^请^加^我^qq61517891^联系^我^购买^!”,其中“^”是用来分割词的。现在比较常见的分词工具有ICTCLAS(C++),Iksegment(Java)。
下图是一个典型的生成词典的流程图。
图 1.1‑1 从样本中提取词典流程图
1.2.2 特征选择
根据不同的业务,文本分类中词典的规模在万级到千万级甚至亿级。而这么大的维度可能会带来维度灾难,因此就要想办法从大量的特征中选择一些有代表性的特征而又不影响分类的效果(而根据文献中的结果,特征选择可以在一定程度上提高分类的效果)。特征选择就是从特征集中选择一些代表性的词。而如何衡量词的代表性呢?一般的计算方法有词频、卡方公式、信息增益等。当前文献中一致认为比较好的方法是卡方公式。
下面几个链接是几篇写的比较详细介绍如何进行特征选择的文章
1. http://www.blogjava.net/zhenandaci/archive/2009/04/19/266388.html 特征选择与特征权重计算的区别
2. http://www.blogjava.net/zhenandaci/archive/2009/03/24/261701.html 特征选择方法之信息增益
3. http://www.blogjava.net/zhenandaci/archive/2008/08/31/225966.html 特征选择算法之开方检验
1.2.3 特征抽取
另外一种解决维度灾难的思路就是特征抽取。同样是降维,相比特征选择,特征抽取采用了一种高级的方法来进行。Topic Modeling是原理就是将利用映射将高纬度空间映射到低纬空间,从而达到降维的目的。具体可以见2.1特征抽取部分
1.3 计算特征权重
给定一个样本,如何转换成向量呢?
首先给一张流程图:
图 1.1‑2 计算特征权重的流程
流程:
1)首先,对样本进行分词,提取出所有的词。
2)根据已经生成的词典,如果词典中的词出现,就在