《Character-level Convolutional Networks for Text Classification》

Character-level Convolutional Networks for Text Classification

概述:验证使用字符级的CNN进行文本分类任务的可能性

笔记:

1.文本分类是个nlp经典问题,从人工标注特征到选择最好的机器学习分类器,目前,几乎所有的文本分类都是基于词的(截止2016年4月)。

2.后来人们发现cnn对于原始数据提取特征很有用,就从cv到语音识别都开始用cnn,有种叫time-delay的网络,和后来的cnn本质相同,用来对序列数据建模。

3.本文构造了几个大数据集,用一个文本分类任务举例,提供了一套广泛的对比。

4.char cnn不仅可以不依靠句法信息和语义信息,甚至连词的信息都不需要。十分方便工程实现,因为不管干什么语言都是最终以字符为单位的,还有一个好处就是对于拼写错误和特殊符号表情等有更好的鲁棒性。

5.本文中max-pooling可以使cnn达到6层,其他层都失败了,论文A theoretical analysis of feature pooling in visual recognition.对池化的一些原理进行了解释。

6.文中的非线性单元用的是整流器或者阈值函数max{0,x},类似于Relu。使用batch为128的随机梯度下降,学习率为0.01动量为0.9每三个epoch减半10次……,使用Torch 7 框架实现。

7.和wordEmbedding不同,输入由根据语言事先指定size为m的编码表编码,每个字符会转为由这个size为m的编码表编码的土制one-hot向量。前向顺序向量化整个句子,方便fullyconnect的时候关联上一个最近的读取。本文中的字母表size为70,26英文字母,10个数字,33个特殊字符。

8.本文还对不同字母表进行了建模,也有区分大小写的操作。

9.本文创建2个结构,一个Large的一个Small的。都是9层,包括6层卷积层,3层fullyconnect,三层fullyconnect之间有两层dropout来正则化,dropoutKeepprob为0.5。

10.输入向量化为长度70宽度为字符数的矩阵,1014维的特征层。

11.使用同义词替换进行数据增强,使用的同义词词典来自LibreOffice的mytheas组件,其中的词典来自WordNet,也不是全都换的,有trick在里面。

12.本文涉及的传统方法是人工特征提取器+一个线性分类器,分类器都是多项式logistics regression。

13.传统文本分类方法:
       Bag-of-words and its TFIDF
       Bag-of-ngrams and its TFIDF
       Bag-of-means on word embedding
       深度学习的方法:
       ConvNet based words with word2vec
       lstm based words with word2vec,使用了“vanilla”的变体,为了防止梯度爆炸进行了梯度裁剪gradient clipping。

14.关于字母表的选择,区分大小写不是个明智的选择,会得出更差的结果。推测是因为语义不会因为字母的大小写而发生改变,全部转为小写是有好处的,即正则化是有好处的。

15.构建了数几个测试集。从数十万到数百万不等。

16.传统方法在十万级的训练集上传统方法表现更好,当上百万的训练集上char cnn表现更好。

17.char cnn对于一些用户自创的数据有更好的效果,本文并无明确证据证明char cnn擅长容错拼写错误和表情符号。

18.在Bag-of-means 上使用wordembedding效果非常差,比其他所有模型都差,说明word2vec并不是所有模型都适用的,尤其是简单的方法上。

19.There is no free lunch,本文中没有一个模型能在所有数据集上保持统治地位。

结论:

char cnn是有效的方法,但是受各种因素影响,比如数据集大小、文本是否经过curated、字母表的选择。

 

 

你可能感兴趣的:(文本分类,nlp)