原文链接:

Linear-Time Constituency Parsing with RNNs and Dynamic Programminggodweiyang.com

好像已经很久没有看论文了呢,开学了一堆事情,以后还是要抽空阅读论文,保持一定的阅读量,并且不能光看最新的论文,还得去前人传统的方法中去寻找有没有能应用于深度学习的东西,说不定就发ACL了呢(手动滑稽)。

论文地址:Linear-Time Constituency Parsing with RNNs and Dynamic Programming

代码地址:github

介绍

这次要介绍的论文是huang liang发表在ACL18的一篇短文,提出了一个基于转移系统的线性时间句法分析器。本文的主要贡献点主要有如下几点:

  • 传统的基于转移的句法分析模型都是贪心解码,不能考虑到所有的状态空间,所以本文的模型采用beam search将状态空间提升到了指数级别。

  • 首次采用cube pruning将分析的时间复杂度降低到了  。

  • 采用max-violation损失函数代替原来的求和的损失函数,并且对cross-span的span进行了惩罚。

  • 在单模型上取得了最高的F1值。

  • 采用图结构的栈(GSS)代替了原来的stack,这样不需要时刻保存历史信息。

模型基础

基于span的转移系统

这个我已经在之前的文章

成分句法分析综述godweiyang.com

中详细阐述过了。核心思想就是stack里面保存的不再是短语结构树,而是span的左右边界下标  ,初始时stack里面是  ,终止状态栈里是  ,SHIFT之后栈顶变为  ,REDUCE之后栈顶变为  (假设之前栈顶两个元素是  和  )。

Bi-LSTM特征

状态转移时用双向LSTM两端的差值计算每个span的表示,然后计算出得分,用来预测action。

动态规划

句法树得分

还是和之前chart-based模型一样,用每个span的label得分之和作为句法树的总得分。

图结构栈(Graph-Struct Stack, GSS)

因为要采用动态规划来枚举每个时刻所有的状态,不是用普通的stack,使用GSS来保存每个时刻的状态。GSS每个时刻只需要保存栈顶的span就行了,假设为  。如果action是SHIFT,那么下一步就变成了  ,如果action是REDUCE,那么还需要知道栈顶第二个元素是什么。因为考虑到了所有的状态空间,所以所有的  都是有可能的。

GSS的具体结构如下图所示:

每个时刻的状态仅用一个span表示,在具体实现的时候,每个span还保存了一个span指针数组,指向它前面所有可能的span,还保存了当前span以及之前所有span的分数之和  和当前span子树的分数之和  。每个状态还保存了一个时刻标记  ,易知一共有  个时刻。

当采取SHIFT动作时,状态变为了  ,并且新的span  的指针数组中新增加一个span也就是  。prefix分数变为  ,其中  是span  的最高label得分,而inside分数就是span  的分数  。

当采取REDUCE动作时,枚举span  指针数组中所有的前一个span  ,然后合并成一个span  ,prefix分数变为  ,其中  就是span  的最高label得分,inside分数变为了  。实际代码实现中,REDUCE完了后,span  的指针数组要更新为span  的指针数组。

Beam Search和Cube Pruning

在每个时刻,只保存prefix得分最高的前b个span状态,这样时间复杂度可以降为  ,但是  相对于句子长度来说还是太大了,所以采用cube pruning继续降到  。

cube pruning原理是这样的:普通的beam search每个时刻枚举至多b个span,每个span和之前的至多b个span结合,所以一共最多产生  个span。

而cube pruning在每个时刻都建立一个堆,首先用上一个时刻的beam里的b个span,来产生b个SHIFT的span,送入堆里。理论上来说还应该产生至多  个REDUCE的span,但是在这里对于每个span,只取它的指针数组里得分最高的那个span,来和它结合产生新的span,送入堆里。然后在产生好的堆里,每次取出得分最高的span,出堆,如果它是REDUCE得到的span,那么就继续按照它的指针数组得分从高到低顺序产生一个span,REDUCE完之后送入堆里。依次下去,直到出栈了b个span为止。

训练

还是使用max-margin loss来训练,但是有几点小小的改进。

cross-span损失

以往的损失函数里有个  ,衡量的是预测树和标准树不同的span的数量。但是这有个问题,因为用了隐式二叉化,所以在预测树里存在label为空的情况。如果这个span在标准树中label也是空,那么原来的损失就不惩罚这一项了,但是要考虑到如果这个span在标准树中与某个标准的span产生了交叉,那么它根本就不可能是对的,也得进行惩罚。

max violation updates

这是huang liang在2012提出来的,其实就是计算出每个时刻预测得分和标准得分的差距,然后取差距最大的那个时刻的得分差距作为最终的损失函数,之前都是用每个时刻得分差距之和来作为损失函数的。

实验

下图是不同的beam大小对不同长度句子分析速度的影响:

最终综合考虑速度和准确率,选择beam大小为20。

最后是beam-span模型在PTB测试集上的准确率,在单模型上取得了最好的结果:

总结

这篇论文是短论文,所以相比之下创新没有那么的大吧,主要还是速度上比chart-based有了提升,准确率上比普通的转移系统有了提升,另外还提出了几点小的改进吧,例如cross-span问题、max-violation损失之类的,转移系统也改成了适合用来进行beam search的GSS,为了进一步加快速度,还用了cube剪枝。

这么多改进其实个人感觉也是影响不大的,不是很通用,cross-span和max-violation损失可以考虑拿来用一下。下一步的工作还是考虑如何增加特征表示、加入头结点之类的吧。

论文赏析[ACL18]基于RNN和动态规划的线性时间成分句法分析相关推荐

  1. 论文浅尝 | 基于RNN与相似矩阵CNN的知识库问答

    链接:https://arxiv.org/pdf/1804.03317.pdf 概述 当前大部分的 kbqa 方法为将 kb facts 与 question 映射到同一个向量空间上,然后计算相似性. ...

  2. 电磁噪声论文赏析_03基于多向电磁力的永磁同步电机电磁噪声分析

    基于多向电磁力的永磁同步电机电磁噪声分析 王宇 写在前面: 这篇论文研究重点在电磁力上,最后的解决办法侧重于电机结构的设计. 内容: 发现的问题: 别人的研究主要研究径向电磁力和定子结构参数对电机振动 ...

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

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

  4. 基于RNN的NLP机器翻译深度学习课程 | 附实战代码

    作者 | 小宋是呢 来源 | CSDN博客 深度学习用的有一年多了,最近开始NLP自然处理方面的研发.刚好趁着这个机会写一系列 NLP 机器翻译深度学习实战课程. 本系列课程将从原理讲解与数据处理深入 ...

  5. 论文浅尝 | 基于神经网络的知识推理

    本文转载自公众号:PaperWeekly. 论文笔记来自 PaperWeekly 社区用户 @britin.本文对基于 RNN 的从大规模知识库中进行推理进行了精度和可操作性的改善,提出的模型使用单个 ...

  6. 【论文复现】使用RNN进行文本分类

    写在前面 这是文本分类任务的第二个系列----基于RNN的文本分类实现(Text RNN) 复现的论文是2016年复旦大学IJCAI 上的发表的关于循环神经网络在多任务文本分类上的应用:Recurre ...

  7. 论文阅读:基于多模态词向量的语句距离计算方法

    论文信息 华阳. 基于多模态词向量的语句距离计算方法[D].哈尔滨工业大学,2018. 1.主要工作 简述语句间的距离问题:自然语言处理任务是度量文本间的距离:不同阶段语言学习的难度可以抽象为距离,本 ...

  8. 基于RNN的序列化推荐系统总结

    嘿,记得给"机器学习与推荐算法"添加星标 作者 | 阳光明媚 单位 | 华东师范大学 方向 | 推荐系统 本文介绍两篇基于RNN的用户序列行为建模的经典论文,原文地址: 1. Se ...

  9. [论文阅读] (26) 基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例

    <娜璋带你读论文>系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢.由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学 ...

  10. 论文笔记:基于深度学习的遥感影像变化检测综述

    论文主要信息 本篇博文主要是对该论文进行总结和翻译,如有错漏,欢迎指出.(目前仅对有监督学习部分进行了整理) 标题:Deep learning for change detection in remo ...

最新文章

  1. 2022-2028年中国刀具行业投资分析及前景预测报告
  2. 利用cmake查看OpenCV的源码的方法
  3. 【Hadoop】HDFS客户端开发示例
  4. boost::reverse_graph用法的测试程序
  5. Linq Group By 注意点
  6. 开发之痛:稳定的测试环境,怎么就那么难
  7. 电商巨头Shopify 两名员工被指窃取客户交易详情
  8. 论文笔记-Leverage Lexical Knowledge for Chinese Named Entity Recognition via Collaborative Graph Network
  9. Netty内存池泄漏问题
  10. java案例代码2-素数判断测试
  11. 《数据挖掘概念与技术》读书笔记(一)
  12. php写猴子搬香蕉问题,世界500强企业面试题:猴子吃香蕉
  13. CGI的介绍及简单应用
  14. Linux vi/vim 中的一些技巧
  15. pycharm与python的区别_python与pycharm有何区别
  16. 性能测试连载 (8)-jmeter 实战分析并发、RPS、RT 公式换算
  17. 调用系统安装软件时出现“解析软件包时出现问题”
  18. 到底要不要在office/wps平台上做开发
  19. QQ跳转浏览器html源码,手机QQ打开网址提示跳转浏览器 源代码分享
  20. 超低配置机器无盘网吧的安装方法(转)

热门文章

  1. table内容保存到Excel中
  2. chromium笔记目录
  3. java day19【File类、递归】
  4. Jenkins+码云 搭建持续集成环境
  5. C#图解教程 第二十四章 反射和特性
  6. zabbix自定义监控nginx
  7. python中的ftplib模块
  8. tomcat 在linux下的关闭问题
  9. HTML中行内元素与块级元素的区别:
  10. Mysql分页之limit用法与limit优化