论文笔记:Neural Language Modeling by Jointly Learning Syntax and Lexicon
目录
导语
- 论文地址:https://arxiv.org/abs/1711.02013
- 会议:ICLR 2018
摘要
本文提出了一种具有无监督句法结构归纳能力的神经语言模型。该模型利用结构信息来形成更好的语义表示和更好的语言建模。标准的递归神经网络受其结构的限制,不能有效地利用句法信息。另一方面,树结构的递归网络通常需要额外的结构监督和人工专家注释。在本文中,我们提出了一种新的神经语言模型,称为Parsing-Reading-Predict Networks(PRPN),它可以同时从无标注的句子中归纳出句法结构,并利用这些推断的句法结构来更好的学习语言模型。在我们的模型中,梯度可以直接从语言模型损失反向传播到神经解析网络中。实验表明,该模型能够发现底层的句法结构,并在word/character level的语言模型任务中达到了最先进的性能。
1 简介
语言学理论通常将自然语言视为两部分:词法(lexicon)和句法(syntax)。前者定义给出了语言所用到的所有word,后者则包含了一些列构成句子(sentence)结构的规则。通过将各种token利用句法规则组合在一起就生成了句子。虽然现在的语言模型已经能够很好的提供有意义的word词向量表示,但是标准的RNN网络只能隐式的编码句法信息。为此,开发一种能够利用句法知识形成更好的语义表示的深度神经网络受到了广泛关注。 将句法结构集成到语言模型中有不同的重要原因:
- 随着抽象程度的增加,获得层次概括表示,这是深度神经网络和人类大脑的一个关键特征
- 捕捉复杂的语言现象,如长期依赖问题和构成效应;
- 为梯度反向传播提供捷径。
为了更好的解析句法结构,人们开发了各种语法解析器。但这些句法解析器大多是监督模型,需要大量的人工专家标注。同时,人工标注的模型也只能适应于与被标注数据类似的文本,但在许多情况下,人们的表达不那么规范,比如写的推特文本。这些缺陷限制了监督解析器的泛化能力。如何无监督的进行句法结构归纳一直是自然语言处理领域面临的长期挑战之一。本文提出了一种新的神经语言模型:PRPN (Parsing-Reading-Predict Networks),它可以同时从无注释的句子中归纳出句法结构,并利用推断结构形成更好的语言模型。在我们的模型中,我们假设语言可以自然地表示为树形结构图。模型由三部分组成:
- 可微神经解析网络(A differentiable neural Parsing Network)利用卷积神经网络计算句法距离(Syntactic distance),该距离表示句子中所有连续词对之间的句法关系,然后根据句法距离做出软成分判定。
- 一个阅读网络(A Reading Network),它基于在句法上直接与当前标记相关的所有先前记忆,周期性地计算自适应记忆表示来总结与当前时间步长的相关信息。
- 一个预测网络(A Predict Network),它基于与下一个token在语法上直接相关的所有规则来预测下一个token。
文章在三个任务上评估了模型:单词级语言建模(word-level language modeling)、字符级语言建模(character-level language modeling)和无监督的成分句法分析(unsupervised constituency parsing)。都取得了最好或接近最好的结果。
2 相关工作
在语言理解中引入一些结构,特别是树结构,以帮助下游任务的想法已经有很多工作进行了探索。很多方法借助递归神经网络(Recursive networks不是我们通常说的Recurrent neural network,关于递归神经网络可以参考CS224n的第18节,link)或者在多个尺度上学习递归特征(具体我也不太清楚)。而在语言建模方面,句法语言建模也是历史悠久(详见原论文)。
3 研究动机
如图所示,假设有一个token序列是这样的句法树结构。叶子节点
x
i
x_i
xi即每个具体的token。
y
i
y_i
yi代表了一些由连续token序列组成的有意义的成分。根节点r代表了整个句子的意思。箭头表示节点之间的依赖关系。一个假设是每个节点只依赖于它的父节点和它的左兄弟节点。
直接建模树结构是一项具有挑战性的任务,通常需要监督学习。此外,依赖树结构可能导致模型不够健壮,无法面对不符合语法的句子。相反,循环模型提供了一种方便的方法来建模顺序数据,当前隐藏状态只依赖于最后一个隐藏状态。这使得模型在面对不一致的序列数据时更加健壮,但却忽略了自然语言句子结构中的真实依赖关系。
本文利用skip connection将结构化依赖关系与递归神经网络结合起来。换句话说,当前隐藏状态不仅依赖于最后一个隐藏状态,还依赖于与当前状态有直接语法关系的前一个隐藏状态。上图(注:图中右上角公式有错误,应该是
f
(
m
2
,
m
3
,
⋯
,
m
5
)
f(m_2,m_3,\cdots,m_5)
f(m2,m3,⋯,m5))展示了模型结构,非叶子节点
y
j
y_j
yj通过一系列隐状态来表示
y
j
=
{
m
i
}
l
(
y
j
)
≤
i
≤
r
(
y
j
)
y_j=\{m_i\}_{l(y_j) \le i \le r(y_j)}
yj={mi}l(yj)≤i≤r(yj),其中
l
(
y
j
)
l(y_j)
l(yj)代表最左子节点,
r
(
y
j
)
r(y_j)
r(yj)代表最右子节点。
图中的箭头代表了模型根据潜在的句法结构建立的skip connection。我们用一个变量 g i t g_i^t git来表示。为了定义 g i t g_i^t git,我们首先定义一个潜在变量 l t l_t lt来表示 x t x_t xt的上下文中的局部结构信息。其具体定义如下:
- 如果 x t x_t xt不是某个子树的最左侧子节点,那么定义 l t l_t lt是 x t x_t xt的最左侧兄弟节点;(例如图1中 l 4 l_4 l4=3, l 5 = 3 l_5=3 l5=3)
- 如果 x t x_t xt是某个子树 y i y_i yi的最左侧子节点,那么定义 l t l_t lt是 y i y_i yi的最左侧兄弟节点的最左侧子节点。(例如图1中 l 3 = 2 l_3=2 l3=2, l 6 = 2 l_6=2 l6=2)(注: l 2 = 0 l_2=0 l2=0这是因为 y 2 y_2 y2没有最左侧子节点,要再往上寻一级。)
然后就可以定义 g i t g_i^t git如下:
在这种体系结构下,兄弟依赖关系至少通过一个skip connection(
g
i
t
=
1
g_i^t=1
git=1即表示节点i和节点t有skip connection)来建模。skip connection将直接向前传递信息,并向后传递梯度。节点之间的父子关系也将通过skip connection来隐式地建模。
模型根据以下公式循环性地更新隐藏状态:
这里
m
t
m_t
mt是t时刻的隐藏状态。那么下一个token的概率分布近似为
4 句法结构建模
本部分主要介绍Parsing Network的建模。Parsing Network的主要目的是估计出神经网络中所有的skip connection(如图2中的所有非相邻的实线箭头)。为此,作者介绍了一个新的概念:句法距离(Syntactic distance)。
4.1 句法距离
句法距离用于衡量相邻两个词之间的语义相关性,其值越小则表明该相邻两词越可能位于同一个句法成分中。如下图所示,一共有7个token(
x
0
,
⋯
,
x
6
x_0,\cdots,x_6
x0,⋯,x6)他们相邻之间有6个句法距离(
d
1
,
⋯
,
d
6
d_1,\cdots,d_6
d1,⋯,d6,首尾的两个d是人为添加的。)同一个句法成分中的d很小,如
d
4
=
0
,
d
5
=
0
d_4=0,d_5=0
d4=0,d5=0,而不同句法成分之间的d很大,如
d
2
,
d
3
d_2,d_3
d2,d3等。
那么该如何计算相邻两个token之间的句法距离呢?文中使用两层一维卷积网络来对连续的token进行卷积。设token
x
i
x_i
xi的embedding表示为
e
i
e_i
ei,那么
x
i
−
1
x_{i-1}
xi−1和
x
i
x_i
xi的句法距离
d
i
d_i
di计算公式如下:
其中第一层即一个卷积窗口为
L
+
1
L+1
L+1的一维卷积网络(例如图3中,L=2),第二层为卷积窗口为1的一维卷积网络组成(由于窗口长度固定,其实就是两个前馈神经网络)。
在得到句法距离后,还需要引入一系列运算将其转换为对 g i t g_i^t git的估计。
4.2 利用句法距离估计 g i t g_i^t git
句法距离是每两个相邻token之间语义相似度的度量,是一个实数值。因此,对于一个长度为K的句子(最前面需要补上一个Padding token,因此论文里讲的实际是K+1长的句子),我们将得到K个句法距离数值。
对于第t个时间步,我们想要找到比句法距离 d t d_t dt大的最近的一个token x j x_j xj(至于为什么,这里先不讲,后面再展开解释)。所以,我们定义一个新的变量 α j t \alpha_j^t αjt来衡量 x t x_t xt与 x j x_j xj分别与其前一个单词的句法距离差异。
其中
τ
\tau
τ是一个超参数用于控制模型的敏感度。Hardtanh表达式如下:
接下来我们举例分析这个变量的作用。
假如 d t < d j d_t<d_j dt<dj,那么 α j t \alpha_j^t αjt将很小(接近0),如图3中 d 5 < d 3 d_5<d_3 d5<d3,这表明 x j x_j xj是当前子树中的最左边子节点(因为只有最左边子节点才可能与它上一个token有着比较大的句法距离)。所以,模型只要从当前时间步t出发,逐个向前寻找第一个接近于0的 α j t \alpha_j^t αjt,即可以找到当前子树中的最左边子节点,也即我们在3中定义的 l t l_t lt。
定义
l
t
=
i
l_t=i
lt=i的概率如下:
然后,可以定义
g
i
t
g_i^t
git如下:
这个式子的定义确保了当
i
≥
l
t
i\ge l_t
i≥lt时,
g
i
t
g_i^t
git接近于1;当
i
<
l
t
i<l_t
i<lt时,
g
i
t
g_i^t
git接近于0。即完成了一个离散化序列
(
0
,
⋯
,
0
,
1
,
1
,
⋯
,
1
)
(0, \cdots, 0, 1, 1, \cdots, 1)
(0,⋯,0,1,1,⋯,1)的连续化近似(因为离散值无法求梯度)。
举个例子,如图1所示,模型应当给每个大的短语成分赋一个大的值给 1 − α j t 1-\alpha_j^t 1−αjt。换句话说,模型对于这些短语成分的首个单词应该考虑更长期的依赖关系。比如在时间步 t = 6 t=6 t=6, 1 − α 2 6 1-\alpha_2^6 1−α26和 1 − α 0 6 1-\alpha_0^6 1−α06应当接近于1,其他的 1 − α i 6 1-\alpha_i^6 1−αi6应当接近于0。
综上,我们就完成了Parsing Network的构建,它的输入是各个单词的embedding向量 e 0 , e 1 , ⋯ , e K e_0, e_1, \cdots, e_K e0,e1,⋯,eK,第t个时间步输出是一系列 g i t g_i^t git值( i ≤ t i\le t i≤t)。
5 语言模型
语言模型部分主要包括一个Reading Network和一个Predict Network。这里是通过自回归的方式进行语言模型建模的(即知道前面的单词,预测下一个单词是哪一个的概率),而非BERT那种自编码模型。
5.1 Reading Network
Reading Network的主要作用是将当前时间步t输入的token x t x_t xt,历史状态向量 m 0 , ⋯ , m t − 1 m_0,\cdots,m_{t-1} m0,⋯,mt−1和计算得到的gate值 g 0 t , ⋯ , g t − 1 t g_0^t,\cdots,g_{t-1}^t g0t,⋯,gt−1t根据公式(2)生成当前时刻的隐状态 m t m_t mt。
Reading Network的基础架构是LSTMN,这是一种类似于LSTM的网络结构,传统的LSTM在每个时间步都只是传递两个值,一个是memory cell,另一个是hidden state。在时刻t,这两个输出分别代表t时刻前的所有memory和hidden state的汇总。而LSTMN则引入了两个新的机制:Memory/Hidden tape 和 Intra-attention。
所谓的Memory/Hidden tape即保存之前时刻的一系列Memory和Hidden state,而不是仅保留一个进行传递。而Intra-Attention则是存储的每个词的memory和hidden state用来做attention。详情参考:《Long Short-Term Memory-Networks for Machine Reading》阅读笔记.
本文采用了相似的结构,保留了一个Hidden tape H t − 1 = ( h t − N m , ⋯ , h t − 1 ) H_{t-1}=(h_{t-N_m},\cdots,h_{t-1}) Ht−1=(ht−Nm,⋯,ht−1)和一个Memory tape C t − 1 = ( c t − L , ⋯ , c t − 1 ) C_{t-1}=(c_{t-L},\cdots,c_{t-1}) Ct−1=(ct−L,⋯,ct−1)。之前所述的隐状态即 m i = ( h i , c i ) m_i=(h_i,c_i) mi=(hi,ci)。
Reading Network通过一个改进的Structure Attention来捕捉单词之间的依存关系。
Structure Attention 在每个时间步t,Reading Network会通过一个structured attention layer来计算:
其中,
δ
k
\delta_k
δk表示hidden state的维度。借助之前求得的
g
i
t
g_i^t
git,本文定义一个新的structured intra-attention weight如下:
然后用这个权重加权可以得到对之前Memory/Hidden tape中所有状态的一个加权求和值:
通过这样计算Structured Attention,我们就可以将原图1中的各种关系来反映到神经网络中。
之后,将 x t , c ~ t , h ~ t x_t,\tilde{c}_{t},\tilde{h}_t xt,c~t,h~t作为一个LSTM模块的输入,然后将输出 c t , h t c_t,h_t ct,ht继续写入到Memory/Hidden tape中即完成一步计算更新操作。
5.2 Predict Network
Predict Network用于预测下一个单词是什么的概率。在当前时间步t,模型需要预测下一个单词
x
t
+
1
x_{t+1}
xt+1是什么。但由于模型无法观测到
x
t
+
1
x_{t+1}
xt+1,所以使用一个估计值
然后,我们就可以计算相应的
α
t
+
1
\alpha^{t+1}
αt+1和
g
i
t
+
1
g_i^{t+1}
git+1带入公式3。即
这里,
f
^
(
⋅
)
\hat{f}(\cdot)
f^(⋅)可以是一个简单地前馈神经网络或者像ResNet那样的复杂结构或者更深的模型用来实现预测。
6 实验
本文在三个任务上进行了评估。
6.1 Character-level Language Model
在Penn Treebank上测试结果如下:
其中,PRPN取得了最好的表现。文中也对部分结果进行了可视化观察,如下图所示:
单词的最后一个字符与空格之间的句法距离趋于较高,空格是分隔单词的合理断点。换句话说,如果模型看到一个空格,它将“注意到”前面的所有步骤。如果模型看到一个字母,它将“注意”到前面最近的一个空格字符。该模型自主发现,避免了单词间的注意连接,并利用空间(分隔符)token的隐藏状态来总结之前的信息。这证明了该模型能够理解数据的潜在结构。
6.2 Word-level Language Model
在Penn Treebank上测试结果如下:
PRPN也取得了不错的结果。
同时在该数据集上进行了Ablation Study如下:
在Text8数据集上取得了最好的结果:
6.3 无监督成分句法分析
在WSJ10数据集上结果如下:
推断过程如下(这部分内容来自附录A):
首先将Parsing Network预测的所有 d i d_i di进行降序排列,然后对于第一个(即最大的) d i d_i di,我们将句子分成以下成分 ( ( x < i ) , ( x i , ( x > i ) ) ) ((x_{<i}), (x_i, (x_{>i}))) ((x<i),(xi,(x>i)))。然后我们对短语成分 ( x < i ) (x_{<i}) (x<i)和 ( x > i ) (x_{>i}) (x>i)重复上述操作,直到每个短语成分只包含一个单词为止。
因而按上述方法所得到的句法树是二叉树的形式,但真实标注中不一定是二叉树,所以Table 5中有一个上界是假如所有的二叉树形式的标注全部正确所能达到的最佳值。从表格可以看出,PRPN方法的表现还可以。
7 结论
在本文中,我们提出了一种新的神经语言模型,该模型可以同时从没有标注的句子中归纳出句法结构,并利用推断结构来学习更好的语言模型。我们引入了一种新的神经解析网络:Parsing-Reading-Predict Network。它可以做出可微分的解析决策。我们使用一种新的结构化注意机制来控制递归神经网络中的skip connection。因此,可以利用诱导句法结构信息来提高模型的性能。通过这种机制,梯度可以直接从语言模型损失函数反向传播到神经解析网络中。所提出的模型在字/字符级语言建模任务上达到(或接近)最先进的水平。实验还表明,推断的句法结构与人类专家注释高度相关。