
1. 文本分类训练数据收集
无监督收集训练数据是没有意义的,目前的无监督方法主要是通过爬取网页数据,将网页文本标签看作类别,再利用已有的分类器或者相似性度量决定是否将网页文本添加到训练数据集中。这种方法对于训练数据集中数据充足的类目比较有效,对于本来就没有多少数据的类目,不管是分类预测的概率值还是相似度计算的数值都不会太高,因此大部分爬取的文本还是会被过滤掉,失去了扩充数据的目的。
这篇文章给出一些训练数据的下载地址,如发现需要有偿或失效的链接,请留言删除。
baiziyu:文本分类语料库
专栏里写了这么多篇文章,上边这篇文章却没有人点赞,不知道大家都在干些什么,每天都研究算法呢是吗,连语料都没有,谈什么算法,别跟我说就用了几千条数据做实验。
2. 类目关键词抽取
类目关键词抽取最有效的方法只有1种,就是统计词语的TF值和IDF值,然后保留高频词,去除没有区分力的词,当然人工筛选的过程依然是必要的。实现脚本见https://github.com/baiziyuandyufei/text_classification_tradition/blob/master/Chap4/Tfidf.py
起辅助作用的关键词抽取方法为对一个类目下的文本做KMeans聚类,用聚类后得到的每个簇的特征词作为类目关键词。实现脚本见https://github.com/baiziyuandyufei/text_classification_tradition/blob/master/Chap4/KMeans_keywords.py
3. 类目关键词扩展
在手头有了一定量的类目关键词后,扩展关键词就可以得到更多的类目关键词。扩展关键词的方法同扩展训练语料的思想是一样的,只不过这里我么只能采用相似性度量的方法。使用的技术为single-pass。主要的步骤是:
(1)将每个类目内的关键词向量化
(2)对每个类目内的关键词向量求和取平均,得到每个类目的向量
(3)用类目向量在词嵌入模型中检索最相似的词语。这里需要注意相似度阈值不要设置的太低,同时为了精确性可以由人工筛选检索出的相似词语。有关相似词语检索可以看baiziyu:文本分类5天征服你-第1天 词嵌入与文本向量空间模型
想详细了解类目关键词扩展的小伙伴可以看这篇文章baiziyu:Single-Pass关键词扩展
4. 向HanLP分词系统添加新词
(1)HanLP分类模块的分词器使用的是基于viterbi算法的实词分词器。详细参考这篇文章baiziyu:HanLP-分类模块的分词器
(2)关于HanLP分词的详细流程可以参考baiziyu:HanLP-停用词表的使用
(3)关于定制用户词表可以参考baiziyu:HanLP-定制用户词表,baiziyu:HanLP-停用词表的使用
5. 各类目下数据提纯
数据提纯对于文本分类系统的效果尤其重要,往往我们试了各种算法或改进方法分类系统效果都特别低的时候(准确率70%以下)一定直接从语料下手,因为准确率这么低只能说明类目之间的数据存在主题上的交叠,此时对各类目下数据提纯至关重要,也就是说我们要使每个类目下文本的主题集中,而不能存在同一个类目下有多个主题的文本,或者同一主题的文本散布在多个类别中。
数据提纯有两步,第1步将不属于某个类目的文本筛选出来,第2步将筛选出来的文本放到合适的类目中。当数据较为充足的情况下,直接将筛选出来的文本过滤掉即可,因为第2步很有可能使训练数据更加杂乱。
筛选文本的方法当然就是用类目关键词,如果文本包含了1个(2个)以上的类目关键词则予以保留,否则过滤。
另一种起辅助作用的提纯方法是对每个类目下的文本做聚类,将小簇内的文本过滤掉。
6. 类目体系合理性验证
类目体系一般由用户指定,如果类目体系本身存在相似类目,也就是相同主题有多个类目,此时需要合并类目,采用层次化分类系统。另一方面,如果一个类目含有多个主题,此时需要将该类目拆分为多个子类目。总而言之,对于某一级分类模型而言,各类目直接之间主题不可以重合,每个类目内主题应当集中。
主要利用混淆矩阵,如果混淆矩阵的某列中,只有1个非零值元素且该元素在对角线上,说明对角线元素对应的类目已经合适且类目下数据已经纯净。
本节待录制学习视频
结合5天的内容,构建一个工业级多类别文本分类系统。