基于深度学习的文本分类?

2018 年 3 月 4 日 数萃大数据 史春奇

曾几何时, SVM一统江湖, Lecun见证的Vapnik和Larry Jackel的世纪之赌, 从95年坚持到2000年依然岿然不动。 但是再过10年, 到2010年, 深度学习横空出世。 SVM在图像,文本这些高维数据领域全面停滞。 反倒是Lecun的CNN网络一路挺进!


基于深度学习的图像目标检测”提到, 在图像分类和目标检测领域基本全是CNN网络。  那么文本分类领域呢?


前言


传统机器学习时代的主流分类器主要是基于Naive Bayes,Maximum Entropy, K-NN,和SVM的。 其中分类中还有些经典特征模型:经典距离定义模型Vector Space Model(Rocchio), N-grams等等。其中SVM一直保持不错的效果!



一, 待选模型


本人尝试过使用word2vec词嵌入+Boosting和Text-CNN模型的对比, 发现效果不如Text-CNN。 或许和图像检测里面一样, Fast R-CNN比SPPNet优的一点就是整合起来联动的参数优化。 所以这里也默认, 利用词嵌入这样的2阶段的模型效果不会比端到端的联动参数学习的模型效果好。 


1)Text-RNN


就是对文本看成编码后的信息流, 然后用RNN来编码:


复旦大学 Recurrent Neural Network for Text Classification with Multi-Task Learning发表在了ijca2016上,目前有40次引用了。 虽然着重点在Multi-Task Learning, 但是可以参考下下。 




2)  Text-CNN

哈佛的PhD帅哥Yoon Kim的 “Convolutional Neural Networks for Sentence Classification” 文章引用率1700多次了。已经成为文本分类中深度学习的经典!


但是在这片2014年的文章中, CNN是基于Pretrained的Word2vec的结果去做的, 其实效果还没有完全超越SVM。

但是现在更为流行的是直接基于带参数的Embedding去做, 这样效果会更好!


来自University of Texas at Austin的张晔,在他2016年的文章 A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification, 详细介绍了一些调参数的经验,也有超过150的引用率, 自从调参数成为很好的职业Amazon SageMaker启示录), 调参数也成为了很好的论文。 


这片文章里面给出一个单层CNN进行测试典型参数的使用:

* 词嵌入维度: 300维, 主要针对预训练

* Filter大小:7的filter最优,不同数据集上最优组合不一致, 但相差不多

* Filter的个数:推荐100 ~ 600个, 最好靠近600

* 激活函数:Iden, ReLU, tanh比sigmoid,cube要好, 默认ReLU好。

* Pooling技术:推荐1-max pooling,不要用average,效果不好。

* 正则化:dropout rate不要超过0.5, l2正则化效果不明确。

最后强调下, filter大小和数量可以调一调, 其他调不调意义一般。 



3)EntNet


LeCun的团队在ICLR2017上提出了Recurrent Entity Network, 简称为EntNet, 但是EntNet是为了QA问题提出来的, 对应论文为Tracking the World State with Recurrent Entity Networks, 有28次引用。 


EntNet延续了Facebook基于Memory Network(MemNN)在QA问题上的模型和成功经验。 MemNN相比RNN或者LSTM来说,强调专门的外部存储来保存以前的样本。 


最简单的Memory实现,可以是输入数据的自己的某种特征值的表达, 譬如和问题q的点积的Softmax输出。

 


也可以变得复杂, 可以多层次迭代。 



还可以更复杂, 变成KV-MemNN, 深化对问题和答案两边的记忆的存储。 


也可以引入Episodic Memory Module变形成Dynamic Memory Networks(DMN)。

一般通过GRU的attention网络实现,并且也可以双向多通道。 


如果加上控制网络和寻址读写机制,就是Neural Turing Machines(NTM),所以NTM可以说是DMN的升级版。


和MemNN相比, 除了记忆状态的延续, 还有控制状态的延续。 


在NTM基础上细化具体的地址读写机制和记忆链接机制,就会得到Differential Neural Computer (DNC), DNC使得性能和稳定都比LSTM和MemNN好很多。 


而EntNet本质就是希望达到DNC的并行模式, 能够并行更新记忆地址。 


一种简单的实现就是用多个RNN并行来记录多个Memory Slot, 所以又叫Recurrent Entity。 


对于QA的问题, EntNet要比DNC更加稳定和准确。



当我们把QA问题弱化到A是句子的分类标签的时候, 我们就能用到文本分类问题上, 有点点杀鸡用牛刀的感觉。 



4)HAN


Alex Smola的团队提出了Hierarchical Attention Networks(HAN)做文本分类, 他们的论文Hierarchical Attention Networks for Document Classification发表在NAACL16上。 有接近200次的应用。 


这样两层分层,就可以从字组成句子, 再进一步句子组成段落。 然后就训练分类网络Softmax。 



5)RCNN


自动化所的赵军老师团队的论文Recurrent Convolutional Neural Networks(RCNN) for Text Classification, 发表在AAAI2015上, 有超过200次的引用。 


通过Recurrent的思想, 定义了left context和right context模型。 

然后基于拼接操作得到输入, 然后利用tanh激活得到隐藏层的y。

其实仔细观察很想双向RNN的功能。 



6)Dynamic Memory Networks


斯坦福Manning组的博士Richard Socher,毕业后成立了 MetaMind公司, 做了CEO的Richard Socher带领团队里的Ankit Kumar 在ICML2016上发表了基于DMN来做QA的论文Ask Me Anything: Dynamic Memory Networks for Natural Language Processing, 这么牛掰的名字拥有300的引用量。 



后来, 他们又提出了DMN+模型, Dynamic Memory Networks for Visual and Textual Question Answering。 引入双向GRU作为句子间的融合。 


再增加了双通道

还进一步, 把第二层Attention采用GRU来实现。 



改进后的DMN+比DMN效果更佳!但是相对也更为复杂了。 


前面我们谈到EntNet可以看成DMN+的改进版。 但是在具体实现上, 我们看到DMN的结构要比EntNet结构复杂。 而这种复杂性也会带来计算上的时间开销。 




7)FastText


Tomas Mikolov所在团队在EACL2017上提出了FastText, Bag of Tricks for Efficient Text Classification, 开启了高效基于embedding的分类模型, 已有200多引用。 



CNN跑一天, 他只要几秒钟。 还是非常诱惑的!



一般采用2-gram 或者 3-gram, 这样把句子转化n-gram的特征. 

很明显的是更小单位的划分,对于未知词汇和缩率词会有帮助,所以相比较的也是对于字符的CNN。   后面计算的时候,会采用Softmax的近似计算, 譬如分成Softmax或者NCE,NS等等。 


用在分类问题的时候, 再加上Softmax分类器, 基本上就是一个线性的BoW分类器:



就会得到如下的训练目标公式。




8)Seq2Seq

对于Seq2Seq模型,在“深度神经网络机器翻译”里面有详细的解读。 

基于Seq2Seq可以实现QA系统, 所以类似的用来分类也是用了牛刀的感觉。 


阿里巴巴在ACL2017上有篇问题中AliMe Chat: A Sequence to Sequence and Rerank based Chatbot Engine, 谈论chatbot的,可以参考下下。 



二, 模型选择


1)CNN vs RNN的考量


IBM的文章Comparative Study of CNN and RNN for Natural Language Processing有个简单比较CNN和RNN。 


基本上的结论就是RNN不见得有CNN效果好, 但是Bi-RNN效果还是要好有点。 



另外在https://github.com/brightmart/text_classification 里面提到一般来说RNN在分类上,训练时间要长于CNN。 



所以,综合考虑效果和时间的话,所以建议还是采用Text-CNN


2)时间 vs 效果的考虑


依然根据github上的实践, 牛刀模型EntNet和HAN的效果还是可以的, 而且时间也和Text-CNN接近。 



从模型应用到文本分类上来说:

1. EntNet和DMN是看成一个类似模型分组

2. Bi-RNN和Seq2Seq可以看成一个类似模型分组

3. RCNN上下文的效果应该和Bi-RNN类似

4. HAN应该和各种Attention模型一个类似模型分组


这样代表来说, Text-CNN, Text-Bi-RNN, EntNet和HAN可以分别为卷积,上下文, 存储记忆和注意力机制的代表了。 


所以简单来说, 追求极速, 先用fasttext分类试试, 然后想提升效果了,就要考虑Text-CNN, Text-Bi-RNN, EntNet和HAN了。 



其他考量


强化学习RL用在QA或者优化深度网络上也有工作可以关注。 

譬如Choi的 Coarse-to-Fine Question Answering for Long Documents工作发表在ACL2017上。 其中RL对于探索长文档上起了一定作用。 


但是要看到和Attention机制相比, 效果有所提升, 但是时间开销也很大。 


小结

文本分类在深度学习的时代逃过了特征提取类似距离的定义的过程, 但是依然逃不了模型的选择, 参数的优化,编码和预处理的考量(one-hot, n-gram等等) ,以及时间的平衡。 希望这里列举的模型和解释,稍微有所帮助。 




参考:

https://plus.google.com/+YannLeCunPhD/posts/CR18UPiemYB

https://github.com/brightmart/text_classification

https://github.com/fendouai/Awesome-Text-Classification

https://github.com/brightmart/text_classification


课程信息

史博士将于3月24日-4月14日在上海开展深度学习培训,详情可识别以下二维码进入,点击“阅读原文”即可直接报名




登录查看更多
9

相关内容

文本分类(Text Classification)任务是根据给定文档的内容或主题,自动分配预先定义的类别标签。
基于深度学习的表面缺陷检测方法综述
专知会员服务
94+阅读 · 2020年5月31日
零样本文本分类,Zero-Shot Learning for Text Classification
专知会员服务
96+阅读 · 2020年5月31日
基于多头注意力胶囊网络的文本分类模型
专知会员服务
78+阅读 · 2020年5月24日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
214+阅读 · 2020年4月26日
基于深度学习的多标签生成研究进展
专知会员服务
143+阅读 · 2020年4月25日
Transformer文本分类代码
专知会员服务
117+阅读 · 2020年2月3日
基于深度学习的行人重识别研究进展,自动化学报
专知会员服务
39+阅读 · 2019年12月5日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
53+阅读 · 2019年11月20日
一文综述经典的深度文本分类方法
AI100
12+阅读 · 2019年6月8日
一文读懂深度学习文本分类方法
AINLP
15+阅读 · 2019年6月6日
CNN与RNN中文文本分类-基于TensorFlow 实现
七月在线实验室
13+阅读 · 2018年10月30日
从手工提取特征到深度学习的三种图像检索方法
深度学习文本分类方法综述(代码)
专知
11+阅读 · 2018年6月15日
用CNN做在NLP句子分类
数据挖掘入门与实战
7+阅读 · 2018年5月9日
深度学习在文本分类中的应用
AI研习社
13+阅读 · 2018年1月7日
深度学习时代的推荐系统
大数据技术
8+阅读 · 2018年1月6日
Domain Representation for Knowledge Graph Embedding
Arxiv
14+阅读 · 2019年9月11日
Arxiv
15+阅读 · 2019年9月11日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Arxiv
26+阅读 · 2018年9月21日
Arxiv
17+阅读 · 2018年4月2日
Arxiv
9+阅读 · 2018年3月10日
VIP会员
相关VIP内容
基于深度学习的表面缺陷检测方法综述
专知会员服务
94+阅读 · 2020年5月31日
零样本文本分类,Zero-Shot Learning for Text Classification
专知会员服务
96+阅读 · 2020年5月31日
基于多头注意力胶囊网络的文本分类模型
专知会员服务
78+阅读 · 2020年5月24日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
214+阅读 · 2020年4月26日
基于深度学习的多标签生成研究进展
专知会员服务
143+阅读 · 2020年4月25日
Transformer文本分类代码
专知会员服务
117+阅读 · 2020年2月3日
基于深度学习的行人重识别研究进展,自动化学报
专知会员服务
39+阅读 · 2019年12月5日
【综述】关键词生成,附10页pdf论文下载
专知会员服务
53+阅读 · 2019年11月20日
相关资讯
一文综述经典的深度文本分类方法
AI100
12+阅读 · 2019年6月8日
一文读懂深度学习文本分类方法
AINLP
15+阅读 · 2019年6月6日
CNN与RNN中文文本分类-基于TensorFlow 实现
七月在线实验室
13+阅读 · 2018年10月30日
从手工提取特征到深度学习的三种图像检索方法
深度学习文本分类方法综述(代码)
专知
11+阅读 · 2018年6月15日
用CNN做在NLP句子分类
数据挖掘入门与实战
7+阅读 · 2018年5月9日
深度学习在文本分类中的应用
AI研习社
13+阅读 · 2018年1月7日
深度学习时代的推荐系统
大数据技术
8+阅读 · 2018年1月6日
相关论文
Domain Representation for Knowledge Graph Embedding
Arxiv
14+阅读 · 2019年9月11日
Arxiv
15+阅读 · 2019年9月11日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Arxiv
26+阅读 · 2018年9月21日
Arxiv
17+阅读 · 2018年4月2日
Arxiv
9+阅读 · 2018年3月10日
Top
微信扫码咨询专知VIP会员