使用卷积神经网络进行文本分类textCNN

一维卷积层

我们可以将文本当作一维图像,从而可以用一维卷积神经网络来捕捉临近词之间的关联。与二维卷积层一样,一维卷积层使用一维的互相关运算。在一维互相关运算中,卷积窗口从输入数组的最左方开始,按从左往右的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。

多输入通道的一维互相关运算也与多输入通道的二维互相关运算类似:在每个通道上,将核与相应的输入做一维互相关运算,并将通道之间的结果相加得到输出结果。由二维互相关运算的定义可知,多输入通道的一维互相关运算可以看作单输入通道的二维互相关运算。如图10.6所示,我们也可以将图10.5中多输入通道的一维互相关运算以等价的单输入通道的二维互相关运算呈现。这里核的高等于输入的高。

时序最大池化层

textCNN中使用的时序最大池化(max-over-time pooling)层实际上对应一维全局最大池化层:假设输入包含多个通道,各通道由不同时间步上的数值组成,各通道的输出即该通道所有时间步中最大的数值。因此,时序最大池化层的输入在各个通道上的时间步数可以不同。

为提升计算性能,我们常常将不同长度的时序样本组成一个小批量,并通过在较短序列后附加特殊字符(如0)令批量中各时序样本长度相同。这些人为添加的特殊字符当然是无意义的。由于时序最大池化的主要目的是抓取时序中最重要的特征,它通常能使模型不受人为添加字符的影响。

模型构成

假设输入的文本序列由nnn个词组成,每个词用ddd维的词向量表示。那么输入样本的宽为nnn,高为1,输入通道数为ddd。

计算步骤如下:

  1. 定义多个一维卷积核,并使用这些卷积核对输入分别做卷积计算。宽度不同的卷积核可能会捕捉到不同个数的相邻词的相关性。
  2. 对输出的所有通道分别做时序最大池化,再将这些通道的池化输出值连结为向量。
  3. 通过全连接层将连结后的向量变换为有关各类别的输出。这一步可以使用丢弃层应对过拟合。

下面这个例子解释了textCNN的设计。假设我们需要进行情感分析任务。这里的输入是一个有11个词的句子,每个词用6维词向量表示。因此输入序列的宽为11,输入通道数为6。给定2个一维卷积核,核宽分别为2和4,输出通道数分别设为4和5。因此,一维卷积计算后,4个输出通道的宽为11−2+1=10,而其他5个通道的宽为11−4+1=8。尽管每个通道的宽不同,我们依然可以对各个通道做时序最大池化,并将9个通道的池化输出连结成一个9维向量。最终,使用全连接将9维向量变换为2维输出,即正面情感和负面情感的预测。

模型比较

在原paper中,作者训练了如下几种模型进行对比。

  • CNN-rand:基线模型,词向量需要从头进行训练
  • CNN-static:静态模型,直接使用了经过word2vec预训练后的词向量
  • CNN-non-static:非静态模型,对经过word2vec预训练后的词向量根据任务进行微调
  • CNN-multichannel:多通道模型,有两套单词向量,每一组向量当成一个通道。

实验证明使用预训练的词向量比基线模型有明显的提高。不过多通道模型对比单通道模型并未有压倒性的优势,有时候多通道模型性能更优,有时候单通道模型占优。

Reference

  • Dive Into Deep Learning,第10章

  • Convolutional Neural Networks for Sentence Classification, Yoon Kim

使用卷积神经网络进行文本分类textCNN相关推荐

  1. cnn 预测过程代码_代码实践 | CNN卷积神经网络之文本分类

    学习目录阿力阿哩哩:深度学习 | 学习目录​zhuanlan.zhihu.com 前面我们介绍了:阿力阿哩哩:一文掌握CNN卷积神经网络​zhuanlan.zhihu.com阿力阿哩哩:代码实践|全连 ...

  2. TextCNN——基于卷积神经网络的文本分类学习

    1.CNN基础内容 CNN的全称是Convolutional Neural Network,是一种前馈神经网络.由一个或多个卷积层.池化层以及顶部的全连接层组成,在图像处理领域表现出色. 本文主要学习 ...

  3. GCN图卷积神经网络-中文文本分类 pytorch

    代码基于Text-GCN作者论文和基于Bible的实践,保留原作者信息,具体代码请移步原作者仓库 https://github.com/plkmo/Bible_Text_GCN https://git ...

  4. 基于神经网络的文本分类(基于Pytorch实现)

    <Convolutional Neural Networks for Sentence Classification> 作者:Yoon Kim 单位:New York University ...

  5. 卷积神经网络在句子分类上的应用[翻译]

    最近翻译几篇paper,也算逼着自己多看看文章.对于一些概念的理解不够透彻可能导致翻译不准确,以及某些术语实在也是找不到合适的中文词,可能会有些别扭或索性没翻.大家将就着看.哪位大神看到了,如有不足还 ...

  6. 基于卷积神经网络的句子分类模型【经典卷积分类附源码链接】

    https://www.toutiao.com/a6680124799831769603/ 基于卷积神经网络的句子分类模型 题目: Convolutional Neural Networks for ...

  7. 论文阅读:Convolutional Neural Networks for Sentence Classification 卷积神经网络的句子分类

    Convolutional Neural Networks for Sentence Classification 卷积神经网络的句子分类 目录 Convolutional Neural Networ ...

  8. 基于卷积神经网络的高光谱分类 CNN+高光谱+印度松数据集

    基于卷积神经网络的高光谱分类 一.研究现状 只考虑到高光谱图像的光谱特征,即: 1.提取特征(小波变换.Gabor纹理分析.形态学剖面) 2.利用分类方法分类(支持向量机.决策树.随机森林.神经网络) ...

  9. 毕业设计 - 基于卷积神经网络的乳腺癌分类 深度学习 医学图像

    文章目录 1 前言 2 前言 3 数据集 3.1 良性样本 3.2 病变样本 4 开发环境 5 代码实现 5.1 实现流程 5.2 部分代码实现 5.2.1 导入库 5.2.2 图像加载 5.2.3 ...

最新文章

  1. 【C++】 18_对象的构造 (中)
  2. oracle数据源的报表sql计算慢解决
  3. 面试算法经典书籍--编程之美
  4. 力扣【阶乘问题】leetcode-172、阶乘后的零;leetcode-793、阶乘后K个零;
  5. android按钮置于顶层,如何把按键显示在最顶层窗口上(屏幕最顶上)
  6. python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化
  7. JS案例:使用对象、对象数组、正则表达式
  8. 仿真器如何工作以及如何编写? [关闭]
  9. C#中使用MongoDb
  10. C++:字符(串)输入和输出
  11. 稳压二极管限流电阻怎么选择
  12. react函数式组件传值之子传父
  13. android hdmi 开发,Android TV HDMI开发
  14. Sprite Kit教程
  15. html 字体图标转换工具,HTML5 webfont字体图标的使用
  16. 【企业微信怎么使用】如何快速做好企业微信客户数量增长?
  17. Mac 此账户尚未用于app store_精品良心Mac应用下载网站
  18. 抖音xg8404 X-Gorgon算法 IOS苹果协议算法
  19. 极路由B70/极路由4增强版改spi,pb-boot启动后切换回nand刷nand breed
  20. 安装程序无法自动安装 Virtual Machine Communication Interface Sockets (VSock) 驱动程序,必须手动安装此驱动程序

热门文章

  1. Vimium - 让Chrome高效工作的神器
  2. React学习实例总结,包含yeoman安装、webpack构建
  3. 设置NotePad++设置不打开上次关闭的文件
  4. HTML5 canvas drawImage() 方法记录
  5. C# 中的var关键字
  6. 从头开始学习深度学习之卷积
  7. python 可以 从视频中 直接剪辑音频出来(亲测MP4)
  8. jQuery用于请求服务器的函数
  9. Python xrange与range的区别
  10. HDU1576 A/B (解法二)【试探法】