论文笔记:Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks

532 阅读14分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

前言

本文为我之前在CSDN平台上的一篇博客记录。原链接为:blog.csdn.net/u011426236/…

导语

本文是2019年ICLR的最佳论文之一,文章提出了一种新的ON-LSTM用来编码自然语句中的层次结构信息。

摘要

自然语言是具有分层结构的:较小的单位(如短语)嵌套在较大的单位(如子句)中。当一个较大的成分结束时,嵌套在其中的所有较小的组成部分也必须结束。虽然标准的LSTM体系结构允许不同的神经元在不同的时间尺度上跟踪信息,但它对构建成分层次没有明显的偏向。本文提出通过对神经元进行排序来增加这种归纳偏差:使用一个master input gate和forget gate向量确保当一个给定的神经元被更新时,所有按照顺序跟随它的神经元也被更新。我们提出了一种新的循环结构,即有序神经元LSTM (on -LSTM),它在语言建模、无监督成分句法解析、有目标的句法评估和逻辑推理四种不同的任务中取得了良好的性能。

1 简介

自然语言在口头和书面形式上是明显的连续形式,但语言的底层结构并不是严格的连续的,而是树状的。这种树状结构可以很好的使用递归的思想,这也是一些语言学家所认为的人类的智慧之处(参考CS224n Lecture18,link)。将树结构集成到神经网络语言模型中有以下好处:

  1. 获得具有不断增加的抽象层次的层次表示,这是深度神经网络的一个关键特征;
  2. 为了模拟语言的构成效应和帮助解决长期依赖问题,为梯度反向传播提供快捷方式;
  3. 通过更好的归纳偏差来改进泛化,同时潜在地减少对大量训练数据的需求。

给定一个句子,预测相应的潜在句法树结构的一种简单方法是通过有监督语法解析器。但这些解析器有以下局限性:

  1. 很少有语言具有全面的注释数据用于监督解析器训练;
  2. 在某些领域,语法规则往往被打破(例如在tweet中);
  3. 语言会随着时间的使用而变化,因此语法规则可能会发生变化。

另一方面,语法归纳任务,即在没有专家标记数据的情况下,从原始语料库中学习语法结构,仍然是一个开放的问题。最近许多此类尝试都存在推导琐碎结构的问题(例如,左分支或右分支树),或者在使用强化学习(RL)学习分支策略时遇到训练困难。此外,有些方法的实现和训练相对复杂,如Shen et al.(2017)提出的PRPN模型(参考博客:论文笔记:Neural Language Modeling by Jointly Learning Syntax and Lexicon)。

递归神经网络(RNNs)已被证明在语言建模任务中非常有效。RNN明确地在数据上施加一个链式结构。这一假设似乎与语言的潜在非顺序结构不一致,可能会给深度学习方法处理自然语言数据带来一些困难。同时,有证据表明,具有足够容量的LSTM可以通过隐式编码树结构来实现语法处理机制。本文认为,仍然存在以下问题:对于这种潜在的树结构,引入人工的显式归纳偏差的架构是否能够获得更好的语言模型? 在这里插入图片描述

在本文中,我们引入了递归神经网络的一种新的归纳偏差——有序神经元(Ordered Neurons)。这种归纳偏差促进了存储在每个神经元内部的信息生命周期的分化:高阶神经元存储的是长期的信息,可以在经过大量时间步后仍被保存,而低阶神经元存储的是短期的信息,可以很快忘记。为了避免高阶神经元和低阶神经元之间的严格划分,文章提出了一个新的激活函数cumax(),来主动分配神经元存储长/短期信息。使用cumax()函数生成一个主输入和遗忘门的向量,以确保当一个给定的神经元被更新(删除)时,所有按照顺序跟随它的神经元也被更新(删除)。基于cumax()和LSTM架构,本文设计了一个新的模型ON-LSTM,它倾向于执行树状组合操作。所述模型在语言建模、无监督成分句法分析、有目标的语法评估和逻辑推理等四个任务中取得了良好的性能。在无监督成分句法分析的结果表明,所提出的归纳偏差与人类专家提出的语法原则的一致性优于先前提出的模型。实验还表明,在需要捕获长期依赖关系的任务中,ON-LSTM比标准LSTM模型表现得更好,并能更好地泛化较长的序列。

2 相关工作

在文献中已经有利用树结构来完成自然语言任务的工作。如在专家标记树库上使用监督学习来预测解析树、使用来自外部解析器的解析信息建立树结构、利用监督解析器的指导来训练堆栈增强神经网络。理论上,RNN和LSTM可以对上下文无关语法和上下文敏感语法生成的数据进行建模。最近的研究结果表明,在LSTM中引入结构信息是有益的。

从数据中学习基础语法的任务被称为语法归纳。早期的工作将句法结构纳入语言建模的语境。最近,有人尝试使用神经模型为下游任务整合一些结构。一般来说,这些工作增加了一个主要的循环模型与堆栈,并专注于解决算法任务。Shen等人(2017)引入了 (PRPN)模型,该模型试图通过解决一个语言建模任务来进行解析。该模型使用自我注意来组成之前的状态,其中注意的范围由所学的句法距离控制。作者指出,这个值对应于解析树的深度。然而,PRPN模型复杂性却很高。另一个可能的解决方案是开发具有不同时间尺度的递归模型,作为捕获层次结构的方法。这些方法通常对建模数据所涉及的层次结构的规律性做出强烈的假设。模型有一个预先确定的层次深度,这取决于层的数量。

3 有序神经元

在这里插入图片描述

给定一个token序列S=(x1,x2,,xT)S=(x_1,x_2,\cdots,x_T)和其对应的句法树(如上图2(a))。我们的目标是在处理观察序列的同时推断未观察到的树结构,即计算每个时间步tt的隐藏状态hth_t。在每个时间步骤中,hth_t将包含当前叶节点xtx_t和根节点S之间路径上的所有节点的信息。图2(c)中展示了hth_t如何包含包含当前token xtx_t的所有成分的信息,即使这些成分只被部分观察到。这种直觉表明,树中的每个节点都可以用一组处于隐藏状态的神经元来表示。然而,虽然隐藏状态的维数是预先确定的,但在不同的时间步长和句子中,叶子到树根的路径长度可能是不同的。因此,模型需要动态地将隐藏状态的维度重新分配给每个节点。

考虑到这些要求,我们引入了有序神经元,这是一种归纳偏差,迫使神经元在不同的时间尺度上表示信息。在我们的模型中,高阶神经元(例如图2c中的上层)包含从几个时间步骤到整个句子的任何地方的长期全局信息,代表树的根附近的节点。低阶神经元(图2c中的下层)编码短期或局部信息,只持续一个或几个时间步,代表较小的成分,如图2(b)所示。通过控制单个神经元的更新频率,高阶神经元和低阶神经元之间的区别完全以数据驱动的方式学习:要清除(或更新)高阶神经元,模型首先要清除(或更新)所有低阶神经元。换句话说,一些神经元总是比其他神经元更新得更频繁(或更少),而这种顺序是作为模型体系结构的一部分预先确定的。

4 ON-LSTM

在本节中,我们提出了一种新的RNN单元ON-LSTM (Ordered Neurons LSTM)。新模型使用类似于标准LSTM的体系结构。我们首先来回顾一下标准的LSTM模型的公式(不熟悉的可以参考NLP学习笔记(四):长短时记忆网络):

ft=σ(Wfxt+Ufht1+bf)it=σ(Wixt+Uiht1+bi)ot=σ(Woxt+Uoht1+bo)c^t=tanh(Wcxt+Ucht1+bc)ht=ottanh(ct)ct=ftct1+itc^t\begin{aligned} f_{t} &=\sigma\left(W_{f} x_{t}+U_{f} h_{t-1}+b_{f}\right) \\ i_{t} &=\sigma\left(W_{i} x_{t}+U_{i} h_{t-1}+b_{i}\right) \\ o_{t} &=\sigma\left(W_{o} x_{t}+U_{o} h_{t-1} \mid+b_{o}\right) \\ \hat{c}_{t} &=\tanh \left(W_{c} x_{t}+U_{c} h_{t-1}+b_{c}\right) \\ h_{t} &=o_{t} \circ \tanh \left(c_{t}\right)\\ c_{t} &=f_{t} \circ c_{t-1} + i_{t} \circ \hat{c}_t \end{aligned}

其中ft,it,otf_t,i_t,o_t的计算都可以看做是一个激活函数为sigmoid函数的前馈网络,c^t\hat{c}_t也是一个前馈网络只是激活函数为tanh。可以将c^t\hat{c}_t视作为更新的值,ct1c_{t-1}则是旧的cell state,遗忘门ftf_t决定是否要忘记之前的值,输入门iti_t则决定是否更新最新值。

而ON-LSTM的计算公式与标准LSTM相比,前五个公式全部相同: 在这里插入图片描述 与LSTM的不同之处在于,ON-LSTM将cell statect ctc_t的更新函数替换为一个新函数,下面将对此进行解释。遗忘门ftf_t和输入门iti_t它被用来控制ctc_t的擦除和写入操作,就像以前一样。由于LSTM中的门在每个神经元上独立作用,通常很难分辨神经元之间的信息层次。为此,文章通过强化神经元更新的顺序,使每个神经元的门依赖于其他神经元。

4.1 激活函数: cumax()

为了执行更新频率的顺序,我们引入了一个新的激活函数: 在这里插入图片描述 其中cumsum表示累加求和。这个函数的作用实际上就是为了更好的划分高阶和低阶神经元的边界。下面简要介绍它的作用。

我们希望生成一个n-hot向量g=(0,0,,0,1,1,,1)g=(0,0,\cdots,0,1,1,\cdots,1),向量前半部分全部是0(代表低阶神经元),后半部分全部是1(代表高阶神经元)。这样模型就可以在两段上实行各自的更新准则。而cumsum函数的作用就是将一个One-hot向量唯一的映射成为一个n-hot向量,例如: cumsum((0,0,1,0,0))=(0,0,1,1,1)cumsum((0,0,1,0,0))=(0,0,1,1,1)

因此以上要求n-hot向量就转换成了求one-hot向量,即找到一个整数分割点(第一个1的位置)。假设dd是分割点的下标,也就是g中第一个1的下标,它可以这样求得: 在这里插入图片描述 因为g是由cumsum函数求得的,故g的第k个位置为1的概率为前k个位置概率的累加和,即 在这里插入图片描述

理想情况下,gg应该就是一系列确定的离散二进制数值,但是由于离散值无法计算梯度,实际应用时,我们使用它的期望,也就是softmax后的的累加和。由于gkg_k是二进制的,那么累加softmax的前kk项的结果即E[gk]\Bbb{E}[g_k],因此就有g^=E[g]\hat{g}=\Bbb{E}[g]

4.2 结构化门机制

基于以上介绍的cumax函数,论文引入了一个master forget gate f~t\tilde{f}_t和master input gate i~t\tilde{i}_t用来控制那些部分是高阶/低阶神经元。 在这里插入图片描述 f~t\tilde{f}_t是一个从0到1的单调递增序列,而i~t\tilde{i}_t是一个从1到0的单调递减序列。f~t\tilde{f}_t控制那些部分被遗忘,i~t\tilde{i}_t则控制那些部分被保留。并将更新公式改写为:

在这里插入图片描述 其形象化解释如下:

在第t个时间步,模型预测两个数值dtfd_t^fdtid_t^i用来控制哪些部分被更新/保留。如下图所示,在一个神经元内部,从d0d_0dtfd_t^f部分的信息将被更新,而从dtid_t^idmaxd_{max}的信息将被保留。

dtf>dtid_t^f > d_t^i时,二者有重叠区域。即下图中的绿色部分。对于这部分信息,模型既“更新”,又“保留”。可以证明,这部分信息的更新与标准LSTM更新准则一致。对于橙色部分,这部分信息(即高阶的长期信息)将被保留。对于浅蓝色部分(即低阶的局部信息),该部分信息将被更新。

在这里插入图片描述dtf>dtid_t^f > d_t^i时,二者没有重叠区域。对于橙色部分,这部分信息(即高阶的长期信息)将被保留。对于浅蓝色部分(即低阶的局部信息),该部分信息将被更新。但二者空出的部分即白色部分(一般就还是初始值,可能是随机值),模型将不做任何改变。

在这里插入图片描述

最后,还有一个值得注意的地方在于以上的高阶/低阶划分是一个很粗粒度的划分(可能一个句子中的层级就最多十几级),但LSTM的神经元维数dmaxd_max可能是个很大的数值(比如dmax=1000d_max=1000),所以可能会造成大量的存储浪费。作者提出,可以只用一个小的维度来储存层级信息,等更新时将这个小的维度进行简单的重复扩张为原来的维度即可。即设ft~\tilde{f_t}it~\tilde{i_t}的参数采用的目标维度为Dm=DCD_m=\frac{D}{C},其中DD是LSTM的隐层状态维度,CC是一个超参数。那维度DD的神经元会被分成DC\frac{D}{C}组,每组长度为CC。在运算之前,会通过将ft~\tilde{f_t}it~\tilde{i_t}的每一个元素重复CC次来获得一个DD维的向量。

举个例子,假设LSTM维度为16,我们取C=4,那么层级信息向量ft~\tilde{f_t}长度为16/4=4,例如ft~=(0.1,0.2,0.8,0.9)\tilde{f_t}=(0.1,0.2,0.8,0.9),然后使用时,我们会将其每个元素都重复C次来获得与LSTM一样的维度,即将其扩展为: ft~=(0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.2,,0.9,0.9,0.9,0.9)\tilde{f_t^{\prime}}=(0.1,0.1,0.1,0.1,0.2,0.2,0.2,0.2,\cdots,0.9,0.9,0.9,0.9)

5 实验

文章共在四个任务上进行了评估:

5.1 语言模型

在PTB数据集上结果如下: 在这里插入图片描述

5.2 无监督成分句法分析

无监督成分句法分析主要比较模型在语言模型任务中生成的“潜在”句法树和专家标注的句法树进行对比。在完成语言模型建模后,我们喂给模型一个句子,模型在每个时间步都会预测一个分割点dtfd_t^f在这里插入图片描述

获得所有的分割点后我们对这些dfd^f进行降序排列,然后采用论文笔记:Neural Language Modeling by Jointly Learning Syntax and Lexicon里相同的解码方法就可以获得解析结果。

其实验结果如下: 在这里插入图片描述

5.3 Targeted syntactic evaluation

这个任务来自于Targeted Syntactic Evaluation of Language Models,主要包括SUBJECT-VERB AGREEMENT(主谓一致)、REFLEXIVE ANAPHORA(反身代指)和NEGATIVE POLARITY ITEMS(负极性词)等三个子任务,这些任务主要是为了克服只用PPL而无法评估模型对语法句法的学习程度。

实验结果如下: 在这里插入图片描述

5.4 逻辑推理

实验设置来源于Tree-structured composition in neural networks without tree-structured architectures。结果如下: 在这里插入图片描述

6 总结

在本文中,我们提出了一种新的递归神经网络的归纳偏差——有序神经元。基于这一思想,我们提出了一种新的循环单元——ON-LSTM,它包括一个新的门控机制和一个新的激活函数cumax()。通过分别分配带有长期和短期信息的隐藏状态神经元,这使得递归神经网络更接近于执行树状合成操作。该模型在无监督的成分句法分析上的性能表明,ON-LSTM以一种与人类专家标注一致的方式归纳自然语言的潜在结构。归纳偏差还使ON-LSTM在语言建模、长期依赖和逻辑推理任务上获得良好的性能。

附录

一些ON-LSTM的推断结果: 在这里插入图片描述