董华磊 利用卷积神经网络对句子分类
新闻来源:IR实验室       发布时间:2015/12/8 15:26:35

    卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。20世纪60年代,HubelWiesel在研究猫脑皮层中用于局部敏感和方向选择的 神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域。

    在了解利用卷积神经网络对句子进行分类之前提前了解一些预备知识:

    1)、局部感知

    卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为 紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到 了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺 激)。如下图所示:左图为全连接,右图为局部连接。

说明: 卷积神经网络

    在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

 

    2)参数共享

    但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。 

    怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统 计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

    更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

    如下图所示,展示了一个33的卷积核在55的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来

说明: 卷积神经网络

3)多卷积核

    上面所述只有100个参数时,表明只有1100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:

说明: 卷积神经网络

    上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。

    了解完以上预备知识后,来看一下论文《Convolutional Neural Networks for sentence classification》中是如何利用卷积神经网络对句子进行分类的,该模型是利用的词向量,因此可以使用谷歌提前训练好的词向量来做句子分类。

    该论文中提到了三种模型:

    CNN-rand:句子中的每个词词向量是随机初始化,并在卷积神经网络模型训练的过程中对词向量进行微调;

    CNN-static:句子中的每个词向量均为用word2vec进行训练过的,但是在模型训练的过程中不对词向量进行微调;

    CNN-non-static:句子中的每个词向量均为用Word2vec进行训练,并在模型训练的过程中对词向量进行微调。

    如下图所示:

    输入的为一个句子,句子中每个词的词向量已经训练完,词向量再通过100个卷积核提取100个特征,之后max-pooling,抽取每个特征图中的最大值,最后再连接一个soft-max层,可以处理多分类任务。

 

参考论文:Convolutional Neural Networks for sentence classification. Yoon Kim, Eprint Arxiv, 2014

论文代码:https://github.com/yoonkim/CNN_sentence