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

  

  本文在事先进行单词向量的学习的基础上,利用卷积神经网络(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. tensorfow install error

    http://stackoverflow.com/questions/33655731/error-while-importing-tensorflow-in-python2-7-in-ubuntu- ...

  2. IE脚本调试

    打开IE -- 工具 -- Internet选项 -- 高级 --有4项. 1.禁用脚本调试(Internet Explorer)(去掉对勾) 2.禁用脚本调试(其他)(去掉对勾) 3.显示每个脚本错 ...

  3. 黑马基础阶段测试题:通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  4. wepy一些问题和解决方案

    wepy一些问题和解决方案 小程序开发和传统的web开发有相识的地方,但是也有不同的地方,要区分. computed属性名和props属性名重复 如果那个组件的渲染值是重名的computed属性,每次 ...

  5. Uva 派 (Pie,NWERC 2006,LA 3635)

    依然是一道二分查找 #include<iostream> #include<cstdio> #include<cmath> using namespace std; ...

  6. MitmProxy使用

    安装 tar -zxvf mitmproxy-3.0.1-linux.tar.gz sudo mv mitmproxy mitmdump mitmweb /usr/bin 详情 https://ger ...

  7. 项目实战14.1—ELK 企业内部日志分析系统

    本文收录在Linux运维企业架构实战系列 一.els.elk 的介绍 1.els,elk els:ElasticSearch,Logstash,Kibana,Beats elk:ElasticSear ...

  8. 一次完整的HTTP请求需要的7个步骤

    HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤: 1:建立TCP连接 在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连 ...

  9. vue.js 服务端渲染nuxt.js反向代理nginx部署

    vue.js的官方介绍里可能提到过nuxt.js,我也不太清楚我怎么找到这个的 最近项目vue.js是主流了,当有些优化需求过来后,vue还是有点力不从心, 比如SEO的优化,由于vue在初始化完成之 ...

  10. Go语言之并发编程(一)

    轻量级线程(goroutine) 在编写socket网络程序时,需要提前准备一个线程池为每一个socket的收发包分配一个线程.开发人员需要在线程数量和CPU数量间建立一个对应关系,以保证每个任务能及 ...