Convolutional Neural Networks for Sentence Classification(卷积神经网络用于句子分类)

本篇博文仅仅用于自己学习的笔记,若有错误欢迎指正。

参考:

论文:Convolutional Neural Networks for Sentence Classification

代码:https://github.com/dennybritz/cnn-text-classification-tf

Model(模型):

模型结构图:

模型思路:

  • x i R k x_i∈R^k 表示一个句子的第i个词的词向量;句子长度用n表示,对于长度不是n的进行相应的填充与截断; x i : n = x 1 x 2 . x n x_{i:n}=x_1⊕x_2⊕….⊕x_n 表示一个句子⊕是串联操作, x i : i + j x_{i:i+j} 就是 x i , x i + 1 , , x i + j {x_i,x_{i+1},…,x_{i+j}} ;
  • 卷积操作的过滤器用 w R h k w∈R^{hk} ,它被应用到一个大小为h个词的窗口上产生一个特征 c i c_i ,例如: c i = f ( w x i : i + h 1 ) + b c_i=f(w*x_{i:i+h-1)+b} 其中f是是一个非线性函数,过滤器作用到每个可能的窗口上 ( x 1 : h , x 2 : h + 1 , , x n h + 1 : n ) (x_{1:h},x_{2:h+1},…,x_{n-h+1:n}) 产生特征序列 c = ( c 1 , c 2 , , c n h + 1 ) c=(c_1,c_2,…,c_{n-h+1}) 再应用最大池化成到这个序列上: c ^ = m a x ( c ) \hat{c} =max⁡(c) 它对应于每个特定过滤器,最大池化层也使得模型可以处理变长的句子。
  • 模型使用多个不同大小的过滤器来获取多个特征。这些特征组成了倒数第二层,并被传给了最后的全连接的softmax层。

模型的一个变种:

  • 模型的输入是静态不训练的二维句子向量([n,k])和可以被训练的二维句子向量([n,k])叠加形成的三维句子矩阵([n,k,2]).
  • 每个过滤器都作用到不可训练的[n,k]和可训练的[n,k]两个矩阵上, 再将他们加起来产生了 c i c_i 即:
    c i = f ( w x ( ) i : i + h 1 + b ) c_{i静}=f(w*x(静)_{i:i+h-1}+b) c i = f ( w x ( ) i : i + h 1 + b ) c_{i动}=f(w*x(动)_{i:i+h-1}+b) c i = c i + c i c_{i}=c_{i静}+c_{i动}

正则化:

  • 在倒数第二层应用dropout:

    • 我们从最后的全连接层的公式不再是: y = w z + b y=w*z+b ;而是 y = w ( z r ) + b y=w*(z◦r)+b 。其中 z = [ c 1 ^ , c 2 ^ , , c m ^ ] z=[\hat{c_1 } ,\hat{c_2 },…,\hat{c_m }] 是倒数第二层的输出即最大池化层的输出,卷积层有m个不同过滤器。 是逐点相乘运算,r是一个伯努利随机变量的masking向量并且p=1。在反向传播种梯度仅能通过没有被maked单元
    • 在测试时,我们将权重放缩p倍,即: w ^ = p w \hat{w}=p*w ,我们使用这个权重并且不进行dropout来对没有见过的句子进行分类。
  • 我们对权重向量进行L2正则

    • 我们为权重向量w添加一个约束 ( w ) 2 s |(|w|)|_2≤s ,在梯度下降步骤之后,每当 ( w ) 2 > s |(|w|)|_2>s ,重新调整w使其满足上面约束条件。

猜你喜欢

转载自blog.csdn.net/ACM_hades/article/details/87445095