现实中,中文文本分类的应用很多,比方将一则新闻归结到哪一类中,是体育呢,还是科技,还是娱乐
那么怎么归类呢?我的想法是根据文章中的词来判断,至于怎么判断呢
我想到是先训练一批词出来,具体方法是从网络中找200篇关于某一类的文章,必须很典型,假设有10个类,那么每个类下就有200篇了
然后将文章切词,java有中文切词工具包,这个很简单,用一个treemap数据结构保存所切的词和该词对应的出现次数,假设对应的map命名为map_A
然后处理B类,同样切词生成map_B
.....
切词完成后,我们想想切词的目的是为了保留一些容易识别类的关键词,而一些噪音词,比如“我”、的”、“这些”等等需要将他们排除
是的,我们发现这些词不仅仅map_A中有而且出现在map_B中,而且当数据量很大的时候,它们所占的比基本稳定
这里可以用英文中去除停留词的技术,停留词主要是指the、this、that等
将这些噪音词保存到一个list中,留有他用
经过上述处理后,每个类都有了相应的关键词库,以及频率
这时候,我采用的是边分类边学习
具体过程采用朴素贝叶斯分类过程
p(Ci | text)表示已知一篇文章,将它分给类i的概率,当然我们需要取使p最大的Ci
p(Ci | text) = p(text|Ci)*p(Ci)/p(text) 这里p(text)设为1吧,因为每个text是已知的
p(text|Ci)=p(word1|Ci)+p(word2|Ci)......+p(wordj|Ci)
p(Ci) = numberof(Ci)/allnumberofwords
如果将text归为某一类了之后,可以将text分的词加入到相应的map中,比如某一个词之前map中没有,当然这里需要将text中的噪声词给干掉
这时候加了进来
然后继续边学习边分类
当某一类学习了200篇之后,可以将map中词频最小的几个去掉,因为他们在统计学中,不具有表现这一类的代表性,当然当学习的足够多的时候,
最小词频的也足够大了,这个时候就代表收敛了,就没必要去删除最小词频,因此这里设置一个阈值
实验正在进行中,暂且记录想法!