文章目录
- 1 什么是Dependency Parsing
- 2 模型结构
本文为李弘毅老师【Deep Learning for Dependency Parsing】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。
下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。
文章索引:
上篇 - 7-8 Deep Learning for Constituency Parsing
下篇 - 7-10 Deep Learning for Question Answering (1/2)
总目录
1 什么是Dependency Parsing
上一节中,学习了Constituency Parsing,Constituency Parsing要讨论的是两个相邻的单词或是constituents之间能否构成一个新的constituent。而Dependency Parsing则是要讨论任意两个单词之间能否构成dependency,比如下图中下半部分的"book"和"flight"虽然不相邻,但是"book"的目标就是"flight",所以两者之间构成了一个dependency。在这个dependency中,"book"是出发点,"flight"是箭头的终点,所以"book"被叫做head,“flight"被叫做"dependent”。
有关联的两个单词才可以构成一个dependency,单词和单词间的关系可参见下表。
我们最终的目的是把一个句子变成一个树结构的有向图。有向图的每个节点就是一个单词,每条边就是相连的两个节点之间的关系,比如下图就是把"I want to study a PhD"解析成了一个有向图。这里有两个规则,其一是所有的词都有一条指向它的边,没有边指向的词,我们会用一个额外的"ROOT"节点去指向它,“ROOT"是不需要箭头指向它的;其二是每个词都有唯一的路径可以回到"ROOT”。
2 模型结构
训练Dependency Parsing模型的方法,出乎意料地简单,它和训练Consitituency Parsing模型的方法非常相似。Consitituency Parsing就是输入一个span,然后有两个classifiers,一个判断这两个是不是consitituent,另一个判断这两个是何种consitituent。而Dependency Parsing则是输入两个单词,然后有两个classifiers,一个判断这两个单词是不是dependency,另一个判断dependency的relation是什么。
实际的操作中也是如此的,真的就是把需要比较的两个单词,都放进classifiers当中的跑一跑就可以了。但是这样会面临一个问题,就是如果产生矛盾的结果该怎么办?比如下图中,w1w_1w1指向了w2w_2w2,同时w3w_3w3也指向了w2w_2w2,但我们有一条规则是一个节点只能有一个箭头指向它,这样一来就矛盾了。
解决这个问题的办法很简单,就是把模型预测的概率记录下来,然后用最大生成树的演算法去找最优路径即可。
除此之外,也有Transition-based Approach,和Constituency Parsing中介绍过的Transition-based Approach大同小异,最有名的就是2016谷歌提出的SyntaxNet,这里就不细讲了。