Lesson-4 依存句法
依存句法结构
与成分句法树不同,依存句法树不关注短语成分,而是直接关注每个词本身及其之间的二元依存关系。
一个例子如下:

其扁平化的结果如下:

具体来说,依存关系由语言学家定义,有如下这些依存关系:
| 1. root:表示句子的根节点,通常是句子的主要谓语动词
2. nsubj:表示谓语动词的主语
3. (d)obj:表示谓语动词的直接宾语
4. iobj:表示谓语动词的间接宾语
5. det;表示名词的限定词,如冠词
6. amod:表示名词的形容词修饰
7. advmod:表示动词、形容词或副词的副词修饰
8. nummod:表示名词的数量修饰
9. nmod:名词对另一个名词的修饰关系
10. case:表示介词短语中的介词
|
依存关系其由一个中心词(Head)和依存词(Dependent)组成。比如:
| prefer(Head) -> I(Dependent)
|
一般来说,描述一个依存关系的范式如下: | (Head, dep relation, Dependent)
比如:(prefer, nsubj, I)
|
依存关系树的性质
- 只有一个特殊的树根节点
- 每个节点只有一个入边(一个父节点),但是可以有很多出边
- 对于每个叶节点,有且仅有一条从根节点到叶节点的路径
什么是 Projective 性质?
满足 Projective 性质的依存树是没有边相交的,换言之,不满足 Projective 性质的依存树至少有两条边相交。

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] []
|
构建成的依存树如下: 
将一个句子转化为依存树,可以通过连续的选择一串action来实现,所以一个句子对应一个action序列。
对于任意一棵满足 Projective 性质的依存树,都至少存在一个操作序列,使得这个操作序列可以得到正确的依存树,那么:依存分析问题,被转化成了求操作序列的问题。
那么,自然地,我们想到一个重要的问题:如何决定action?
答案是训练一个分类器,得到gold操作序列来训练分类器的流程如下:
| Oracle函数:
输入:一个正确的依存树
输出:一个操作序列
如果栈顶的两个元素执行LEFT-ARC之后得到的关系在包含在正确的依存树里,那么我们就选择LEFT-ARC
如果栈顶的两个元素执行RIGHT-ARC得到的关系包含在正确的依存树里,并且栈顶这个词的所有dependent都已经处理了,那么就选择RIGHT-ARC
否则选择SHIFT
|
综上,我们得到依存树的流程是:
| 将依存分析转化为操作序列生成的问题
首先训练一个生成操作序列的模型:
给定一系列训练数据(依存树库)
训练一个分类器,能够生成如下操作组成的序列:SHIFT、RIGHT-ARC、LEFT-ARC
下面开始预测:
输入:一个句子
输出:一个操作序列
解码:将操作序列转变成依存树
|
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用