转自:卞书青
前言:卷积神经网络(Convolutional Neural Network)最早是应用在计算机视觉当中,而如今CNN也早已应用于自然语言处理(Natural Language Processing)的各种任务。本文主要以CMU CS 11-747(Neural Networks for NLP)课程中Convolutional Networks for Text这一章节的内容作为主线进行讲解。本文主要包括了对如下几块内容的讲解,第一部分是对于常见的语言模型在进行文本表示时遇到的问题以及引入卷积神经网络的意义,第二部分是对于卷积神经网络模块的介绍,第三部分主要是介绍一些卷积神经网络应用于自然语言处理中的论文,第四部分主要是对这一篇综述进行总结。
本文作者:卞书青,2017级研究生,目前研究方向为信息抽取、深度学习,来自中国人民大学大数据管理与分析方法研究北京市重点实验室。
一、引例
我们首先来看这么一个问题,假设我们需要对句子做情感上的分类。
传统的词袋模型或者连续词袋模型都可以通过构建一个全连接的神经网络对句子进行情感标签的分类,但是这样存在一个问题,我们通过激活函数可以让某些结点激活(例如一个句子里”not”,”hate”这样的较强的特征词),但是由于在这样网络构建里,句子中词语的顺序被忽略,也许同样两个句子都出现了not和hate但是一个句子(I do not hate this movie)表示的是good的情感,另一个句子(I hate this movie and will not choose it)表示的是bad的情感。其实很重要的一点是在刚才上述模型中我们无法捕获像not hate这样由连续两个词所构成的关键特征的词的含义。
在语言模型里n-gram模型是可以用来解决,想法其实就是将连续的两个词作为一个整体纳入到模型中,这样确实能够解决我们刚才提出的问题,加入bi-gram,tri-gram可以让我们捕捉到例如“don’t love”,“not the best”。但是问题又来了,如果我们使用多元模型,实际训练时的参数是一个非常大的问题,因为假设你有20000个词,加入bi-gram实际上你就要有400000000个词,这样参数训练显然是爆炸的。另外一点,相似的词语在这样的模型中不能共享例如参数权重等,这样就会导致相似词无法获得交互信息。
二、卷积神经网络结构的认识
利用卷积神经网络实际上是可以解决上述的两个问题。在讲卷积神经网络前,我们先来看两个简单的例子。
假设我去识别出左边这个方框里的猫,实际上在一张图片中猫所处的位置并不重要,它在左边,在右边,还是在底部,其实对于猫来说,它的特征是不变的,我需要在这一部分位置学习的特征也能用在另一部分位置上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。而在右边的例子中,假设一句话中是谈论猫咪的,猫咪这个词的意义是否会随它在第一句话还是第二句话而发生改变呢,大部分情况是不变的,所以我们当我们使用一个文本网络时,网络能够学习到什么是猫咪并且可以重复使用,而不是每一次见到它就要重新学习。
接下来我们先来介绍卷积神经网络中各个重要的环节。
2.1 卷积
所以这里我们首先去理解卷积神经网络中卷积的运算。这里我们以图像作为输入。比较容易理解卷积的方法是把卷积想象成作用于矩阵的一个滑动窗口函数。如下面这张图的表示。
滑动窗口又称作卷积核、滤波器或是特征检测器。图中使用3x3的卷积核,将卷积核与矩阵对应的部分逐元素相乘,然后求和。对于卷积的运算可以看下面这幅图的解释。
在不改变卷积核权重的情况下,就像拿着一只刷子一样对整个图水平垂直滑动进行卷积运算,这样输出就是经过卷积运算后的输出层。这里有一个对卷积操作的动画演示,可以加深对其的理解(CS231n Convolutional Neural Networks for Visual Recognition)
2.2 什么是卷积神经网络
卷积神经网络其实就是多层卷积运算,然后对每层的卷积输出用非线性激活函数做转换(后面会讲到)。卷积过程中每块局部的输入区域与输出的一个神经元相连接。对每一层应用不同的卷积核,每一种卷积核其实可以理解为对图片的一种特征进行提取,然后将多种特征进行汇总,以下面这幅图为例,原始的input为一幅图片,第一层卷积过后输出层变为6@28*28,所以这里的卷积核实际上用了6个,6个卷积核代表了对这一张原始图片的六种不同角度的特征提取(例如提取图片左上方的边缘线条,右下方的边缘线条等等)。feature map实际上的含义就是特征通道(或者理解为一个图片的不同特征),也可以说就是输出层的深度,这里就是6,然后后面每一次做卷积操作是都是要对所有的特征通道进行卷积操作以便提取出更高级的特征。这里也涉及到池化层,在下一小节进行讲解。在训练阶段,卷积神经网络会基于你想完成的任务自动学习卷积核的权重值。
例如,在上面这幅图中,第一层CNN模型也许学会从原始像素点中检测到一些边缘线条,然后根据边缘线条在第二层检测出一些简单的形状(例如横线条,左弯曲线条,竖线条等),然后基于这些形状检测出更高级的特征,比如一个A字母的上半部分等。最后一层则是利用这些组合的高级特征进行分类。
卷积神经网络中的卷积计算实际上体现了:位置不变性和组合性。位置不变性是因为卷积核是在全图范围内平移,所以并不用关心猫究竟在图片的什么位置。组合性是指每个卷积核对一小块局部区域的低级特征组合形成更高级的特征表示。当然这两点对于句子的建模也是很多的帮助,我们会在后面的例子中提到。
2.3 卷积是如何应用到自然语言处理中
在图像中卷积核通常是对图像的一小块区域进行计算,而在文本中,一句话所构成的词向量作为输入。每一行代表一个词的词向量,所以在处理文本时,卷积核通常覆盖上下几行的词,所以此时卷积核的宽度与输入的宽度相同,通过这样的方式,我们就能够捕捉到多个连续词之间的特征,并且能够在同一类特征计算时中共享权重。下面这张图很好地诠释了刚才的讲解。
原文链接:
https://zhuanlan.zhihu.com/p/30268946?group_id=905604805499453440