如何对文章进行分类,投递到诸如国内,国际,体育,财经等等这些类别中去。其中一个方法是人工去判断,但是在目前每天产生2万篇新闻的今天,全靠编辑来分类显然不现实,为此我们需要对文章进行自动分类。
如何自动分类,按照机器学习里面的说的,我们首先需要一个标记好的集合用来训练,该集合里面的数据都已经划分到了各个类别。目前搜狗提供了这样一份训练样本,其中的数据格式如下:
第一列是ID,第二列是词,后面有这个词所对应的类别及其概率。目前搜狗设定的阈值为0.2,这样统计下来一个词大概顶多对应三个类别。
这样的一份数据中包括7万个词,这是很宝贵的训练样本,下面该说说如何使用。
首先明确一下我们的任务,拿到一篇文章,判断该文章所属于的类别,类别不一定唯一,可以按照搜狗词表中列出的这样给定多个类别和其对应概率。
具体操作主要包括下面几个步骤:
1、文章关键词提取
这里是通过抽取文章中表征意义强烈的词来代表这篇文章,可以使用ANSJ来提取关键词
2、词向量转换
提取出文章中的关键词之后,可以通过word2vec转换为向量,同时我们也把搜狗的这些词转换为词向量。注意一点,首先我们要保证训练的语料中包括这些词,如果没有这些词的向量那就无能为力了。
3、找到最相近的TOP 10
针对文章中的提取得到关键词,通过计算其向量与搜狗词表中每个词的向量之间的欧氏距离来判断远近,为了保证准确,可以提取前10个最接近的词。
4、计算类别
得到上面的10个词,我们从搜狗词表中找到其对应的类别和概率,加权得到的就是输入的关键词属于的类别和概率。这样这篇文章的类别和概率也就知道了。
下面举个例子,比如输入的是微信这个词,那么就能得到最近的十个词和类别:
62968 微博微信 {70000=0.367816, 50000=0.264368}
455 腾讯微博 {70000=0.288793, 100000=0.318966}
28944 公众账号 {70000=0.818182}
4101 微信平台 {70000=0.3}
5173 公众平台 {70000=0.66}
336 微信公众平台 {70000=0.65}
31 新浪微博 {70000=0.583593}
2263 搜索 {70000=0.496946}
8454 微信公众账号 {70000=0.75}
124 微信 {70000=0.494255}
{70000=5.409585, 100000=0.318966, 50000=0.264368}
其中类别ID对应关系如下:
100000 体育
070000 科技
050000 财经
040000 娱乐
020000 时政
080000 军事
090000 社会
030000 教育
130000 生活
060000 游戏
010000 汽车
110000 房产
得到的结果70000(科技)权值最大,可以看到还是挺靠谱的。
可以改进的地方:
1、关键词的提取,如果提取的关键词准确度更高,对文章的表征意义更强,那么文章分类将会更准确,尤其是权重最大的头两个关键词
2、语料库的选择,语料越多,通过word2vec得到的词向量肯定越准确
3、词向量的维度,按常理说维度越高肯定越准确,我这里选择的是50维,效果已经很不错了
4、标记样本的数量,搜狗这里只有7万个词,如果词更多,效果肯定更高