1.CNN使用原理

  • (1) 相对于图片像素,在NLP任务中,将句子和文章作为一个矩阵来输入给CNN网络,矩阵中的每一行代表一个标记token,通常是一个词语,但是,也可以是一个字符。也就是说,矩阵中的每行是一个向量,这个向量代表一个词语。通常这个向量是词嵌入向量(低维表示),比如word2vec、glove,但是有时候单个词语也可以使用one-hot编码来表示该单词在词汇表中的索引。对于一个由10个单词组成的句子,使用一个100维的词嵌入向量来表示每个单词,那么这个句子可以表示为10*100为的矩阵,这个矩阵就可以作为CNN网络的输入,也就类似于图像领域的“图片”。
  • (2) 在计算机视觉领域,卷积核是滑过整个图片。但是,在NLP领域我们通常使用卷积核滑过矩阵的整行,相当于滑过句子中的词语。换句话说是,卷积核的宽度通常与(1)中输入的矩阵宽度相同。但是,卷积核的高度通常是变化的,通常每次滑过的单词宽度是windows words 是2~5,将所有卷积核提取的结果合并在一起,NLP中的一个卷积神经网络工作原理如下图所示:

2.NLP中的CNN不同之处

  • (1) 我们对计算机视觉的直觉如何?位置不变性和局部组合性对图像有直观的意义,但对于NLP则不那么重要。你可能会关注在一个句子中出现同一个词语。彼此接近的像素可能在语义上相关(对同一图像的一部分而言),但对于词语而言并非总是如此。在许多语言中,短语的一部分可以用几个其他单词分开,词语外观上也不明显。很明显,在某些方面单词的构成,例如修饰名词的形容词,但这究竟是如何工作的,更高级别的表示实际上“含义”并不像计算机视觉那样明显。
  • (2) 考虑到上述描述的问题,CNN似乎无法在NLP任务中使用。幸运的是,上述存在的问题并不能意味着CNN在NLP任务中无法应用。正如名言" All models are wrong, but some are useful"所说,从事实角度出发,CNN在NLP任务上的应用反而很好。简单的Bag of Words模型显然过于简单化,但多年来一直是常用方法,并取得了相当不错的结果。
  • (3)对于CNN网络,一直认为它都是一个很快的网络。卷积操作是计算机图像方向的核心操作,在GPU硬件上的实现。与n-grams语言模型对比,从词语的表示形式上来说,CNN更加有效。当一个词汇表中有很多单词时,计算超过tri-grams时将会浪费很多的计算成本。即使是Google公司也不会提供超过5-grams的语言模型。卷积核可以自动学习到词语好的表示形式,不需要表示出整个词汇表。卷积核的数量超过5个是完全合理的,我认为卷积核在第一层捕捉到的特征与n-grams语言模型捕捉到的特征是相似的,但是前者以一种更紧凑的方式表现出来的。

3.CNN中的超参数

在解释CNN如何应用在NLP任务中之前,先让我们看看搭建CNN时需要做出的一些选择,希望这有助于您更好地了解该领域的文献。

  • (1) Narrow vs. Wide convolution

    • a. 当我解释上面的卷积操作时,我忽略了使用卷积核过程中的一些细节。应用一个3*3的卷积核在矩阵的中间部分时,得到的结果会很好,但是矩阵的边缘部分该如何处理?如何将卷积核应用在一个没有左上角元素的矩阵的第一个元素上?答案是使用padding操作,所有在矩阵边缘的元素都可以在边缘元素的外部用0填充。通过这个操作,你可以将卷积核应用在输入矩阵的任意位置上,获得一个更大且相同大小的输出。增加zero-padding操作也被称为是wide convolution,没有用0元素填充的操作称为narrow convolution.下图中n_filter=5,n_in=7,n_padding=4

    • b.当你有一个与输入矩阵尺寸相关且很大的卷积核时,通过上图,你可以看出wide convolution是有用的,甚至是必要的操作。如上图所示,narrow convolution生成的输出尺寸是(7-5)+1=3,wide convolution生成的输出尺寸是(7-2*4-5)+1=11。更加普遍的情况是,计算公式如下图所示:
  • (2) Stride Size
    • a.卷积神经网络中的另一个超参数是stride size,这个参数定义了卷积核每次在输入矩阵中的移动步长大小。上面的所有例子中stride size=1,重复的应用这个步长来移动卷积核。步长越大,卷积核的移动次数越少,输出的尺寸越小。下面的图来自CS231课程

    • b.通常在文献中stride size=1,当stride size太大时,我们可以构建出一个类似于循环神经网络结构的模型。
  • (3) Pooling Layers
    • a.CNN中的一个关键方面是池化层,这层通常在卷积层之后应用。通常对卷积核得到的输出应用一个max操作实现池化功能。你不需要对整个矩阵进行池化操作,你可以将矩阵分隔成几个窗口,对每个窗口进行池化操作。例如,下图中max操作时,窗口的大小是2*2(在NLP领域中,我们通常在卷积层的输出矩阵上应用池化操作,每个卷积核池化后得到一个实数),具体如下图所示:
    • b.为什么要进行池化操作?主要有以下几个原因:池化层的一个特点是提供一个固定大小的输出矩阵,这个输出矩阵通常被用作分类。比如,你有1000个卷积核,你将池化操作应用在卷积层输出的矩阵后,不论卷积核的大小、输入矩阵的大小,你都会得到一个1000维的池化后的输出矩阵。这允许你可以使用可变大小的句子长度和可变大小的过卷积核,但最终获得相同的输出维度来提供给分类器。
    • c.池化操作还可以减少输出矩阵的维度,但是同时也保持了最显著的特征。你可以将每个卷积核理解成检测特定功能的特征提取器。例如,检测句子是否包含“not amazing”等这样的否定词语。如果此词语出现在句子中的某处时,则将卷积核应用于该区域,结果将产生较大的值,但在其他区域中产生较小的值。通过执行最大池化操作,能够将这个词语是否出现在句子中的信息保留下来,但是也丢失有关词语出现在句子何处的信息。但后者的这个信息不太重要,它类似于bag of n-grams模型。你正在丢失关于这个词语在一个句子中全局位置信息,但同时卷积核正在捕捉这个词语在这个句子中的局部位置信息,比如"not amazing"与"amazing not"显然是不同的。
    • d.在图像识别领域,池化操作提供了图片移动和旋转的基本不变特性。当你对某个区域执行池化操作,即使你将图像移动/旋转几个像素,输出也将保持大致相同,因为最大池化操作无论如何都会选择相同的值。
  • (4) Channels
    最后,我们必须理解通道这个概念,通道是对输入数据的不同视角理解。例如,在图像识别领域,通常有RGB(红、绿、蓝)3个通道,你可以贯穿整个通道来执行卷积操作,使用相同或不同的权重。在NLP中,你可以想象有不同的通道,如:你可以分别为不同的词嵌入(word2vec/glove)使用一个独立的通道,或者你也可以为不同语言中相同含义的句子设置一个通道。

4.Convolutional Neural Networks applied to NLP

下面让我们看一下CNN在自然语言处理中的使用,我尝试总结CNN在这个领域上一些研究成果。研究结果总是我会想起许多有趣的应用程序(请在评论中告诉我),但我希望至少涵盖一些更受欢迎的结果。

  • (1)CNN在NLP中的最适合的应用似乎是分类任务,比如情感分析、垃圾邮件识别、观点分类等。卷积和池化操作丢失关于单词的局部位置信息,因此序列标注(如位置标注、实体提取)任务上应用一个纯CNN网络是有一点困难的。文献[1]在一个多分类数据集上评价一个CNN网络结构的效果,主要包括情感分析和主题分类任务。CNN网络结构在整个数据集上获得非常好的效果。令人意外的是文章中使用的网络非常简单,但是功能强大。输入层是一个句子,这个句子是由word2vec词嵌入表示的词向量表示。卷积层使用了多个卷积核,卷积层之后使用一个最大池化层,最后是一个softmax分类器。文章中使用静态和动态两种不同的词嵌入的通道,动态的通道在训练过程中能自动调整词嵌入。文献[2]使用更加复杂的网络结构,文献[3]中增加一个额外的一层来执行"语义聚类"任务。

5.论文复现结果






6.参考文献及博客

参考文献1
参考文献2
参考文献3
本文翻译原文链接
参考博客

如何在NLP领域应用卷积神经网络CNN相关推荐

  1. 深度学习:应用于机器视觉领域的卷积神经网络(CNN)简介

    1 背景介绍 深度学习是近几年的热门研究话题.深度学习受到神经学的启示,模拟人脑的认知与表达过程,通过低层信号到高层特征的函数映射,来建立学习数据内部隐含关系的逻辑层次模型.深度学习相比于一般的浅层模 ...

  2. 理解NLP中的卷积神经网络(CNN)

    此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目.  ·  翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右 ...

  3. 深度学习与自然语言处理教程(8) - NLP中的卷积神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...

  4. 深度学习(四):卷积神经网络(CNN)模型结构,前向传播算法和反向传播算法介绍。

    在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一.CNN广泛的应用 ...

  5. 卷积神经网络 CNN 简述

    文章目录 所解决的问题 需要处理的数据量太大 很难保留图像特征 基本原理 卷积层 -- 提取图像特征 池化层 -- 数据降维(避免过拟合) 全连接层 -- 输出结果 实际应用 图像分类.检索 目标检测 ...

  6. 卷积神经网络(CNN)的参数优化方法

    积神经网络的参数优化方法--调整网络结构是关键!!!你只需不停增加层,直到测试误差不再减少. 著名: 本文是从 Michael Nielsen的电子书Neural Network and Deep L ...

  7. 斯坦福NLP名课带学详解 | CS224n 第11讲 - NLP中的卷积神经网络(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  8. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  9. 如何在NLP领域干成第一件事

    作者 | 周明(微软亚洲研究院首席研究员) 来源 | 微软研究院AI头条 自然语言处理(简称NLP),是研究计算机处理人类语言的一门技术,包括: 1.句法语义分析:对于给定的句子,进行分词.词性标记. ...

最新文章

  1. 结构体数组与指针习题
  2. 我的人工智能机器人的游戏
  3. 为什么叫python编程-python为什么叫爬虫
  4. centos7下安装gcc7
  5. 《Algorithm算法》笔记:元素排序(2)——希尔排序
  6. xpath如何得到【爬虫】
  7. 基于TCP的一对回射客户/服务器程序及其运行过程分析( 下 )
  8. 用PHP做负载均衡指南
  9. js 获取td高度_JS或jQuery获取宽高度
  10. Continuous Laplacian, Functional Map, Spectral CNN
  11. java浪漫代码_程序员表白教程,这些代码用过的都说浪漫
  12. php 月份英文缩写,php如何实现月份转换
  13. HTML+CSS 学习笔记
  14. 免费Web 托管公司遭黑客攻击 1350万用户数据泄露
  15. web前端 vue axios 网页设计
  16. OCOD,用于MAX7456和STM32接口电平转换
  17. USB通讯入门(二)CyUSB.inf文件修改后,设备管理器可以识别出USB设备,但Cypress USB Console没有任何显示
  18. Jmeter+Prometheus+Grafana性能监控平台:将JMeter压测数据输出到Prometheus
  19. HEVC中低复杂度量化技术
  20. 【财务架构day1】财务系统的领域建模——五视图法的分析

热门文章

  1. OpenResty+Keepalived组建高可用集群+双主模式
  2. java正则学习笔记三
  3. 智慧城市建设中的五个误区和四大难点
  4. php5.6.11编译安装报错configure: error: Don't know how to define struct flock on this system
  5. MongoDB:逐渐变得无关紧要
  6. [IIS]修改MaxFieldLength与MaxRequestBytes彻底解决Request Too Long的问题
  7. ThreadLocal究竟存不存在内存泄漏?
  8. 由于不知线程池的bug,某Java程序员叕被祭天
  9. 36 张图梳理 Intellij IDEA 常用设置
  10. 炸了!一口气问了我18个JVM问题!