前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【一分钟论文】Deep Biaffine Attention for Neural Dependency Parsing

【一分钟论文】Deep Biaffine Attention for Neural Dependency Parsing

作者头像
zenRRan
发布2019-07-04 15:17:44
8.6K0
发布2019-07-04 15:17:44
举报

作者:刘宗林

编辑:zenRRan

刘宗林个人主页:

https://bamtercelboo.github.io

欢迎大家访问!

导读

句法分析(syntactic parsing)是NLP中的关键技术之一,通过对输入的文本句子进行分析获取其句法结构。句法分析通常包括三种:

  • 句法结构分析(syntactic structure parsing),又称短语结构分析(phrase structure parsing)、成分句法分析(constituent syntactic parsing)。作用是识别出句子中的短语结构以及短语之间的层次句法关系。
  • 依存关系分析,又称依存句法分析(dependency syntactic parsing),简称依存分析(denpendency parsing),作用是识别句子中词与词之间的相互依存关系。
  • 深层文法句法分析,即利用深层文法,例如词汇化树邻接文法(Lexicalized Tree Adjoining Grammar, LTAG)、词汇功能文法(Lexical Functional Grammar,LFG)、组合范畴文法(Combinatory Categorial Grammar,CCG)等, 对句子进行深层的句法以及语义分析。

依存分析

百度百科定义:依存句法是由法国语言学家L.Tesniere最先提出。它将句子分析成一颗依存句法树,描述出各个词语之间的依存关系。

依存句法理论中依存是指词与词之间支配与被支配的关系,这种关系不是对等的,这种关系具有方向指向。确切的说,处于支配地位的成分称之为支配者(governor,regent,head),而处于被支配地位的成分称之为从属者(modifier,subordinate,dependency)。依存关系连接的两个词分别是核心词(head)和依存词(dependent)。依存关系可以细分为不同的类型,表示两个词之间的具体句法关系, 依存关系用一个有向弧表示,叫做依存弧。依存弧的方向为由从属词指向支配词。

如下图列举出一个依存句法分析的例子

Dependency Parsing 主要有两种方法:Transition-based 和 Graph-based。

Deep Biaffine Attention for Neural Dependency Parsing

基于图的依存句法分析从左向右解析句子,针对句中的每个词,找该词的head词(该词到head词之间的arc)以及从该词到head词之间的依存关系类型,即需要解决两个问题:哪两个节点连依存弧以及弧的标签是什么。目前的深度学习的方法使用分类器来解决这两个问题。该模型是针对图的依存句法分析,是对Kiperwasser & Goldberg(2016),Hashimoto et al.(2016), and Cheng et al.(2016)提出的模型加以修改。主要的修改如下:

  • 使用双仿射注意力机制(Biaffine Attention)代替双线性(bilinear)或传统的MLP-based注意力机制, 运用了一个双线性层而不是两个线性层和一个非线性层。
  • 使用Biaffine依存标签分类器。
  • 在双仿射变换(Biaffine transformation)之前,将降维MLP应用于每个循环输出。

biaffine并不是双线性(bilinear)或MLP机制,它使用一个仿射变换在单个LSTM输出状态r预测所有类别上的得分。在本文提出的双仿射注意力机制(Biaffine Attention)可以看做为一个传统的仿射分类器(公式1),但是对stacked LSTM的输出RU(1)进行一个 (d×d)线性变换代替权重矩阵W,并且对Ru(2)采用一个(d×1)线性变换来替代偏置项b(公式2)。

arc得分

若句子中有N个单词,包含虚根ROOT在内一共d=N+1个词。对每个词都需要得到一个分数si。因为句子中的词的个数是不确定的,所以这是一个不定类别分类问题。而一般MLP是个固定类别的分类器(公式1),为了能够处理不定类别分类问题,本文采用两个MLP对BILSTM隐层输出向量进行重新编码(公式4、公式5)。然后套用公式(2)得到公式(6), 得到分数。这里两个MLP分别针对于dep和head。MLP得到的向量表示通常更小,好处是能够去除多余的信息。因为原始BiLSTM隐层中含有预测依存弧标签的信息。对预测head无用。

本文把上述公式称之为deep bilinear attention mechanism,因为并没有直接用RNN输出的向量表示,而是采用了对head和dep专用的两个MLP进行再次编码。这里并没有用到熟悉的attention公式,但是称之为attention的原因是,输入是所有时刻的LSTM隐层向量表示,输出是一个在各个时刻上归一化之后向量表示。和其它Graph-based模型一样,在训练时,预测的解析树是每一个单词都依存于其得分最高的head(虽然在测试时也会通过MST算法确保解析树是一个格式良好的树)。

arc标签

head与dep之间的依存关系数目是确定的,这是一个确定类别的分类问题,采用下述公式(3)计算标签分数。

这里的优势在于可以直接对单词 j 在第二项收到任何dependents的先验概率和 j 在第一项中收到特定依存项 i 的可能性之间进行建模。还双仿射分类器来预测给定的head或预测对应的依存标签。假设一共有m个标签,U(1)是m x d x d的高阶tensor,ri是第i个词在BiLSTM的输出向量表示(d x 1),yi是第i个词head,ryi对应的是其BiLSTM的向量表示(d x 1)。

整体结构图

模型的整体结构图

该模型图从下向上看,输入是词与词性向量拼接之后的向量表示,通过BiLSTM提取到特征ri,经过两个不同的MLP分别得到 h(arc−dep) 和 h(arc−head) ,d(所有词)个这样的h stack得到H(arc−dep)和H(arc−head),并且H(arc−dep)额外拼接了一个单位向量。利用中间矩阵U(arc)进行仿射变换,每个词以dep的身份与以head的身份的每个词进行点积,得到arc成立的分数矩阵S(arc)。也就是上述公式(6)得到的结果。

实验设置及实验结果

https://github.com/bamtercelboo/PyTorch_Biaffine_Dependency_Parsing

欢迎大家star和fork!

总结

本文是对Deep Biaffine Attention for Neural Dependency Parsing做的一个简单的总结,同时也是NLPCC2019 shared tasks(跨领域依存句法分析)的一个baseline方法。

References

[1] Deep Biaffine Attention for Neural Dependency Parsing [2] https://zhuanlan.zhihu.com/p/51186364 [3] https://xiaoxiaoaurora.github.io/2019/04/11/Deep-Biaffine-Attention-for-Neural-Dependency-Parsing/ [4] http://www.hankcs.com/nlp/parsing/deep-biaffine-attention-for-neural-dependency-parsing.html [5] http://hlt.suda.edu.cn/index.php/Nlpcc-2019-shared-task

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档