A Convolutional Neural Network for Modelling Sentences (DCNN) 阅读笔记

论文原文A Convolutional Neural Network for Modelling Sentences
论文信息ACL2014
论文解读Hytn Chen
更新时间2020-02-20

句子建模发展简介

句子分布式表示:将一句话用固定长度的向量进行表示,向量往往高维,因此也可看作将一句话嵌入进高维空间中去,也叫做句嵌入。而词嵌入的思路也一致,也是要把词用固定长度的向量表示。

由此就有了分布式语义的想法,中心思想是一个词的语义通常是由经常出现在其周边的词提供的,那么如何用相邻单词表征当前单词?共现矩阵的思路就被提出了,遍历当前词的上下文,上下文的窗口通常是5-10,一般是左右对称的,因为需要公平对待左右文本(上文下文)的信息。

有关共现矩阵的概念,可参考之前的阅读笔记

那如果直接把共现矩阵拿来当成向量使用会产生一些问题,例如

  • 共现矩阵的大小随着词汇表的大小增长迅速;

  • 维度太高需要大量存储;

  • 矩阵太过稀疏(解决方法:奇异值分解,提取有用的部分实现降维);

  • 模型鲁棒性弱,也不能考虑到有的词就恰好没有出现在相关词上下文时候的情况。

虽然对于上面的缺点有解决方法奇异值分解,但是对于太大的矩阵,奇异值正交分解就无法计算了,同时对于新的词不鲁棒。

由此共现矩阵的想法就不能作为主要解决方案了,此时word2vec的基于神经网络的解决方法就产生了,word2vec概念就不再详述了。

那如何将词向量变为句向量呢?

由此便诞生了卷积神经网络用于句建模中最有影响力的工作,也就是该篇论文。

基于神经网络的经典句子模型

例如词袋模型,时间延迟网络,循环神经网络,以及递归神经网络

词袋模型的训练只能体现特定单词的影响,不能体现词与词之间的联系,因为词与词的表征之间两两正交,是one-hot表示;

那又有学者提出了深度词袋模型,这样的模型不同于词袋模型的是,它训练得好是可以识别到not hate这个词组了,因为深度的加深给模型带来最关键的改变就是特征组合,组合过后的新特征再分类结果就会好一些,但是如果捕捉错误,将不属于描述hate的not组合成了not hate,这就出错了。

想要捕捉这样的组合效果还提出了n-gram模型,词的窗口为n,一步步滑动,得到多个这样的n连续词的组合,将这个当作特征。这样是有优点,可以捕捉到连续信息,但是参数太庞大了,并且这些窗口之间并没有联系。

时间延迟神经网络就相当于一维卷积的神经网络,窗口为2的卷积核,卷积后激活,然后对所有卷积的结果相加得到句表征进行分类。

循环神经网络的相关概念,可以参考之前文章的模型简介部分,其中有GRU以及LSTM的详解内容及链接。

递归神经网络主要就用于解析树上,也就是句法树,首先通过NLP工具将每一句话的句法树构建出来,通过递归神经网络一步步抽取信息,再把最终的信息投射到向量空间中,其效果最好的一篇工作中有示例简图如下

在这里插入图片描述

论文的名称是Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank EMNLP2013,缺点就是对于不那么书面的语言,这样的规范结构就很难提取了。

论文提出模型

模型的简图如下

在这里插入图片描述

最低层的网格列代表单词个数,行代表词向量维度,现在对于该模型的各个部分进行详解。

宽卷积后接k-maxpooling

首先明确基本概念,文章的2.2节提到了有关卷积的一些概念,其中一维卷积的公式如下
c j = m ⊤ s j − m + 1 : j \mathbf{c}_{j}=\mathbf{m}^{\top} \mathbf{s}_{j-m+1: j} cj=msjm+1:j
其中,m是m维的卷积核,s是有s个词的句子,一维的卷积有两种,一种是宽卷积(增强边缘部分的信息,会进行padding,在两边都padding4个位,图中看不见),一种是窄卷积(对边缘部分削弱),图示结构如下

在这里插入图片描述

宽卷积的优势就是能整合整个句子的信息,不会削弱边缘的信息,卷积核大也不会出现问题,卷积核大那一次考虑的词就会多。

本文的模型其实就是基于文章2.3节所提到的最大延迟网络进行改进的,TDNN网络通过一系列的权重m来卷积输入序列s,在1990年的语音识别任务中,序列s就在时间维度上进行卷积。每个 s j s_j sj都不是单变量,而是一个d维的向量,所以 s ∈ R d × s \mathbf{s} \in \mathbb{R}^{d \times s} sRd×s。同样的,m卷积核也是 d × m d \times m d×m的。m的每一行都会和s的每一行进行窄卷积,最后可能走多个卷积层之后再进入下一层。

而Max-TDNN句模型就是基于2008年的TDNN结构,在这个模型中,s的表达式如下所示
s = [ ∣ ∣ ∣ w 1 ⋯ w s ∣ ∣ ∣ ] s=\left[\begin{array}{ccc} {|} & {|} & {|} \\ {w_{1}} & {\cdots} & {w_{s}} \\ {|} & {|} & {|} \end{array}\right] s=w1ws
走一个大小为m的窄卷积核,得到c矩阵的size就是 d × s − m + 1 d \times s-m+1 d×sm+1为解决句子长度不一样的问题,Max-TDNN取了最后结果矩阵c中每一行的最大值,因此c矩阵表达式如下
c max ⁡ = [ max ⁡ ( c 1 , : ) ⋮ max ⁡ ( c d , : ) ] \mathbf{c}_{\max }=\left[\begin{array}{c} {\max \left(\mathbf{c}_{1,:}\right)} \\ {\vdots} \\ {\max \left(\mathbf{c}_{d,:}\right)} \end{array}\right] cmax=max(c1,:)max(cd,:)
这样做的目的是抓取最相关的特征,那么大小固定的矩阵 c m a x c_{max} cmax就可以走全连接层来进行分类了。

总结一下时间延迟网络的优缺点,优点就是对于单词的顺序是敏感的,并且不需要解析树,同时对于每个词都是公平考虑的,不像递归神经网络的最顶层的词,其对最终结果影响就会比别的词大;缺点就是只选择里面最大值的方法有待考量,同时边缘信息的考虑弱化了、窄卷积的缺点该方法都有,而且maxpooling把原本已经有的词序又舍弃了。

对此,本文做出的改进就是舍弃窄卷积采用宽卷积,优化maxpooling改为k-maxpooling,选择k个最大的信息并且保持相对的顺序。中间层的k值还可以动态调整,其公式如下
k l = max ⁡ ( k t o p , ⌈ L − l L s ⌉ ) k_{l}=\max \left(k_{t o p},\left\lceil\frac{L-l}{L} s\right\rceil\right) kl=max(ktop,LLls)
方括号代表向上取整,L代表网络中所有卷积层的层数,l代表当前层的层数。感性理解下来,就是例如一共有3层卷积层, k t o p = 3 k_{top}=3 ktop=3,句子长度是18,第一层卷积层的maxpooling应该取前 k 1 = 12 k_1=12 k1=12个最大值,第二层卷积层的maxpooling应该取前 k 2 = 6 k_2=6 k2=6个最大值,第三层就取前 k t o p = 3 k_{top}=3 ktop=3个最大值。

以上是关于为什么采用宽卷积和k-maxpooling的原因以及两种方法的解析,此外,作者还进行了其他改进。

K-maxpooling后接非线性特征函数

首先前面的宽卷积一共使用了d个filters,用M给m个词分别进行了加权操作,使得最终得出的a的d维词向量中,每一维都是由m个词向量w的对应的维度加权而成。这里笔者最初没有理解,看见这篇阅读笔记之后才理解公式的含义,将其中的附图摘录下来以备之后查看。

在这里插入图片描述

非线性特征函数后接多个特征图表示

较易理解CNN是有多个通道的,也就是存在多个特征图的,每个通道都有自己不同的信息,需要注意的是在本文的如下层

在这里插入图片描述

两个特征图的信息是进行了叠加的,关于多特征图这部分有公式如下
F j i + 1 = ∑ k = 1 n m j , k i + 1 ∗ F k i F_{j}^{i+1}=\sum_{k=1}^{n} m_{j, k}^{i+1} * F_{k}^{i} Fji+1=k=1nmj,ki+1Fki
公式中n的意思就是一共有多少列,i的意思是当前层是第i层,F就代表特征图,k就代表有k个特征图可能在同一层并行计算,而每一个特征图都会有一组卷积核m来计算,这里m是一个order-4的tensor,*代表卷积符号,4阶的m卷积F其实就相当于一维卷积的并行运算了,并行4个一维卷积为一次卷积,也可以理解为用大小为dxm的卷积核对特征图进行卷积。

对融合后的特征图进行折叠

作者认为不同维度之间的信息没有交互,因此想要信息进行交互,但是也无需使用卷积神经网络进行这样的信息交互操作,因此就像模型结构图中黄色线所画的部分那样进行了折叠。

实验部分文章中有具体图表进行说明,本博客中则不再赘述。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值