课程向:深度学习与人类语言处理 ——李宏毅,2020 (P27)

李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ
图片均截自课程PPT、且已得到李宏毅老师的许可:)

考虑到部分英文术语的不易理解性,因此笔记尽可能在标题后加中文辅助理解,虽然这样看起来会乱一些,但更好读者理解,以及文章内部较少使用英文术语或者即使用英文也会加中文注释,望见谅



前言

在前一篇中我们学习到了 Constituency Parsing 成分句法分析将讲解任务的基本概念、训练目标以及常用的两种解法,和深度学习在这些解法中的使用。

而在本篇P27 和 上一篇P26,我们进入了 Parsing 句法分析,
  在本篇P27中将讲解
    Dependency Parsing 依存句法分析:找出句子中词的依赖关系
  在上一篇P26中讲解了
    Constituency Parsing 成分句法分析:把句子组织成短语的形式

本篇,我们将学习到Dependency Parsing 依存句法分析:找出句子中词的依赖关系。我们将学到依存句法分析的基本概念:关系、依存句法树和抽象化的训练任务,以及与成分句法分析类似的方法等。

I Dependency Parsing

1.1 Constituency Parsing & Dependency Parsing 两种句法分析

在这里插入图片描述

在上一篇我们已经讲过Constituency Parsing 成分句法分析:找出句中所有的constituents 组成成分和 每种组成成分的类别。

而本篇要讲的 Dependency Parsing 依存句法分析:找出句子中词的依赖关系,关注的是两个词汇之间的关系,而这两个词汇不一定要相邻,如上图中的book和flight。

在这其中,两个词汇间的关联又有各式各样的关系,我们会用一个箭头来表示这个关系,箭头起始的词叫做head,指向的词叫做dependent

1.2 Relations 关系

在这里插入图片描述
词汇和词汇间的关系有很多种,如上图

1.3 Dependency Parsing Tree 依存句法树

在这里插入图片描述
Dependency Parsing 依存句法分析,其实就是找出词汇和词汇间的关系。

具体而言,就是把一个句子变成一个Directed graph有向图,即node节点和节点间是有箭头连起来的,是有方向的连接。每个词汇就是节点,词汇和词汇间的关系就是箭头(有向边)。

举一个具体的例子,如上图,我们要对“I want to study a PhD”一句做依存句法分析,我们将每一个词汇用一个节点表示,如上图的黄框框。接下来,节点和节点间有关系的会被连在一起,比如说want的主语是I:want指向I、want想要做的是study:want指向study、study想学的是PhD:study指向PhD等等,而箭头上是有一个标记的,这个标记便是词汇和词汇的关系。

这个依存句法树,有向图就是我们要用机器学习方法找出来的东西。那我们该怎么找出这棵依存句法树呢?

1.4 Task abstraction 任务抽象化

在这里插入图片描述
Constituency Parsing 成分句法分析 和 Dependency Parsing 依存句法分析两者大同小异,训练目标几乎都是一样的,只不过是输入部分组成形式不同而已:
   成分句法分析输入是相邻的一段词汇段span,训练目标是判断这个词汇段span是否是一个组成成分,二分类任务。如果是一个组成成分,再判断这个组成成分的类别,多分类任务。
  依存句法分析输入是任意两个词汇,训练目标是判断这两个词汇间是否有关系,即左侧的词汇应不应该指到右侧的词汇,二分类任务。如果有关系,再判断是什么关系,多分类任务。

II Approach 解法

依存句法分析的解法和成分句法分析的解法可称一模一样,都是两种解法:基于图的方法和基于转变的方法

2.1 Graph-based 基于图的方法

在这里插入图片描述

2.1.1 Classifier 分类器

那我们该怎么训练出来一个分类器,并怎样通过这个分类器得到一个Dependency Parsing Tree依存句法树呢?

要做的事请,如上图,我们有N个词汇,当然还要多加一个token,表示ROOT代表根节点。接下来把这些N个词汇和ROOT两两丢到分类器里面,判断左边的输入应不应该指到右边的这个输入,举例来说,左边输入是ROOT和want,因为我们在训练的时候是知道正确答案的,故分类器应该判断为YES。每一个token要和其他所有token判断一次,N次,一共有N+1个token,故一共要跑N(N+1)次分类器即可训练完成。但其实也是可以做类似剪枝的操作的,如ROOT只能指向其他token,且只要判断出指向哪个token后,就不需要接着进行判断了。

如果我们单纯把依存句法分析看作分类问题,和成分句法分析一样,也可能会出现这样的问题。

2.1.2 Problem 问题

在这里插入图片描述
如果仅仅当作分类问题,我们最终可能会得到不是树的东西,如上图,我们可能将w1和w2判断为w1应该指向w2,之后,又将w2和w3判断为w3应该指向w2。这样显然是不合法的树状结构。

所以该怎么办呢?我们可以用这样的一种方法来解决。其实我们在讲成分句法分析也遇到了类似的上述问题,也就是上一篇,我们就用CKY的算法来解。

2.1.3 Maximum Spanning Tree 最大分数树

在这里插入图片描述
根据我们训练好的分类器,我们可以知道所有的节点两两连在一起的分数。接下来,穷举所有合乎规则的依存句法树,如上图,右上的树分数为0.2 * 0.3 = 0.06,右下的树分数为0.9 * 0.7 = 0.63 ,显然右下这棵树更有可能是一颗合理正确的依存句法树。

2.2 Transition-based 基于转变的解法

还记得上篇,我们在讲成分句法分析时,也是有这种方法,有三个部分组成:Stack 栈、Buffer 缓存区和Action 命令,命令又分为CREATE(X)、SHIFT和REDUCE。

2.2.1 Modules 模块

在这里插入图片描述

同样和成分句法分析的三个组成模块一样:

  1. Stack
  2. Buffer 缓存区
  3. Actions 命令

在操作开始,Stack 栈为空Buffer 缓存区保存着输入的整个句子,然后我们只要不断地采取一连串的Action 命令最后得到一个依存句法树。具体过程请参见上一篇,不再阐述。

2.2.2 Literature 文献方法

在这里插入图片描述
在文献上有很多这样的方法,基本思想都是,用RNN把Stack S、Buffer B和已经完成的命令Action A读入,都表示成一个个的向量。再用一个网络来输入这三个向量,进行多分类决定下一步应该采取的Action 命令,并更新Stack 栈和 Buffer 缓存区的内容。

2.2.3 SyntaxNet 最知名的方法

在这里插入图片描述
在各种Transition-based 基于转变的方法中,SyntaxNet是最知名的方法,老师觉得它最知名的原因有两个,其一是它是Google发表的,其二它有个好的可视化,一个动画讲解这种方法:
动画链接:https://ai.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html

在这里插入图片描述
注意SyntaxNet的年份是2016年,一个AlphaGo的年代,那时和AI相关的东西都使人们觉得很神奇,当然后来也有很多比SyntaxNet更好的基于转变的方法,比如Stack Pointer如上图。

至此有关句法分析的相关内容到此结束,你可能会问为什么我们要单独讲两种句法分析:成分句法分析和依存性句法分析呢?因为在老师的NLP任务分类中,句法分析任务是属于其他类的,它看上去是一种很复杂不规则的任务,但在我们了解明晰句法分析的训练目标、模型方法后其实句法分析也不是特别的困难。

猜你喜欢

转载自blog.csdn.net/qq_44574333/article/details/108429431
今日推荐