lecture5 - Linguistic Structure Dependency Parsing

这节课听的比较云里雾里,充斥着各种语言学的术语。

课程内容

这节课主要就是描述了句子的句法结构,描述了两种不同的观点下如何分析句子结构。随后还展示如何建立一个依存分析器(Dependency Parser)。

为什么我们需要分析句子结构(Sentence Structure)

理解句子结构可以帮助我们解释自然语言。人的语言就是将不同的词语组织成不同的部分,然后通过这些不同的部分传达复杂的语意。

上下文无关文法(Context-free grammar)

上下文无关文法是一种基于成分的文法,所谓上下文无关指的是这种文法与具体的词汇无关,我们只关注词语本身的属性。实际上,这种文法形式就是我们在初高中学习的英语语法。
首先,我们为每一个词指定一个种类(Category),实际上也就是我们常说的词性,比如名词(Noun)动词(Verb)连词(Conj)介词(Prep) 等。
然后,我们依据特定的语法,将这些词语组织起来,单一的词汇构建成短语(Phrases),通过这些短语,我们可以递归地建立更复杂的结构,构成长句子。
举例如下:
单一词汇:The(定冠词 det.)、cat(名词 n.)、cuddly(形容词 adj.)、by(介词 prep.)、the(定冠词 det.)、door(名词 n.)
构成短语:The cuddly cat -> 结构:det. + adj. + n. 这里构成一个名词短语
by the door -> 结构:prep. + det. + n.这里构成一个介词短语,在整个句子中是一个状语(pp.)

构成更大短语:The cuddly cat by the door -> 结构:名词短语加上修饰成分状语构成一个新的名词短语。这里就是递归地在构建短语。
这里只是举了一个例子,常见的句子中,我们还会加入动词,主语,宾语等。

语意不清问题(Ambiguity)

在上下文无关的文法中,由于句子的成分相互嵌套,因此光看成分是很有可能会造成句子语意的误解的。
Manning在课上举了几个例子(以英文为例):

(介词短语指意不明)Prepositional phrase attachment ambiguity:
San Joes cops kill man with knife
这个句子中,介词短语with knife 显然是会引起歧义,因为这里它既可以修饰动词kill 也可以修饰名词man 这会是完全不同的两个句子。
很显然,随着修饰成分的增多,解析修饰成分与被修饰成分之间如何匹配会变得愈发困难,这里Manning列举了一个例子,并给出了一个计算这种关系的种类个数的式子(实际上就是卡特兰数):
CS224N
(协调范围不明)Coordination scope ambiguity:
No heart, cognitive issues
这个例子中,到底是No heart以及cognitive issues呢,还是No heart issues and no cognitive issues呢,类似这样的句子解析需要结合上下文以及阅读者本身的背景知识才能够正确理解。

(形容词修饰不明)Adjectival modifier ambiguity
Students get first hand job experience
这个例子。。。嗯。。到底是first handjob experience还是firsthand job experience 讲到这个例子Manning就在一个劲的笑。。

类似的容易导致歧义的例子还有很多,这里不继续列举了。

基于依存关系的文法(Dependency grammar)

第二种观点是将句子组织成词汇之间的依存关系(dependency),这里的主要内容是,我们寻找一个词对另一个词的修饰关系(modify),或者一个词对另外一个词的论证关系(arguments)。这种关系,通常是一种二元非对称的关系。
依存关系的文法出现得比上下文无关文法要早,最早可以追溯到公元前5世纪。
在这里插入图片描述

依存分析(Dependency Parsing)

在依存分析中,我们将句子组织成树状结构,其中每一条边都是一个依存关系(dependency),一般来说,绘制这样的图时,我们会将每条边都写上对应的关系。每条边由被修饰成分指向修饰成分,称为依存(dependency),但这个指向也有人采用相反的画法。
例子:
cs224n
通常,我们为每一句话添加一个假单词(Fake root)在句首,这样,每一个单词就都能作为一个另一个单词的依存。
cs224n

如何进行依存分析(How to parse)

把Manning的课件中的定义写上来:
A sentence is parsed by choosing for each word what other
word (including ROOT) is it a dependent of

就是为每个单词找到对其他单词依赖关系,这里是一种一对多的关系,但在实际操作时,需要加上一些约束
1、对于添加的伪根 (ROOT),只有一个唯一的依赖。
2、单词之间的依赖不构成回环

此外,这里还有一个小定义,当单词之间的依存不存在交叉时,我们称这样的依存分析是projective的,相反,存在交叉的依存分析我们称为non-projective的。
cs224n
图中的依存就交叉了,这是non-projective的。
课件中也对projectivity给出了一些解释,直接贴上来:
cs224n
然后,接着提出了依存分析的主要几种算法:
1、Dynamic Programming
2、Graph Algorithms
3、Constraint Satisfaction
4、“Transition-based parsing” or “deterministic dependency parsing”

前三个都是一句话带过,重点是说第四种。

基于转移的依存分析(Transition-based Dependency parser)

首先,介绍由Nivre提出的Greedy transition-based parsing。
如名字一样,这是一种基于转移的依存分析方法。伪代码解释如下图:
cs224n
整个算法分存储以及动作两部分:
存储包含一个含有未解析单词的缓冲区,一个用来进行解析的栈。
动作有三种,如图所示,分为Shift、Left-Arc、Right-Arc。
Shift:将缓冲区中的元素压入栈中
Left-Arc:构造依存,按找栈顶元素往栈底的方向,并将该对元素出栈。
Right-Arc:与Left-Arc相同,但是构造依存的顺序相反(从栈底指向栈顶)。
直到缓冲区变空,算法结束。
这个算法产生的依存分析是projective的。
这样,这个算法的问题就是一个决策问题,也就是,每一步我们如何决定该采用什么动作?
针对这个问题,Manning展示了几种不同的解决方案,其中也包括他与Dan Qi合作的论文:A neural dependency parser
这里先介绍两个评估依存解析的指标:UASLAS,其中U代表unlabeled
L代表labeled,后面的两个字母忘了。。
两个均是将机器的分析结果与人工结果做比较,区别在于,UAS关注是否找出了两个词之间存在关系,而LAS进一步关注这种关系是否正确。
cs224n
这个是课件中的例子:
具体说,UAS看的是机器画的弧与人工画的弧是否匹配,不看词性。LAS还要求机器写出正确的关系,如上文在画依存树的时候,有向边上的词性标注。

那么,如何进行决策?
这其实是一个分类问题
1、穷举假设空间
这个方法实际上不可行,太过于昂贵的搜索代价。不过,如果使用beam search或许可以接受,但肯定也很慢。
2、机器学习分类器
训练一个分类器,每一步输入特征,得到一个预测结果
3、神经网络分类器
这就是Manning与Dan Qi的论文提出的方法了。
这个方法基于上面的transition-based方法,但是着重使用了单词的分布式表示,同时,将缓冲区以及栈中的元素位置也转换成分布式表示,以及将已经解析好的依存关系也做分布式表示。将这些作为特征拼接起来送入神经网络进行决策的预测。有机会找原文细看一下
cs224n
课程的最后,介绍了几种方法,包括基于图的依存解析以及上述的神经网络方法,但讲得比较简短,这部分如果有机会我打算将paper读完单独拿出来写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值