论文笔记:Straight to the Tree: Constituency Parsing with Neural Syntactic Distance

157 阅读10分钟

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

前言

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

导语

本篇论文主要借助上一篇工作(上一篇博客参考:论文笔记:Neural Language Modeling by Jointly Learning Syntax and Lexicon)中所提出的句法距离做有监督的成分句法分析,相比于其他方法,可并行性是这篇论文的最大亮点之一。所述模型在实验数据上取得了不错的结果,且花费时间大大减少。

摘要

在这项工作中,我们提出了一个成分句法解析方案。该模型预测了输入句子中每个分割位置的实值标量组成的一个向量,即句法距离。句法距离可以指定选择分割点的顺序,以自顶向下的方式递归地划分输入。与传统的shift-reduce解析方法相比,我们的方法避免了潜在的复合错误问题,同时具有更快和更容易的并行化。在PTB数据集中,我们的模型在同单模型、判别式解析器模型比较时取得了很好的表现,并且在CTB数据集中表现优于以前的模型。

1 简介

设计快速准确的句法分析算法是自然语言处理中一个重要而又长期存在的问题。句法分析已经在几个相关任务中融入了语言先验,如关系提取、同义句检测自然语言推理和机器翻译等。基于神经网络的方法依赖于输入的稠密表示并已经在成分句法分析上取得了不错的结果。一般来说,这些方法要么通过在一个transition-based parser中控制序列的转换(transition),或者使用一种chart-based的方法,通过估计非线性可能性并通过动态规划执行精确的结构推理。

transition-based模型将结构化预测问题分解为一系列局部决策。这使得快速贪婪解码成为可能,但也会导致复合错误,因为模型在训练期间不会暴露自己的错误。解决这一问题的方法通常是使用通过beam search的结构化训练,使训练过程复杂化和动态预言。另一方面,chart-based模型在训练过程中可以包含结构化损失函数,并受益于CYK算法的精确推断,但在解码过程中遭受较高的计算成本。(关于以上提到的这几种方法,不太熟悉的读者可以参考这一篇博客:成分句法分析 & 依存句法分析 Parsing 知识图谱

在这里插入图片描述

本文基于最近(Shen et al., 2017)(即我的上一篇博客:论文笔记:Neural Language Modeling by Jointly Learning Syntax and Lexicon)为语言建模引入的句法距离概念,提出了一种全新的、完全并行的成分句法解析模型。要从一个句子构造一个解析树,可以采用自顶向下的方式,递归地将较大的成分分解为较小的成分,分解的顺序定义了层次结构。对句子中每个可能的分割点定义句法距离。由句法距离引起的顺序完全指定了句子需要递归分解成更小的成分的顺序(如图1):对于二叉树,原序列和句法树之间存在一对一的对应关系。因此,模型经过训练,通过margin rank loss来重现由ground-truth distance引起的分割点之间的排序。最重要的是,本文所述模型是并行工作的:每个分割点估计的距离是独立于其他点产生的,这允许在用于深度学习的现代并行计算架构(如GPU)中轻松并行化。除了句法距离之外,我们还训练模型生成组成标签,这些标签用于构建完全标记的树。

所述模型是完全并行的,因此在训练过程中不需要耗费大量计算的结构化推理。从语法距离到树的映射可以在O(n log n)时间内有效完成,这使得解码的计算速度很有吸引力。尽管我们在输出预测上有很强的条件独立假设,但我们在PTB (91.8 F1)和CTB (86.5 F1)匹配中实现了良好的单模型鉴别解析,有时甚至优于最近chart-based和transition-based解析模型。

2 句法解析树的句法距离

在本节中,我们从Shen等人(2017)为通过语言建模进行无监督句法分析而引入的句法距离概念开始,其扩展到监督设置。我们提出了两种算法:

  • 一种是基于连续词之间的句法距离将解析树转换成稠密表示(即下文中的算法1);
  • 另一种是将推断的稠密表示映射回完整的解析树(即下文中的算法2)。

这个表示法稍后将用于监督训练。下面我们正式定义解析树的语法距离:

定义2.1TT是一个解析好的句法树包含一系列叶子节点(w0,,wn)(w_0,\cdots,w_n)。对于任意两个叶子节点(wi,wj)(w_i,w_j),它们的最小公共祖先的高度记做d~ji\tilde{d}_j^i。那么定义TT的句法距离可以是满足下列关系的任意的实值向量d=(d1,,dn)d=(d_1,\cdots,d_n)在这里插入图片描述 这里的定义有些抽象,其实就是对任意的序列/向量中的两个数值,他们的大小关系是保持一致的。换句话说,向量dd与由连续相邻两个单词对推断的向量d~=(d~10,,d~nn1)\tilde{d} =( \tilde{d}^0_1,\cdots,\tilde{d}^{n-1}_n)有着相同的长度和数量,而且两两元素之间的大小关系是一致的。注意长度为n的句子有n-1个句法距离(因为连续两个单词之间才有一个句法距离)。

例2.1 如图1中的句法树所示,我们首先算出所有的两两相邻单词的d~\tilde{d},这里d~10=2,d~21=1\tilde{d}^0_1=2,\tilde{d}^1_2=1。即d~=(2,1)\tilde{d}=(2,1),然后我们只要找一个长度、大小顺序都和d~\tilde{d}相同的向量dd即可。比如这里只要d=(d1,d2)d=(d_1,d_2)且任何的两个实数值符合d1>d2d_1>d_2关系即可。

根据这个定义,解析模型预测一个标量序列,这是基于神经网络的模型更自然的设置,而不是预测一组跨度。 在这里插入图片描述

我们首先考虑二叉解析树的情况。算法1提供了一种从解析树转换到三元组(d,c,t)(d,c,t)的方式,其中dd包含从左到右(按顺序)中序遍历的树内节点的高度,cc是按相同的顺序遍历的每个树中节点的句法成分标签,tt是从左到右顺序下每个单词的词性标签。dd是一个满足定义2.1的有效的句法距离序列,比如图1所示的句法树可能得到输出为d=[2,1],t=[N,V,N],c=[S,VP],h=2d=[2,1],t=[N,V,N],c=[S,VP],h=2(这个是我自己带入算法1计算的结果,不保证正确性哈)。

当模型能够估计出这些数值后,使用算法2可以将模型输出(d^,c^,t^)(\hat{d},\hat{c},\hat{t})还原为一颗句法树。

在这里插入图片描述 算法的过程很简单,每次找出最大的句法距离,然后以此为分割点,继续递归解析其左右两部分成分,直到所有的成分都只包含一个节点(即叶子节点)。

在这里插入图片描述 模型所需的复杂度为O(nlogn)O(n\log{n}),而之前的greedy top-down方法复杂度是O(n2)O(n^2)。上图展示了重建解析树的一个示例。图中使用了一个虚拟的标签\varnothing来隐式的进行了二叉化。首先,找到最大的ddd1d_1,所以第一次分割点得到的左子树是(w0)(w_0),预测其标签是NP,右子树是(w1,,w5)(w_1,\cdots,w_5),预测它的标签是\varnothing(表明这是一个临时合并用于二叉化的虚拟成分,后续会对其进行剔除,详情参考成分句法分析综述(第二版))。然后递归的对左右子树进行同样方法的解析。由于左子树只有一个节点,故其已经完成解析。对右子树进行解析,寻找最大的dd,这里d4d_4,所以第二次分割点得到的左子树是(w1,w2,w3,w4)(w_1,w_2,w_3,w_4),预测其标签是VP,右子树是(w5)(w_5),预测其标签是\varnothing。以此类推,最终完成所有解析。

3 学习句法距离

给定一个句子,我们使用神经网络来估计句法距离向量。这里使用一个修改的hinge loss,它的target distance就是我们通过算法1得到的distance。

3.1 模型架构

给定输入句子w=(w0,w1,,wn)w=(w_0,w_1,\cdots,w_n),我们需要预测出三元组(d,c,t)(d,c,t)。词性tt由一个额外的词性标注器给出。句法距离dd和成分标签cc是由一系列LSTM和卷积层堆叠组成的神经网络预测出。

首先将单词的embedding和其tag标签的embedding拼接起来输入一个Bi-LSTM层: 在这里插入图片描述 预测每一个单词是一个成分的概率: 在这里插入图片描述 并计算相邻两个单词之间的卷积: 在这里插入图片描述 其中,gisg_i^s可以被视为对算法2中每个分割点位置的粗略表示。然后再将输出通过一层Bi-LSTM: 在这里插入图片描述 这些hidden state即对于相邻两个单词之间的split的表示。

最后,分别对句法距离和成分标签进行预测:

在这里插入图片描述 在这里插入图片描述 下图形象的展示了模型的整体架构: 在这里插入图片描述 图中,圆圈代表LSTM单元,三角形代表卷积层,灰色箭头块表示前馈神经网络,双向的蓝色箭头代表的是双向循环网络连接。首先输入的是word和tag的embedding。然后底层的灰箭头预测一元生成式的标签,相邻两个单词进行卷积后再送入上层的Bi-LSTM然后分别预测句法距离dd和成分标签cc(利用句法距离d确定解析树的结构,然后c赋予各个中间成分标签)。

3.2 目标函数

给定训练数据集D={<dk,ck,tk,wk>}k=1KD=\{<d_k,c_k,t_k,w_k>\}^K_{k=1},训练的目标函数是预测句法距离的loss和成分标签的loss加和。

对于成分标签,直接使用cross-entropy loss即可,其预测的每个标签的概率可以由公式3和公式7得到。

而对于句法距离的loss,最朴素的想法是使用MSE loss,即 在这里插入图片描述 然而,我们并不介意这些距离数值的绝对值,我们最关心的是他们的大小顺序关系,因为我们是通过这个大小关系来判定分割点的,而非某个特定的数值。所以,这里使用一个改进的hinge loss: 在这里插入图片描述 整体的目标函数就是二者的加和 在这里插入图片描述

4 实验

4.1 Penn Treebank

在PTB数据集上的实验结果如下: 在这里插入图片描述 可以看出,结果还是不错的。

4.2 Chinese Treebank

在CTB数据集上的实验结果如下: 在这里插入图片描述 在这里插入图片描述

模型取得了Single model组的最好的结果。

4.3 Ablation Study

模型研究的Ablation Study如下: 在这里插入图片描述

4.4 解析速度

在这里插入图片描述

5 相关工作

6 总结

我们提出了一种基于预测实值标量的成分句法解析方案,叫做句法距离,其顺序识别自顶向下分裂决策的序列。使用神经网络模型来预测距离d和组成标签c。给定在第2节中介绍的算法,我们可以在每个三元组(d,c,t)(d,c,t)和解析树之间一一对应的转换。我们的模型的一个特别之处在于,它可以并行的进行预测分割点。实验表明,所述模型可以达到较强的性能相比以前的模型,同时显著地提高了效率。由于模型的架构只不过是标准的递归层和卷积层的堆栈,而这些层是大多数学术和工业深度学习框架的基本组件,因此这种方法的部署将非常简单。