一种使用快速、简单有效的文本分类方法

问题及需求

使用CNN,LSTM,Attention based model建立一个文本分类深度模型固然很好很强大,但是实际情况是,数据集和模型同等重要,到哪里去搞质量好的打标签的训练样本在短时间内是一个问题。应对短平快,没有数据集的情况下,能否找到一种可用的文本分类方法解决问题呢?

本文方法的切入点:快速,简单,有效。
虽然方法比较简单,但是作为一个trade off,在一定程度上能快速有效解决项目中实际用到的文本分类问题。

工具及方法

Tools:

  • Bloom Filter(布隆过滤器)

对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。

Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。

  • cell word bank(细胞词库)

可以理解为一个词典,一系列相关的词汇,比如“传染病词库”,里面就包含了各种跟传染病相关的词,比如流行性感冒,狂犬病等等,搜狗输入法有所收集。可以在网站上下载到。

  • word2vec(词向量)

谷歌开源的一个词向量提取工具,在我们文本分类工作的作用是找近义词,词向量有很多有趣的性质,比如近义词就是通过寻找word embedding之后得到的词向量,其夹角较小或者欧几里得距离较近的一组向量。在本方法中用于近义词扩充细胞词库。

具体方法:
采用朴素贝叶斯的思想,分词->统计文本中的词在每个细胞词库中出现的次数。细胞词库及其词的近义词扩充(使用word2vec)在程序初始化的时候已经在布隆过滤器中存好。这样处理之后得到一个向量,向量的每一维度就是文本在对应细胞词库中出现的次数。最简单的算法就是,在一个领域出现的词越多,就说明我的文本属于这个领域的可能性越大。

比如有这样一个文本“习近平总书记出席G20杭州峰会”,其中习近平、总书记、出席、峰会都映射到了政治敏感的细胞词库中,那么我这个文本极有可能属于政治敏感类。

在实际项目中发现,这个方法的可用程度非常高。

你可能感兴趣的:(一种使用快速、简单有效的文本分类方法)