原文链接:

Straight to the Tree:Constituency Parsing with Neural Syntactic Distancegodweiyang.com

论文地址:Straight to the Tree: Constituency Parsing with Neural Syntactic Distance

摘要

今天要讲的这篇论文发表在ACL18上面,一句话概括,本文就是将句法树序列化,通过预测序列进行句法分析。

主要思想是通过预测一个实值向量来构造出成分句法树,该实值向量表示的就是成分句法树的所有split,并且按照中序遍历给出,具体细节之后会讲到。这个方法之前没有见过,很有新意,效果也很不错,虽然比不上之前讲的基于span的方法,但是该模型最大的优点就是可以并行,时间复杂度低。

近些年来,成分句法分析模型大多是通过学习出词和短语的表示,然后用基于转移的或者基于chart的方法进行句法分析,亦或者是上一篇笔记中提到的top-down方法。但是这一类方法都有一些不可避免的缺点,比如基于转移的方法,通过预测转移序列来生成句法分析树,但是一棵句法分析树可能对应着多棵不同的转移序列,所以训练的时候可能产生错误,可以通过动态Oracle技术解决。基于chart的模型缺点就是速度太慢。

本文提出了一种新的概念叫做“syntactic distance”,以下称作句法距离,这个概念首次提出是2017年一篇语言模型的论文中的,本文将其用在了句法分析中。主要思想是这样的:对于一棵二叉树,它的中序遍历的split序列和二叉树是唯一对应的,所以只需要预测这个split序列就行了,而每个split就是用句法距离来表示。下图就是一棵句法树对应的句法距离:

这棵树有两个split,第一个split的高度更高,所以对应的句法距离数值更大。

最后通过top-down顺序进行解码,解码时间复杂度为  。最后模型在PTB上取得了91.8的F1值,CTB上取得了86.5的F1值。

Syntactic Distances

一棵句法树的句法距离如下定义:
对于句法分析树  ,它的叶子结点也就是句子为  ,记叶子结点  的最近公共祖先LCA为  ,那么句法树  的句法距离定义为任意向量  ,并且满足

这个定义可能看起来比较难理解,通俗一点讲就是,  中任意一对元素的大小关系和  中下标相同的一对元素的大小关系是完全一样的,也就是说,句法距离大小反映的是一个句子两两相邻元素的LCA的高度大小。

还用上面那张图举个例子,  ,那么它的句法距离  就是满足  的任意向量。

这样就可以将一棵句法树唯一对应到一个句法距离的序列,只要预测这个序列就可以得到句法树了,这比预测span集合更加直接。

那么训练的时候如何将句法树转化为句法距离呢?这里只考虑二叉树,下面的算法1给出了伪代码,将句法树转化为三元组  。其中  是两两相邻的叶子结点的LCA的高度向量,可以证明,这和中序遍历得到的结点顺序完全相同。  是与之顺序相同的结点的label向量。  是叶子结点从左向右的tag标签向量。

从算法中可以看出,采用自顶向下递归的形式,叶子结点高度为0,不存在句法距离和label。而内结点的高度等于左右儿子高度较大的一个加1,句法距离为左儿子句法距离拼接上自身句法距离再拼接上右儿子句法距离,label也是如此。

那么如果得到了一棵句法树的三元组  ,如何还原出这棵句法树呢?算法2给出了构造方法,其实类似于之前那篇论文的top-down方法。

原理很简单,只要在每一步寻找  中最大的元素,也就是寻找高度最大的内结点,该内结点对应的下标就是句法树的split,然后对左右子树递归解析就行了。时间复杂度只要  ,而之前的top-down模型时间复杂度为  。

上图是构造句法树的一个例子,和之前一样,通过  的label隐式的将句法树二叉化了,一元还是处理成新的label。图中的矩形高度就代表了句法距离的大小,可以看出,除了  这两个句子开始结束标记的句法距离以外,  最大,所以句法树的split就是  和  ,然后对右子树递归分析。

在子树递归过程中,可以并行计算,理论上时间复杂度可以降到  ,但是句子长度过短的话,是否与cpu通讯时间都要大于这个数量级了呢?这个并行的意义还有待商榷。

训练

模型结构

下面的问题就是给出一个句子,如何学习出它的三元组  呢?

首先将每个单词的词向量和tag向量拼接作为输入,然后送入一个Bi-LSTM,得到隐含层输出为

对于每个单词,可能存在一元结点,也可能不存在,不存在的话就标记为  ,用一个前馈神经网络和softmax预测每个单词的一元结点:

为了得到每个split的表示,对两两相邻单词进行卷积:

注意输出比输入少一个,因为split数量比单词少一个。

然后再将输出通过一层Bi-LSTM,得到最终的split表示:

当然这里也可以选择采用self-attention,详见我的上一篇博客。

最后将输出通过一个两层前馈神经网络,得到每个split的句法距离值:

每个内结点的label同样用一个前馈神经网络和softmax预测:

损失函数

对于训练样例  ,它的损失函数就是  和  的损失函数之和。

对于  ,因为用的是softmax预测的,所以直接用交叉熵即可得到损失  。

对于  ,可以用均方误差:

然而我们并不在意句法距离的绝对值大小,我们只要它的相对大小是正确的即可,所以均方误差在这里不是很合适,可以换成如下损失函数:

最后总的损失函数为:

下面这张图形象的说明了模型的结构,由下往上,第一层圆圈是单词之间的LSTM,然后每个单词上面的五边形是前馈神经网络用来预测一元label,两个相邻单词之间的三角形是卷积,卷积得到的结果再通过一个LSTM得到split表示,最后每个split上面有两个五边形,一个是前馈神经网络用来预测label,另一个是前馈神经网络用来预测句法距离。

实验

在PTB数据集上的实验结果如下:

可以看出,结果还是很有竞争力的,虽然有很多比本文高的模型,但本文解释了,那是因为他们用了Char-LSTM,用了外部数据,用了半监督方法或者重排序方法。。。目前单模型最高的方法依然是上一篇博客讲的span-based模型。

最后值得一提的是模型的运行速度,之前理论分析时间复杂度非常低,而实际上运行速度的确快了许多,结果如下:

总结

本文最大的创新点就是应用句法距离进行句法分析,并且时间复杂度很低。至于文章题目为什么叫“Straight to the Tree”,文章最后说因为只通过一个最普通的LSTM和卷积就预测出了句法树,所以是很直接的。。。

本文的模型还比较粗糙,我觉得仍然有许多改进之处:

  • 可以将LSTM替换为self-attention,因为之前博客讲到了,伯克利的self-attention编码器比LSTM编码器准确率高了1个多的百分点。

  • 可以尝试最近新出的词向量模型ELMo,也许会有特别大的提升。

  • 加入词级别的Char-LSTM,可能会有一定提升。

  • 我觉得split的表示可以更加复杂化一点,而不仅仅是一层卷积+一层LSTM这么简单。

论文赏析[ACL18]直接到树:基于神经句法距离的成分句法分析相关推荐

  1. ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现

    文章目录 ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现 一.绪论 1.1 研究背景与意义 1.2 国内外研究现状分析 1.3 研究内容与目标 1.4 ...

  2. AAAI2020/风格迁移:Ultrafast Photorealistic Style Transfer via Neural Architecture基于神经结构搜索的超快逼真风格转移

    AAAI2020/风格迁移:Ultrafast Photorealistic Style Transfer via Neural Architecture基于神经结构搜索的超快逼真风格转移 0.摘要 ...

  3. 基于神经网络模型的文本语义通顺度计算研究-全文复现(还没弄完)

    该硕士学位论文分为两个部分: ①基于依存句法分析的语义通顺度计算方法 ②基于神经网络模型的语义通顺度计算方法 本篇记录摘抄了该论文的核心内容以及实验复现的详细步骤. 在N-gram模型下进行智能批改场 ...

  4. DMC-Net: Generating Discriminative Motion Cues for Fast Compressed Video Action Recognition 论文赏析

    DMC-Net: Generating Discriminative Motion Cues for Fast Compressed Video Action Recognition 论文赏析 前言 ...

  5. AutoDL论文解读(二):基于遗传算法的典型工作

    自动化机器学习(AutoML)最近变得越来越火,是机器学习下个发展方向之一.其中的神经网络结构搜索(NAS)是其中重要的技术之一.人工设计网络需要丰富的经验和专业知识,神经网络有众多的超参数,导致其搜 ...

  6. Skeleton-Based Action Recognition with Spatial Reasoning and Temporal Stack Learning 论文赏析

    Skeleton-Based Action Recognition with Spatial Reasoning and Temporal Stack Learning 论文赏析 前言 Introdu ...

  7. 机载点云单木分割方法和实现过程的概括介绍(论文赏析)

    这里写目录标题 主流方法图 简单说明 主流方法图 简单说明 从数据组织方法上看,主要有两种,一种是基于CHM,一种是直接基于点云. CHM实际上就是归一化的数字表面模型nDSM,实现方法为,建立二维规 ...

  8. 【论文速递】IJCV2022 - CRCNet:基于交叉参考和区域-全局条件网络的小样本分割

    [论文速递]IJCV2022 - CRCNet:基于交叉参考和区域-全局条件网络的小样本分割 [论文原文]:CRCNet: Few-shot Segmentation with Cross-Refer ...

  9. 软考高级系统架构设计师系列论文三十六:论基于构件的软件开发

    软考高级系统架构设计师系列论文三十六:论基于构件的软件开发 一.摘要 二.正文 三.总结 一.摘要 本文以我主持的某商业银行交易监控分析系统项目为实例,探讨了作为开发方公司基于构件技术开发项目碰到的问 ...

  10. 淘系技术发布业界首个基于神经渲染的3D建模产品Object Drawer,推理速度均提升10000倍...

    在China VR 2021大会上,阿里巴巴淘系技术发布了业界首个基于神经渲染的自研商品三维建模产品Object Drawer.目前,Object Drawer已经提供给部分天猫.淘宝商家使用,将在1 ...

最新文章

  1. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐
  2. redis布隆过滤器PHP,Redis 中的布隆过滤器
  3. 快速学习EndNote X7
  4. CF891C-Envy【可撤销并查集】
  5. JQ实现情人节表白程序
  6. 解释为脑瘫的那张图_Python GIL全局解释器锁详解(深度剖析)
  7. java 数据类型 string_java的基本数据类型和引用数据类型都有哪些,string属于什么类型...
  8. Oracle客户端tnsnames.ora连接配置
  9. loss函数之SoftMarginLoss
  10. go 函数末尾缺少返回值_伙计们,Go 并没有那么简单?你觉得呢
  11. Android实现语音识别代码
  12. Enterprise Architect 中文快速入门
  13. ASP.NET中Button控件的CommandName和CommandArgument属性用法
  14. mysql 支持嵌套查询吗_【转】MySql 嵌套查询
  15. import clip时Cannot re-initialize CUDA in forked subprocess
  16. CF Canada Cup 2016 D 优先队列
  17. python五角星符号怎么打出来_如何使用python输出连续星号?
  18. 云服务器有几种类型,一般要如何选购
  19. 【C#】VS编写简单的网游客户端
  20. vue移动端底部菜单tabbar

热门文章

  1. jQuery 属性操作 - addClass() 和 removeClass() 方法
  2. LWIP_STM32_ENC28J60_NETCONN_TCP_CLIENT(4)
  3. c++写一个类后编译发现class重定义
  4. bootstrap 树
  5. 关于动态数组指针操作的两个例子
  6. Altium Designer(二):规则设置
  7. 20190823 尚硅谷MySQL核心技术
  8. 精简ICO图标可减小EXE程序文件大小
  9. Scrapy框架学习(二)
  10. Prism6下的MEF:添加Logger