NLP系列学习:CNN文本分类

这一篇文章主要是记录下自己阅读《Convolutional Neural Networks for Sentence Classification》这篇文章思路的一个整理。这篇文章也可以算是CNN用于文本分类的开山之作了,尽管第一个使用CNN进行文本分类的不是Yoon Kim,但是Kim在这篇文章里提出来不少的方法,并且调参的过程也很详细,这些是我们应该学习的。

1:Introduction

这部分主要还是讲了讲前人使用CNN的一些工作,这部分暂且不提,主要思考的一个问题是为什么选用CNN,在这里论文里也没有详细讲,我写写我的想法,如果不对,欢迎指教。

我们传统的分类器比如朴素贝叶斯和SVM这样的,大多数将文本表示的方法是将其转换为“词袋模型”,主要还是根据在文本中出现的词频来做的,这样也会导致词与词之间的序列信息丢失,我们分词之后,句子本身相当于切成一块一块,词和词组合之后往往会有局部语意。这里一个重要的问题就是粒度和语意的矛盾。如果粒度过大,则太稀疏就跟强行使用N-gram一样,意义不大,粒度过小那么意思就不对了。而使用CNN的话, 通过卷积层之后,把每 k 个词组合之后的语意放在一起,得到比较准确的句向量。

2:模型输入的数据格式

文章中模型的输入的格式进行了四种尝试,然后进行对比,有以下四种:

CNN-rand: 所有的 word vector 都是随机初始化的,同时当做训练过程中优化的参数;

CNN-static: 所有的 word vector 直接使用 Word2Vec 工具得到的结果,并且是固定不变的;

CNN-non-static: 所有的 word vector 直接使用 Word2Vec 工具得到的结果,这些 word vector 也当做是可优化的参数,在训练过程中被 Fine tuned;

CNN-multichannel: CNN-static 和 CNN-non-static 的混合版本,即两种类型的输入;

3:模型介绍

这个模型结构还是比较简单的,主要目的应该还是简单计算吧.说说他的结构:

模型的主要结构:

输入层+第一层卷积层+池化层+全连接+softmax层

输入层

从图上看,输入层就是句子中词语对应的词向量依次从上到下排列的,比如有n个词,词向量的维度是K,则这个矩阵就是n*k的矩阵。至于这个矩阵是静态和动态都可以,这个我查了一些博客,其中有个解释是说static是说词向量的大小是固定不变的,non-static的意思是指通过反向传播之后,产生的误差导致词向量发生fine tuned,对于未登录的词,这里padding一下。

第一层卷积层

输入层通过h*k的卷积核的卷积层之后得到列数为1的Feature Map,其中h表示纵向词语的个数,k表示词向量的维度。

卷积之后通过激活函数f得到feature。记为ci。它是由xi:i+h−1相邻的 h 个词语卷积得到的值,再 activation 之后的值,也是当前层的输出。

卷积之后的值:w⋅xi:i+h−1+b

输出的 feature 值 ci=f(w⋅xi:i+h−1+b),也就是sentence embedding

窗口大小:h

这样之后,一个 n 长度的sentence就有[x1:h,x2:h+1,x3:h+2,…,xn−h+1:n]这些 word windows,卷积后的结果就是 c = [c1,c2,…,cn−h+1],维度为(1,n-h+1)

然后进行池化 max pooling,选出最重要的 feature。

pooling scheme可以根据句子的长度来选择。

池化层

这里池化层说是用Max-over-time Pooling的方法,这种方法其实就是从之前的Feature Map中提取最大的值,我们在使用最大池化法的时候一般认为池化层中提取的最大,一般是最具有代表意义的或者是最重要的。最终提取出来成为一个一维向量。

全连接层+softmax层

池化之后的一维向量通过全连接的方式接入一个softmax层进行分类,并且在全连接部分使用Dropout,减少过拟合。

最后的结果

从结果看

CNN-static较与CNN-rand好,说明pre-training的word vector确实有较大的提升作用(这也难怪,因为pre-training的word vector显然利用了更大规模的文本数据信息);

CNN-non-static较于CNN-static大部分要好,说明适当的Fine tune也是有利的,是因为使得vectors更加贴近于具体的任务;

CNN-multichannel较于CNN-single在小规模的数据集上有更好的表现,实际上CNN-multichannel体现了一种折中思想,即既不希望Fine tuned的vector距离原始值太远,但同时保留其一定的变化空间。

下面总结一下Ye Zhang等人基于Kim Y的模型做了大量的调参实验之后的结论(核心)

由于模型训练过程中的随机性因素,如随机初始化的权重参数,mini-batch,随机梯度下降优化算法等,会造成模型在数据集上的结果有一定的浮动

词向量是使用word2vec还是GloVe,对实验结果有一定的影响,具体哪个更好依赖于任务本身;

Filter的大小对模型性能有较大的影响,并且Filter的参数应该是可以更新的;

Feature Map的数量也有一定影响,但是需要兼顾模型的训练效率;

1-max pooling的方式已经足够好了,相比于其他的pooling方式而言;

正则化的作用微乎其微。

调参建议

1:word2vec和Glove比单纯的one-hot效果好的多(似乎没毛病)

2:最优的Filter的大小可以通过线性搜索确定,但是过滤器的大小在1-10口味食用最佳。

3:Feature Map在100-600之间

4:激活函数tanh和Relu效果很好

5:最大池化效果就很不错了

6:适当使用正则化手段,比如调节dropout的概率

7:反复交叉验证检验模型的水平。

参考资料:

1:Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.

2:A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification Ye Zhang, Byron Wallace

3:Convolutional Neural Networks for Sentence Classification

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容

  • 一些废话好久没有更新了,简书上公式编辑实在是让我不舒服~发现,不写下来自己的金鱼脑袋太容易忘记。ok,继续记录。由...
    是neinei啊阅读 7,795评论 0 13
  • 卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,...
    MiracleJQ阅读 7,433评论 0 6
  • 需求 最近项目需求需要模拟微信的朋友圈功能,实现可以发送图文消息,好友可以查看,满足添加新的好友之后,可以在朋友圈...
    真老根儿阅读 10,082评论 11 5
  • 有一段时间没有用简书了。前几天无聊又开始看看简书的文章。然后受到了点启发。我发现有好些人会在这个平台上写一些他们的...
    Richardo92阅读 671评论 12 1
  • 本文首发微信公众号:相遇小ying 2016-06-13王跃英相遇小ying 只要出现一例安全事故,安监局叫...
    我爱刨根问底阅读 402评论 0 2