读了一篇文章,用到卷积神经网络的方法来进行文本分类,故写下一点自己的学习笔记:

  

  本文在事先进行单词向量的学习的基础上,利用卷积神经网络(CNN)进行句子分类,然后通过微调学习任务特定的向量,提高性能。

  在从无监督神经语言模型中获得单词向量(Tomas Mikolov等人做过相关工作,即谷歌的word2vector完成,将原始的1/V模型变化为分布式低维表示)后利用一层卷积层的CNN进行学习。

  模型结构:

  

  首先输入具有两个通道,分别对应static和non-static的方式,其中static方式表明单词向量不会随着训练过程而发生变化,我们可以采用各种各样的固定长度编码,包括one-hot(数据量很小的时候可以用),本文中采用的是google的word2vec的word embedding,将单词转化为维度固定的向量表达。

在卷积层当中,这里与图像识别中的CNN不同的是:这里的卷积核的宽度是一定的(即词向量的维数),而高度代表了词语的个数。例如h=3,即代表了3-gram的上下词信息,h=4,就代表4-gram的信息,h=n表示n-gram。每一个卷积核(Filter)的参数是共享的,代表着一个卷积核只能识别同一类特征。依次顺序往下扫描生成,卷积后生成的feature map不再是一个矩阵,而是一个宽度只有1的列向量(图中的一竖列)。 

  然后在池化层的pooling采用max pooling,即将每一个Filter卷积得到列向量中的最大值ci取出来,其他的丢弃,因此能得到一个维度为X(X为Filter的数目,例如设置了h=3,4,5三个Filter,X就等于3)。这样做有一个好处,即文中原本只对单词进行了embedding,生成了维度固定的编码,但没有对文本进行这样的操作,因此没一段文本当中包含的单词数也是不同的,如果不进行maxpooling池化的话,会造成维度不一样的情况(实际上也可以对文本进行同维度编码,但是这样做有些复杂,又是一个研究方向了;另外也可以对文本进行padding,即设定一个固定的长度,多了就截掉,少了就补上,我在另外一篇字符级CNN的论文中看到这样的操作,就把长度设置为1014,认为能表达大部分的含义),在进行了maxpooling操作之后,从池化层出来的向量的维度统一变成了X。

  经过一个池化层之后有一个全连接层,即通常的三层神经网络结构中隐层连接输出层的操作,采用softmax函数输出从属于不同类的分布概率,同时还加了一个dropout操作来防止过拟合,即对全连接层上的权值参数给予L2正则化的限制。

  还要提到的一点就是前文所说的“两种通道”,实际上第一种通道就是static的,利用word2vec将单词统一编码,而另外一种通道就是non-static,这种方法中所有的单词向量并不是产生后就不发生变化的,而是在训练的过程中会被微调。

  实际上本文的模型比较简单,但是实际效果非常好。在实验结果中可以看到non-static的方法大多数时候都是要比static方法稍好的,而static方法比rand的方法要好(rand是指word embedding过程中词的编码随机给出)。而结合static和non-static的multichannel方法相较于单纯的static和non-static方法,在较小的数据集上表现比他们都要好(因为这种混合的方法体现了一种折衷的想法,即不希望被微调的单词向量与原始产生的单词向量差距太大,也希望保持一定的动态变化空间)。

  

卷积神经网络用语句子分类---Convolutional Neural Networks for Sentence Classification 学习笔记的更多相关文章

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

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

  2. 深度学习笔记 (一) 卷积神经网络基础 (Foundation of Convolutional Neural Networks)

    一.卷积 卷积神经网络(Convolutional Neural Networks)是一种在空间上共享参数的神经网络.使用数层卷积,而不是数层的矩阵相乘.在图像的处理过程中,每一张图片都可以看成一张“ ...

  3. 《Convolutional Neural Networks for Sentence Classification》 文本分类

    文本分类任务中可以利用CNN来提取句子中类似 n-gram 的关键信息. TextCNN的详细过程原理图见下: keras 代码: def convs_block(data, convs=[3, 3, ...

  4. [NLP-CNN] Convolutional Neural Networks for Sentence Classification -2014-EMNLP

    1. Overview 本文将CNN用于句子分类任务 (1) 使用静态vector + CNN即可取得很好的效果:=> 这表明预训练的vector是universal的特征提取器,可以被用于多种 ...

  5. 树卷积神经网络Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning

    树卷积神经网络Tree-CNN: A Deep Convolutional Neural Network for Lifelong Learning 2018-04-17 08:32:39 看_这是一 ...

  6. 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network

    Convolutional Neural Network Overview A Convolutional Neural Network (CNN) is comprised of one or mo ...

  7. Neural Networks and Deep Learning学习笔记ch1 - 神经网络

    近期開始看一些深度学习的资料.想学习一下深度学习的基础知识.找到了一个比較好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是非常多的. ...

  8. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  9. [C4W1] Convolutional Neural Networks - Foundations of Convolutional Neural Networks

    第一周 卷积神经网络(Foundations of Convolutional Neural Networks) 计算机视觉(Computer vision) 计算机视觉是一个飞速发展的一个领域,这多 ...

随机推荐

  1. mantis基本配置及邮件服务器配置

    邮件服务器配置 在c:\php-5.0.3\php.ini文件中查找smtp,将localhost改为你的发件服务器,如SMTP = smtp.163.com   在php.ini文件中查找sendm ...

  2. 用@vue/cli发布npm包

    1.环境准备 安装node,npm,@vue/cli 2.初始化项目 用@vue/cli创建新项目 vue create mtest-ui 删除public,main.js,App.vue等无关文件, ...

  3. java面向对象思想2

    1.主函数是一类特殊的函数,作为程序入口,可被虚拟机调用.主函数格式是固定的.public:函数访问权限最大.static:代表函数随着类的加载已经存在.void:主函数没有具体返回值.main:不是 ...

  4. IATHook

    IATHookClass.h #pragma once #include <Windows.h> class IATHookClass { private: DWORD oldAddr; ...

  5. Mysql5.7自定义函数递归报错1424 Recursive stored functions and triggers are not allowed

    示例: DELIMITER $$CREATE FUNCTION test(countnum INT)RETURNS INT DETERMINISTICBEGINDECLARE tempnum INT ...

  6. 五、Linux 远程登录

    Linux 远程登录 Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务器. 这时我们就需要远程登录到Linux服务器来管理维护系统. Linux系统中是通过ss ...

  7. 了解并使用springAOP(面向切面编程)

    Aop是干嘛的为什么要使用它 在业务系统中,总有一些散落,渗透到系统的各处且不得不处理的事情,这些穿插在既定业务中的操作就是所谓的“横切逻辑”,也称切面, 我们怎样才不受这些附加要求的干扰,专心于真正 ...

  8. JavaScript(E5,6) 正则学习总结学习,可看可不看!

    1.概述 正则表达式(实例)是一种表达文本模式(即字符串结构)的方法. 创建方式有两种方式: 一种是使用字面量,以斜杠表示开始和结束. var regex = /xyz/ 另一种是使用RegExp构造 ...

  9. 【转】Mysql查询语句优化策略

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索 ...

  10. Python9-IO模型-day41

    # 进程:启动多个进程,进程之间是由操作系统负责调用# 线程:启动多个线程,真正由被cpu执行的最小单位实际是线程# 开启一个线程,创建一个线程,寄存器.堆栈# 关闭一个线程# 协程# 本质上是一个线 ...