Skip to content

Lesson-4 依存句法

依存句法结构

与成分句法树不同,依存句法树不关注短语成分,而是直接关注每个词本身及其之间的二元依存关系。

一个例子如下:

alt text

其扁平化的结果如下:

alt text

具体来说,依存关系由语言学家定义,有如下这些依存关系:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1. root:表示句子的根节点,通常是句子的主要谓语动词
2. nsubj:表示谓语动词的主语
3. (d)obj:表示谓语动词的直接宾语
4. iobj:表示谓语动词的间接宾语
5. det;表示名词的限定词,如冠词
6. amod:表示名词的形容词修饰
7. advmod:表示动词、形容词或副词的副词修饰
8. nummod:表示名词的数量修饰
9. nmod:名词对另一个名词的修饰关系
10. case:表示介词短语中的介词

依存关系其由一个中心词(Head)和依存词(Dependent)组成。比如:

1
prefer(Head) -> I(Dependent)
一般来说,描述一个依存关系的范式如下:
1
2
(Head, dep relation, Dependent)
比如:(prefer, nsubj, I)
依存关系树的性质
  • 只有一个特殊的树根节点
  • 每个节点只有一个入边(一个父节点),但是可以有很多出边
  • 对于每个叶节点,有且仅有一条从根节点到叶节点的路径

什么是 Projective 性质?

满足 Projective 性质的依存树是没有边相交的,换言之,不满足 Projective 性质的依存树至少有两条边相交。

alt text

Transition-based 依存句法分析

三个配置:

  • 栈:保存当前处理的部分子树,初始为[Root]
  • 缓冲区(队列):保存剩余未处理的词(初始为整个句子)
  • 依存关系:保存已建立的依存关系(初始为空)

四个操作:

  • SHIFT:把队列中的第一个词加入栈顶
  • LEFT-ARC:栈顶的词和它下面词构成依存关系,并且栈顶的词为 Head
  • RIGHT-ARC:栈顶和它下面的词构成依存关系,并且栈顶的词为 Dependent
  • REDUCE:移除栈顶元素(在完成其所有的关系之后)

以一个具体的例子来说明这个流程:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Stack                           Queue                      Action
[Root]              [Book,me,the,morning,flight]           SHIFT
[Root,Book]           [me,the,morning,flight]              SHIFT
[Root,Book,me]         [the,morning,flight]                RIGHT-ARC
[Root,Book]            [the,morning,flight]                SHIFT
[Root,Book,the]          [morning,flight]                  SHIFT
[Root,Book,the,morning]      [flight]                      SHIFT
[Root,Book,the,morning,flight]  []                         LEFT-ARC
[Root,Book,morning,flight]      []                         LEFT-ARC
[Root,Book,flight]              []                         RIGHT-ARC
[Root,Book]                     []                         RIGHT-ARC
[Root]                          []                         
构建成的依存树如下:

alt text

将一个句子转化为依存树,可以通过连续的选择一串action来实现,所以一个句子对应一个action序列。

对于任意一棵满足 Projective 性质的依存树,都至少存在一个操作序列,使得这个操作序列可以得到正确的依存树,那么:依存分析问题,被转化成了求操作序列的问题。

那么,自然地,我们想到一个重要的问题:如何决定action?

答案是训练一个分类器,得到gold操作序列来训练分类器的流程如下:

1
2
3
4
5
6
Oracle函数:
输入:一个正确的依存树
输出:一个操作序列
如果栈顶的两个元素执行LEFT-ARC之后得到的关系在包含在正确的依存树里,那么我们就选择LEFT-ARC
如果栈顶的两个元素执行RIGHT-ARC得到的关系包含在正确的依存树里,并且栈顶这个词的所有dependent都已经处理了,那么就选择RIGHT-ARC
否则选择SHIFT

综上,我们得到依存树的流程是:

1
2
3
4
5
6
7
8
将依存分析转化为操作序列生成的问题
首先训练一个生成操作序列的模型:
   给定一系列训练数据(依存树库)
   训练一个分类器,能够生成如下操作组成的序列:SHIFT、RIGHT-ARC、LEFT-ARC
下面开始预测:
   输入:一个句子
   输出:一个操作序列
   解码:将操作序列转变成依存树