依存句法分析(dependency parsing)
1.语法结构介绍
有两种主要的结构,一种是phrase structure(短语结构),通过不同词性的词组合,结合成phrase,进而结合成句子。
一个句子就可以按照如图进行划分。
另外一种语法结构是Dependency structure(依存结构)。
依存结构认为每一个词都是别的词的Dependency,要么是修饰,要么是参数。比如,barking依赖于dog。
为啥需要研究句子结构呢?因为人的语言比较复杂,通过对句子进行结构上的拆解,能够更好的使机器理解与翻译自然语言。
另外,有很多句子带有歧义,通过不同的句子结构的拆解(语法树)可以表达出句子不同的意思(老师在这里讲了很多)。
2. Dependency Grammar and Dependency Structure
依存语法假定句法结构由词汇项之间的关系构成,通常是二元非对称的,用箭头表示依存关系, 箭头上方可以写下词与词之前的语法关系,如下图所示:
通常,也定义一个假的root,让所有的词都依存于这个假的root。
Universal Dependencies treebanks
另外一种表示,就是采用依存树库的方式,如图:
Dependency Parsing可以看做是给定输入句子 [公式] (其中 [公式] 常常是fake ROOT,使得句子中每一个词都依赖于另一个节点)构建对应的Dependency Tree Graph的任务。
3.构建Dependency structure(Dependency Parsing)
树结构的条件:
• Only one word is a dependent of ROOT
• Don’t want cycles A → B, B → A
箭头画在单词上方,这里有嵌套结构,还有交叉。出现了交叉就是non-projective的
老师介绍了很多Dependency Parsing的方法,主要如下图:
课中讲到的是Greedy transition-based parsing
Greedy transition-based parsing
这种算法有:
主要方法是:
下面几张图是分析“i ate fish”的依存关系的:
Shift,Left-Arc,Right-Arc是不同的操作。后两者就是通过在左侧或右侧添加词作为依赖项(dependent)来作出判断。比如I是ate的一个依赖项,将其移除。最后stack中只有一个,而buffer中什么也没有,就代表结束了。
这种方法还是人手工来判断词语此之间的依存关系,为了自动划分,引入机器学习的一些方法。
MaltParser 方法
在上述方法下,每个动作都由一个有区别的分类器(例如softmax分类器)对每个合法动作进行预测。通常是用SVM或感知器。最简单的形式就是无搜索的,线性复杂度。
如图给所有的词加上标签,然后就可以进行预测下一个步骤:
3.构建效果评估
采用评测指标是UAS(不考虑标签只考虑弧,unlabelled accuracy)或LAS(同时考虑标签和弧):