谈到文本分类,就不得不谈谈CNN(Convolutional Neural Networks)。这个经典的结构在文本分类中取得了不俗的结果,而运用在这里的卷积可以分为1d 、2d甚至是3d的。 

下面就列举了几篇运用CNN进行文本分类的论文作为总结。

1 yoon kim 的《Convolutional Neural Networks for Sentence Classification》。(2014 Emnlp会议)

 
他用的结构比较简单,就是使用长度不同的 filter 对文本矩阵进行卷积,filter的宽度等于词向量的长度,然后使用max-pooling 对每一filter提取的向量进行操作,最后每一个filter对应一个数字,把这些filter拼接起来,就得到了一个表征该句子的向量。最后的预测都是基于该句子的。该模型作为一个经典的模型,作为很多其他改领域论文里实验参照。

2 《A Convolutional Neural Network for Modelling Sentences》(2014 ACL会议) 

这个模型看起来就相对复杂一些,不过其基础也是基于卷积的。每一层的卷积操作之后同样会跟上一个max pooling操作。整个模型操作相对于上面的那个模型比较繁琐,同时我有以下几个比较质疑的地方: 
1 倒数第二到倒数第三层使用了k-max 的pooling操作,也就是说第三层中相邻的词语对应于原来的句子可能不再是相邻的,而且它们只有相对的先后关系保存了下来。倒数第三层中不同卷积平面对应的词语在原句子中可能处于不同的位置,甚至是不同的词语,因此倒数第三道倒数第四之间的卷积是没有意义的。

2 关于这里的folding操作。把同一个词语向量的不用维度之间进行加法操作,这样原文里是这样解释的“With a folding layer, a feature detector of the i-th order depends now on two rows of feature values in the lower maps of order i -1.”。但是这样的操作有意义吗??从来没有见人提到用过,也许我们未来可以探索一下这样是否能够提高卷积器的性能。

3《A C-LSTM Neural Network for Text Classification》(arXiv preprint arXiv) 
 
其实这篇论文里只是用cnn对原文的词向量以某一长度的filter进行卷积抽象,这样原来的纯粹词向量序列就变成了经过卷积的抽象含义序列。最后对原句子的encoder还是使用lstm,由于使用了抽象的含义向量,因此其分类效果将优于传统的lstm,这里的cnn可以理解为起到了特征提取的作用。

4 《Recurrent Convolutional Neural Networks for Text Classification》(2015 AAAi会议) 
 
正如标题所说的,把lstm和cnn结合起来了,不过这个结合的方式和上面的不一样。举例来说对于词序列: A B C D E F来说,在形成C词的向量化表示的时候,使用的不再仅仅是C的word embedding,而是C左边的内容构成的向量和C以及C右边内容构成的向量的拼接形式。由于使用到了左右两边的内容故使用的是双向的Lstm。然后如图中所示使用1-d convolution的方式得到一系列的y,最后经过max-pooling的方式得到整个句子的向量化表示,最后的预测也是基于该句子的。

5 《Learning text representation using recurrent convolutional neural network with highway layers》(arXiv preprint arXiv) 
 
这个模型几乎就是稍微的更改了一下4中的模型,只不过在C向量拼接完毕将要进行卷积操作之前经过了一个highway而已。(本人对于仅仅加了一个highway就能提高模型准确率的做法感到十分怀疑,毕竟这个网络的层数并不深)

CNN 文本分类的更多相关文章

  1. CNN文本分类

    CNN用于文本分类本就是一个不完美的解决方案,因为CNN要求输入都是一定长度的,而对于文本分类问题,文本序列是不定长的,RNN可以完美解决序列不定长问题, 因为RNN不要求输入是一定长度的.那么对于C ...

  2. pytorch -- CNN 文本分类 -- 《 Convolutional Neural Networks for Sentence Classification》

    论文  < Convolutional Neural Networks for Sentence Classification>通过CNN实现了文本分类. 论文地址: 666666 模型图 ...

  3. CNN 文本分类模型优化经验——关键点:加卷积层和FC可以提高精度,在FC前加BN可以加快收敛,有时候可以提高精度,FC后加dropout,conv_1d的input维度加大可以提高精度,但是到256会出现OOM。

    network = tflearn.input_data(shape=[None, max_len], name='input') network = tflearn.embedding(networ ...

  4. CNN tensorflow text classification CNN文本分类的例子

    from:http://deeplearning.lipingyang.org/tensorflow-examples-text/ TensorFlow examples (text-based) T ...

  5. 文本分类:Keras+RNN vs传统机器学习

    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...

  6. 文本分类需要CNN?No!fastText完美解决你的需求(后篇)

    http://blog.csdn.net/weixin_36604953/article/details/78324834 想必通过前一篇的介绍,各位小主已经对word2vec以及CBOW和Skip- ...

  7. 文本分类需要CNN?No!fastText完美解决你的需求(前篇)

    http://blog.csdn.net/weixin_36604953/article/details/78195462?locationNum=8&fps=1 文本分类需要CNN?No!f ...

  8. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...

  9. [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...

随机推荐

  1. linux redis 启动 overcommit_memory

    Redis在启动时不成功, 查看日志发现如下警告: WARNING overcommit_memory is set to 0! Background save may fail under low ...

  2. python_09 文件处理流程,文件操作方法

    文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 f=open('test.txt',encoding='gbk') data = f.read() ...

  3. 第三篇、Python函数

    1.函数和过程的定义: 1) 函数定义:函数是逻辑结构化和过程化的一种编程方法. 2) 过程定义:过程就是简单特殊没有返回值的函数. 当一个函数/过程没有使用return显示的定义返回值时,pytho ...

  4. HttpWebResponse远程服务器返回错误: (500) 内部服务器错误 的解决办法

    在工作中用C#开发了一个小程序,不断访问去请求一个网站的页面,在循环过程中有时会报“远程服务器返回错误: (500) 内部服务器错误”,有时不会,出现的时机也不太一样.开始以为是网站的问题,后来网站是 ...

  5. Balls(扔鸡蛋问题)

    4554 BallsThe classic Two Glass Balls brain-teaser is often posed as:“Given two identical glass sphe ...

  6. SpringBoot +Pom.xml工程资源文件配置

    继承spring-boot-starter-parent 要成为一个spring boot项目,首先就必须在pom.xml中继承spring-boot-starter-parent,同时指定其版本 & ...

  7. oracle数据库分页总结

    /* BEGIN CREATE TABLE APPUSER(IDS NUMBER(8), USERNAME VARCHAR2(20), PASSWORD VARCHAR2(20), CTIME DAT ...

  8. Eigen使用矩阵作为函数参数

    1 使用矩阵作为函数参数介绍 文章来源Writing Functions Taking %Eigen Types as Parameters Eigen为了在函数中传递不同的类型使用了表达式模板技术. ...

  9. javaweb开发.页面中文乱码问题

    1.设置eclips , window->Preferences->web->JSP Files中的Encoding选项为UTF-8 2.修改jsp文件头部为UTF-8 <%@ ...

  10. jsp相关笔记(三)

    在往数据库的表中写入数据时,一定要与表中的每一项对应,比如表中有三项,则写入的值也应该是三类: String getTitle=request.getParameter("title&quo ...