依存句法分析方法基于图、基于转移和基于seq2seq模型综述,指标

依存句法分析有两种主流方法:基于图的方法和基于转移的方法。

基于图的方法:
a.长距离依存和分析准确率
b.可处理非投射现象
c.需要进行全局搜索,不易使用动态特征,且算法复杂度较高。

基于转移的方法:
a.可以使用丰富的特征,
b.可以达到线性时间复杂度
c.但采用的是局部搜索策略,容易出现错误传递现象
d.不可处理非投射现象
e.准确率要稍逊于基于图的方法。

基于图

基本思想

对于给定的句子x和分析模型的参数θ,在所有可能的的依存图的集合 G s G_s Gs(G_s)中,找到概率最大的依存图 G ∗ G^∗ G(G^∗),该方法的一个典型为最大生成树(MST)模型

MST:对于一棵(候选)句法树
a.树分解为多条依存弧
b.每条弧都用一个特征向量表示,而每个特征向量也有对应的权值
c. 可根据特征和权值对每条弧进行打分,将各条弧的分数加起来即为整棵句法树的分数

s c o r e ( x , y ) = ∑ i , j ∈ y w ⋅ f ( i , j ) score(x,y) =\sum_{i,j∈y}w·f(i,j) score(x,y)=i,jywf(i,j)
因此,寻找最佳分析结果可转化为搜索最大生成树,即哪棵候选句法树能获得最高分数的问题: y ∗ = a r g m a x y ∈ G s s c o r e ( x , y ) y^* =argmax_{y∈G_s} score(x,y) y=argmaxyGsscore(x,y)

模型

MSTParser:
一阶模型:计算一条依存弧的分数时,只考虑了与这条弧有关的特征,各条依存弧之间是相互独立的
二阶模型:在一阶模型的基础上,加入了与兄弟弧(中心节点与其前一个儿子节点所构成的依存弧)有关的特征
三阶模型:使用了与兄弟弧和祖孙弧(非中心节点与其儿子节点所构成的依存弧)有关的特征,且时间复杂度仅为 (n^4)

基于图的神经依存分析

Kiperwasser 和 Goldberg 较早开始尝试基于图的神经依存分析方法,如下图
在这里插入图片描述
对于给定句子s ,我们要在搜索空间Υs内找到得分最高的句法树,即: 在这里插入图片描述
设一条依存弧的中心词为ℎ,修饰词为m ,则这条依存弧可表示为(ℎ, m)。一棵候选句法树的分数为树内各条弧分数的总和,因此公式可写为
在这里插入图片描述
在传统的机器学习方法中,∅(s, ℎ, m)为特征函数,而在神经网络方法中,一般为网络对依存弧的编码。这里采用的是中心词和修饰词的 Bi-LSTM 编码的拼接
在这里插入图片描述
而打分函数则由一个多层感知器(MLP)替代。由此,公式可写成:
在这里插入图片描述
在一开始确定搜索空间时,我们需要计算所有可能的依存弧的分数。而要找到得分最高的句法树,可以采用动态规划算法,如 Eisner的解码算法。在训练网络时,则采用基于间隔(margin-based)的折页损失函数(hinge loss function),以最大化标准句法树y与得到最高分的错误句法树y’之间的距离(MHL)
在这里插入图片描述
若要进行带标签的预测,一个直观想法是在已预测出依存弧的基础上,再判断其所属的依存关系类型。
对于已预测出的依存弧(ℎ, m),将其特征表示输入另一个 MLP,以预测这条弧的标签:
在这里插入图片描述
这个 MLP 的输出层的神经元数目与依存关系类型的数目一致。这里损失函数可用前面的折页损失函数,也可使用交叉熵损失(cross-entropy loss)函数。在训练可预测依存关系标签的网络时,一个训练样本的损失为依存弧的损失(structure loss)与标签的损失(labeling loss)之和。

解码方式

Zhang 等人提出了基于随机化贪心算法,整个解码阶段使用了爬山策略(hill-climbing strategy)来找到最优句法树

Kiperwasser 和 Goldberg 开始尝试基于图的神经依存分析方法

Zheng试图改善前面的工作,提出了增量式神经依存分析模型(incremental neural dependency parsing, INDP),可以在进行全局学习和解码的同时,显式引入高阶特征。

基于转移

基本思想

每读入句子中的一个词,就要根据当前的状态做出决策,如判断这个词是否与前一个词建立依存关系。一旦做出决策,后面将不会有更改。
该方法通常是从左到右遍历整个句子,对于当前词,通过抽取特征来表示当前状态,然后利用分类器决定要采取的动作。

代表性工作

1.Yamada 和 Matsumoto提出的arc-standard方法
2.Nivre提出的arc-eager方法
随后的对基于转移方法的研究大多数都是沿用这两种转移系统

arc-standard

在 arc-standard 转移系统中,包含了三类动作:Shift, Right 和 Left。
而在每个状态中,都有两个相邻的词作为焦点词。
当两个焦点词之间不能建立依存关系时,采用动作 Shift,即焦点向右移动一个词,如图
在这里插入图片描述
当左焦点词可以依存于右焦点词时,采用动作 Right,即在两个词语间建立一条右向弧,使左焦点词成为右焦点词的孩子,同时将原左焦点词从序列中移除,并更新左焦点词,而右焦点词保持不变,如图
在这里插入图片描述
当右焦点词可以依存于左焦点词时,采用动作 Left,即在两个词语间建立一条左向弧,使右焦点词成为左焦点词的孩子,同时将原右焦点词从序列中移除,并更新右焦点词,而左焦点词保持不变,如图
在这里插入图片描述

arc-eager

在 arc-eager 转移系统中,每个状态都由一个三元组<S ,I , A >构成
S是一个栈结构,用于存放已被遍历的词
I为一个队列结构(缓存区),用于存放句子中还未被分析的词
A代表已经建立的依存弧集合。
对于要分析的句子x={w_0, w_1, …, w_n},初始状态为<null, x, ∅>。
该系统包含了四类动作:Left-Arc, Right-Arc, Reduce 和 Shift。

对于栈顶词w_i,当不存在词w_k充当其中心词时,如果它可以依存于队首词w_j,此时采用动作 Left-Arc,即在两个词语间建立一条左向弧,使栈顶词成为队首词的孩子,同时将栈顶词从栈中弹出,如图
在这里插入图片描述

对于队首词w_j,当不存在词w_k作为其中心词时,如果它可以依存于栈顶词w_i,此时采用动作 Right-Arc,即在两个词语间建立一条右向弧,使队首词成为栈顶词的孩子,同时将队首词压入栈,如图
在这里插入图片描述

对于栈顶词w_i,如果存在词w_k充当其中心词时,如果它无法与队首词建立依存关系,此时采用动作 Reduce,即将栈顶词从栈中弹出,如图
在这里插入图片描述
当队首词无法与栈顶词建立依存关系时,采用动作 Shift,即将队首词压入栈,如图
在这里插入图片描述

典型的基于转移方法的神经依存模型

在这里插入图片描述
其基本思想与传统的基于转移方法一致,即对于每个状态,找到得分最高的转移动作,直至到达终结状态。
对于当前的转移状态 ,我们要在所有适用于当前状态的转移动作(构成转移动作集合Legal(c))中找到得分最高的转移动作 t∗,即:
在这里插入图片描述
其中,∅(c)为特征函数,这里采用的是栈顶三个词s0,s1,s2及缓冲区第一个词b0的Bi-LSTM 编码的拼接:在这里插入图片描述
而打分函数可用一个多层感知器(MLP)替代:在这里插入图片描述
MLP 输出层的神经元数目则取决于转移动作集合Legal(c)中转移动作的数目。若是进行不带标签的依存弧的预测,Legal(c)中仅包含转移动作。若要预测依存弧的标签,还要让能建立起依存弧的转移动作系统中的带上依存关系类型。

若我们采取 arc-eager系统,则整个系统内共含有2n + 2种转移动作,即n个Left-arc_i、n个Right-arc_i、1个shift和1个reduce

训练网络时,对于每个状态,同样可以使用折页损失函数
在这里插入图片描述
该式子计算的是一个状态的损失,而一个训练样本的损失为到终止状态时,前面所有状态的损失之和。

要注意的是,要得到一棵标准的分析树,可使用的转移动作序列不唯一,即有可能存在多个到达标准分析树的标准转移序列(oracle),但传统的方法中只确定了唯一一种标准序列。

由于基于转移的方法采取的是贪心策略,因此如果在当前状态预测的动作有误,将会影响后面的全部预测结果。

为此,Goldberg 和 Nivre提出了动态标准序列(dynamic oracle)及探索性训练(training with exploration)的策略,一方面可允许有多个标准转移序列的情况;另一方面,可使最后输出的转移序列达到最优,即可最小化前面的预测错误对后面的预测的影响。

其他工作

贪心解码算法

1.传统的方法在抽取特征时,往往需要专家事先定义好特征(核心特征)。而为了提高分类精度,还需要人工定义各种组合特征。Zhang 和 Nivre给出了一套准优化的特征和特征组合模板,其中包括了 20 种核心特征和 72 种组合特征。这种方法一个明显的缺点是人工制定特征的过程极为繁琐。

2.Chen 和 Manning最早将深度学习技术应用于依存句法分析。与传统方法类似,他们首先从一个状态中抽取核心特征,随后这些特征会被用低维连续的分布式向量来表示。由于神经网络中使用了非线性激活函数,因此相当于隐式地对核心特征进行了组合。该方法尽管仍需人工定义核心特征,但无需再另外进行特征组合,大大节省了分析的时间,同时也得到了更有效的特征组合,最终取得了与传统方法媲美的准确率。

3.Dyer 等人使用了两个多层长短期记忆(long short-term memory, LSTM)网络来分别表示栈和缓存区,另外还使用了一个多层LSTM 网络来表示历史动作序列,最后将三个网络输出的向量进行拼接,以得到当前状态的向量表示。他们的方法无需人工定义特征,且可以更好地表示部分依存树。

4.Kiperwasser 和 Goldberg则给出了一个更简单的特征表示和学习方法。他们仅使用了LSTM 网络对句子中的词语和少量核心特征(如词性)进行表示;然后,对于当前状态,选择位于栈顶的三个词和位于缓存区的第一个词,将它们对应的向量表示作为多层感知器(multilayer perceptron, MLP)的输入,最后输出得分最高的动作。该方法相对简便易行,也取得了较高的准确率。

全局解码方法

1.Zhang 和 Clark提出了基于beam search的转移算法,在进行每一步转移时,将考虑后续所有可能的状态。接下来,利用柱搜索的思想,从所有状态中选出最好的k个状态,再进行下一步转移,直到解码完成,得到最佳的动作序列。

2.Zhou 等人提出的神经依存分析模型则将学习和解码两个部分统一起来。在学习阶段,标准的动作序列被赋予最高的分数;而在解码阶段,则是计算整个动作序列的似然函数。由于有太多可能的转移序列,导致无法精确计算似然函数,因此他们引入了对照学习(contrastive learning)来近似求解似然函数。

seq2seq应用到依存句法分析

1.Zhang 等人在传统的 seq2seq 架构上,一方面添加了两个二元向量以模拟词语在栈中的状态(压入或弹出),另一方面还加入了多层注意力层,以捕捉已建立的部分树中的依存关系。将句子中的词语和词性作为输入,模型最后的输出是一串动作序列(SHIFT, LEFT-ARC_d, RIGHT-ARC_d, 其中 d 表示弧的标签),可用于构建合法的句法树。

2.Liu 和 Zhang也是利用了传统的 seq2seq 架构,但他们将编码器的隐藏层分为两部分以分别代表栈和队列,而且每部分分别使用一个注意力模型,模型最后的输出也是一串动作序列。前面的一些工作中,网络的最终输出均是动作序列,后续还要通过该序列来构建句法树。

3.Li 等人则真正实现了基于 seq2seq 架构的依存句法分析。给定一个句子作为输入,他们的模型无需依赖转移系统,而是直接预测句子中的每个词语的中心词的相对位置。另外,为了解决长距离依存问题,他们又引入了子根分解(sub-root decomposition)策略,以 ROOT 节点指向的词语为中心,将原来的句子分为了两部分,以对各部分分别处理。他们的模型在 CTB 和 PTB 两个数据集上均有很好的表现。

seq2seq模型

该模型主要包括两个部分:对输入序列编码成中间向量的编码器(encoder)以及解码该中间向量以输出目标序列的解码器(decoder),在每个时刻 ,编码器接受上一时刻的隐藏层的输出ℎ_i-1及当前时刻的输入x_i,以产生当前时刻的输出ℎ_i。最终得到中间向量c= (x_1, x_2, …, x_n)
在这里插入图片描述

得到中间向量c的两种方式,如可以将编码器部分最后一个时刻隐藏层的输出直接赋给c,或是先综合所有时刻隐藏层的输出,对其进行变换后再赋给c
在这里插入图片描述
得到中间向量后,我们即可利用解码器对其进行解码,以依次得到在时刻i的输出为y_i的概率
在这里插入图片描述
即在每个时刻i,解码器可接受当前时刻的隐藏层输出ℎ_i及上一时刻的输出y_i-1,以产生在当前时刻的目标语言词典的概率分布。最终的输出序列y则满足整个序列的生成概率最大:
在这里插入图片描述
而c可以只参与解码器初始状态的运算,也可以参与后面所有时刻的运算。
在这里插入图片描述
编码器和解码器可采用相同的网络结构,也可用不同的网络结构。对于文本数据,两部分一般都采用 LSTM 网络,编码器还可以使用 Bi-LSTM 对输入序列做双向编码。 然而,在基本的 seq2seq 框架中,输入序列仅用一个固定长度的中间向量表示。如果输入序列很长,仅一个中间向量不足以有效表示输入序列的全部信息。
另外,对于解码器不同时刻的输出,输入序列各部分对其影响应该是不同的,而原 seq2seq 框架并没有将这点考虑在内。为此,Bahdanau 等人提出了在 seq2seq 框架中加入注意力机制(attention model)。其主要思想是为输出序列中的每个输出构造一个注意力向量,它可以衡量输入序列的各部分对当前输出的影响度。

基于序列到序列(seq2seq)架构的神经依存分析模型

Li 等人2018年提出的基于序列到序列(seq2seq)架构的神经依存分析模型,如图
在这里插入图片描述
该模型的结构与上一节所介绍的引入注意力机制的 seq2seq 框架基本一致,包含了一个 Bi-LSTM 编码器,一个注意力层及一个 LSTM 解码器。对于输入句x中的每个词语,使用了词嵌入、节点嵌入(node2vec)、子词(sub-word)嵌入、字符嵌入和词性嵌入等五种特征的拼接来表示。在输出时刻t,输出的是输入句中第t个词的中心词的概率分布,即对于词语x_t,其中心词为y_t的概率为:
在这里插入图片描述
则最后的句法分析结果为取得最大生成概率的序列y :
在这里插入图片描述
在机器翻译任务中,每个输出是建立在整个语料库的词表上的概率分布。但在句法分析中,中心词只可能来源于输入句中的词语,若继续使用建立在整个语料库上的词表,很容易使得预测的中心词落在输入句词语的范围外。

为此,在预测x_t的中心词时,模型预测的是中心词与在句子中相对于x_t的位置,而非预测中心词本身。

如下图所示,在句子 That has outraged some fans 中,outraged 的中心词 ROOT 处于 outraged 左边第三个位置
在这里插入图片描述
在解码阶段,采用的是beam search策略,并根据依存树的几个特性,在搜索过程中加入了一些限制,以保证最后的输出是合法的树结构。在得到句子的依存树后,再用一个 BiLSTM-CRF 模型来预测每条依存弧的依存关系类型。

另外,针对以往句法分析中长距离依存表现不佳的问题,采用了子根分解(sub-root decomposition)策略。当句子的长度超过了预设阈值时,对句子执行分解操作。其中,子根指的是中心词为 ROOT 的词,而子根的识别可看作一个序列标注任务(在训练阶段使用的是标准的子根)。在得到句子的子根后,以该子根为界,将句子分解为两部分,分别进行句法分析,之后再将两个子树合并。

依存句法分析器指标:

(1) 无标签依存正确率(unlabeled attachment score, UAS): 所有词中找到其正确中心词的词所占的比例(包括根节点),即 在这里插入图片描述
(2) 带标签依存正确率(labeled attachment score, LAS): 所有词中找到其正确中心词并且依存关系类型也标注正确的词所占的比例(包括根节点),即
在这里插入图片描述

(3) 依存正确率(dependency accuracy, DA): 所有非根节点词中找到其正确中心词的词所占的比例,即
在这里插入图片描述
(4) 根正确率(root accuracy, RA):
a. 正确根节点的个数与句子个数的比值,即
在这里插入图片描述
b. 所有句子中找到正确根节点的句子所占的比例,即
在这里插入图片描述
(5) 完全匹配率(complete match, CM): 所有句子中无标记依存结构完全正确的句子所占的比例,即
在这里插入图片描述
这里的根节点都是指句子的主要成分(而非人工添加的节点 ROOT)。UAS 和LAS 这两个指标最为常见。另外,在使用 UAS和 LAS时,可选择是否要将标点符号计算在内。

参考资料:《面向印尼语的依存句法分析研究》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值