越南做网站服务器,网站建设 样板,公司建网站费用,免费域名排行榜文章目录1 什么是Constituency Parsing2 解决方案2.1 Chart-based Approach2.2 Transition-based Approach2.3 Grammer as Foreign Language本文为李弘毅老师【Deep Learning for Constituency Parsing】的课程笔记#xff0c;课程视频youtube地址#xff0c;点这里#x1f…
文章目录1 什么是Constituency Parsing2 解决方案2.1 Chart-based Approach2.2 Transition-based Approach2.3 Grammer as Foreign Language本文为李弘毅老师【Deep Learning for Constituency Parsing】的课程笔记课程视频youtube地址点这里(需翻墙)。
下文中用到的图片均来自于李宏毅老师的PPT若有侵权必定删除。
文章索引
上篇 - 7-7 Deep Learning for Coreference Resolution
下篇 - 7-9 Deep Learning for Dependency Parsing
总目录
1 什么是Constituency Parsing
Constituency parsing要做的事情就是解析出句子中所有的constituents。constituent在英文字典中的意思是“成分”而在我们这次的这个场景中可以理解为句子中的一个“单元”。比如下面这句话中“deep learning就是一个constituent“very powerful也是一个constituent甚至每一个单词都是一个constituent”。但是learning is very这样狗屁不通的句子就不是constituent”。一种感性的理解只要读的通的就是constituent。
每个constituent在语言学中都有对应的专有名词(POS tags)比如deep learning就是NP(Noun phrase)very power就是ADJP(Adjective phrase)等等。多个constituents可以组成一个更大的constituent。这也就构成了一棵树的结构每个节点都是我们要找的constituent。为了简化本文只考虑二叉树的情况。
那么到底有哪些constituents呢可见下表。
2 解决方案
用deep learning的方法来解决Constituency Parsing的问题有两个方案一个是Chart-based Approach另一个是Transition-based Approach。
2.1 Chart-based Approach
chart-based方法很直接就是遍历句子里的所有spans然后对每个span做两次分类先推测这个span是不是一个constituent如果是的话再推测这个constituent的词性是什么。 模型的结构和上一篇中的Coreference Resolution很像。就是把整个句子过一个预训练的模型然后对模型的输出取一个感兴趣的span抽取这个span的特征再送入刚才说的两个分类器当中。 如果要遍历所有的span的话就要遍历N(N-1)/2次这样做会有一个大问题就是当模型认为deep learning is和is very powerful都是constiuent的时候模型就自相矛盾了。
所以实际情况下并不是去遍历所有的spans而是去遍历所有的树结构。然后取总置信度最高的那棵树来作为最终的那棵树。而去遍历所有的树的时候会有许多需要重复计算的子节点这就是一个典型的动态规划问题了。有个叫做CKY的算法就是来解决遍历树这个问题的。
2.2 Transition-based Approach
Transition-based方法有三个状态一个叫做stack用来存储已经操作过的元素一个叫做buffer用来存储还未操作的句子还有一个叫做actions表示着可以采取的动作。动作有create“shift和reduce三种。“create表示一个词性的开始将移入stack当中比如NP从这个位置开始。“shift表示将buffer中的一个单词移入stack当中。“reduce表示一个词性的结束结束符也将移入stack当中。 比如下图当中每一步采取的action在下半图每一个action的结果将保存在上半图的stack当中。首先create了一个”(s表示s从这里开始然后create了一个”(NP表示NP从这里开始接着两个shift把deep和learning放入stack当中接着一个reduce”表示NP的结束即deep learning是一个NP”以此类推直到全部结束。 这个方法的网络结构如下就是将stackprevious actions和buffer分别过一个RNN然后将这三个结果再一起过一个分类网络输出要采取什么action接着根据action更新状态如此循环直到结束。 看到有action很多人可能会联想到强化学习难道训练的时候要用强化学习的方法吗不用这就是一个简单的分类任务。因为我们的ground truth明确地告诉了我们这一步要输出什么action所以只要每一步做分类就可以了。
2.3 Grammer as Foreign Language
还有一种直接用seq2seq的方法去做的这种方法的关键就在于构造输出的结果是什么。一种构造方法如下图所示自顶向下由左向右构造出来的和刚才Transition-based Approach的简直一模一样。只不过这里是直接用seq2seq去做的。