原文链接:

Linear-Time Constituency Parsing with RNNs and Dynamic Programming

好像已经很久没有看论文了呢,开学了一堆事情,以后还是要抽空阅读论文,保持一定的阅读量,并且不能光看最新的论文,还得去前人传统的方法中去寻找有没有能应用于深度学习的东西,说不定就发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的转移系统

这个我已经在之前的文章

成分句法分析综述

中详细阐述过了。核心思想就是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. 时间窗口算法用matlab,一种基于动态规划算法的时间窗口相关的参与者选择方法与流程...

    本发明涉及一种移动群智感知中时间窗口相关的参与者选择方法,特别地,涉及一种基于动态规划算法的时间窗口相关的参与者选择方法. 背景技术: 在移动群智感知网络中,智能设备中嵌入了麦克风.相机.温度传感器. ...

  2. 算法模板:动态规划之线性DP【沈七】

    算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...

  3. 【NLP】seq2seq 由浅入深——基于Rnn和Cnn的处理方式

    seq2seq seq2seq最初是google2014年在<Sequence to Sequence Learning with Neural Networks>提出的,简单的说就是一种 ...

  4. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  5. 线性时间查找固定频率的元素

    转自:http://blog.ibread.net/467/linear-time-iceberg-query-algorithm/ 一.从面试题开始 在进入到枯燥的正文之前,先来看一道据说在很多面试 ...

  6. 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现

    计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 算法思想 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将 ...

  7. 基于RNN和CTC的语音识别模型,探索语境偏移解决之道

    摘要:在本文介绍的工作中,我们展示了一个基于RNN和CTC的语音识别模型,在这个模型中,基于WFST的解码能够有效地融合词典和语言模型. 本文分享自华为云社区<语境偏移如何解决?专有领域端到端A ...

  8. 基于多任务学习的快件送达时间预测方法

    1.文章信息 文章题目为<基于多任务学习的快件送达时间预测方法>,发表在计算机工程期刊上的一篇有关多任务学习预测的文章. 2.摘要 快件送达时间预测是物流领域中一项至关重要的服务.准确地预 ...

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

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

  10. Pytorch实战——基于RNN的新闻分类

    目录 一.项目介绍 二.基于RNN的新闻分类 Step1 加载数据集 Step2 分词和构建词汇表 Step3 构建数据加载器 dataloader Step4 定义神经网络模型 Step5 定义模型 ...

最新文章

  1. C语言解析pcap文件得到HTTP信息实例(原创,附源码)
  2. epoll/select
  3. 神经网络的设计与分析之概述
  4. Foundation框架介绍
  5. win11什么时候发布的_2021年初级会计师考试大纲什么时候发布?
  6. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例
  7. cannot find Toolkit in /usr/local/cuda-8.0
  8. 过了双十一之后的你。。| 今日最佳
  9. 计算凸多边形面积的算法
  10. ubuntu使用问题与解决记录[持续更新]
  11. 某度质量部测试开发面试题2(未完待续)
  12. Unity中 创建射线的两种方法
  13. 服务器拒绝mac访问共享文件,Mac共享文件连接失败怎么办?Mac无法访问打开共享文件解决方法...
  14. stm32开发环境:vs201x+visualGDB+cubemx开发stm32程序
  15. DiffuseBumpCutout‘: invalid subscript ‘boxMax‘ at line 151
  16. 【第1章】凸集——几种重要的凸集
  17. SVG排版公众号文章『CSS滤色混合模式』模板代码
  18. 必须注销计算机才能应用这些更改,Win10不用注销电脑就可以实现切换开始菜单/屏幕的方法...
  19. 数据库各种锁的简单理解(转自口渴的火麒麟)
  20. cmd 删除文件和文件夹

热门文章

  1. selenium webdriver学习(一)------------快速开始(转载JARVI)
  2. The command (dfs.browser.action.delete) is undefined 解决Hadoop Eclipse插件报错
  3. Android 使用WakeLock
  4. ByteBuffer分散和聚集的应用场景
  5. 模块电源(三):PCB Layout
  6. HTML CSS设计与构建网站
  7. P1038 神经网络[拓扑]
  8. Linux命令行操作基础练习
  9. java学习日记-基础-列出2~100内的素数
  10. 日常邮件用语(一)网摘学习