论文赏析[ACL18]基于RNN和动态规划的线性时间成分句法分析(一)

简介: 好像已经很久没有看论文了呢,开学了一堆事情,以后还是要抽空阅读论文,保持一定的阅读量,并且不能光看最新的论文,还得去前人传统的方法中去寻找有没有能应用于深度学习的东西,说不定就发ACL了呢(手动滑稽)。论文地址:Linear-Time Constituency Parsing with RNNs and Dynamic Programming代码地址:github

介绍


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

  • 传统的基于转移的句法分析模型都是贪心解码,不能考虑到所有的状态空间,所以本文的模型采用beam search将状态空间提升到了指数级别。
  • 首次采用cube pruning将分析的时间复杂度降低到了 image.png 。
  • 采用max-violation损失函数代替原来的求和的损失函数,并且对cross-span的span进行了惩罚。
  • 在单模型上取得了最高的F1值。
  • 采用图结构的栈(GSS)代替了原来的stack,这样不需要时刻保存历史信息。

模型基础


基于span的转移系统

这个我已经在之前的文章

成分句法分析综述godweiyang.com


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

Bi-LSTM特征

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

动态规划


句法树得分

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

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

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

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

image.png

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

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

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

Beam Search和Cube Pruning

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

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

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

相关文章
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
1690 2
|
机器学习/深度学习 自然语言处理
不是RNN的锅!清华团队深入分析长上下文建模中的状态崩溃,Mamba作者点赞
清华大学团队发表论文,深入分析RNN在长上下文建模中的状态崩溃现象,并提出四种缓解方法:减少记忆与增加遗忘、状态归一化、滑动窗口机制及训练更长序列。实验表明,这些方法显著提升Mamba-2模型处理超过1M tokens的能力。尽管存在局限性,该研究为RNN长上下文建模提供了新思路,得到Mamba作者认可。
482 6
|
机器学习/深度学习 测试技术 TensorFlow
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch搭建循环神经网络(RNN)进行文本分类、预测及损失分析(对不同国家的语言单词和姓氏进行分类,附源码和数据集)
PyTorch搭建循环神经网络(RNN)进行文本分类、预测及损失分析(对不同国家的语言单词和姓氏进行分类,附源码和数据集)
916 2
|
机器学习/深度学习 传感器 自然语言处理
R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
|
人工智能 人机交互 语音技术
INTERSPEECH2023论文解读|BAT一种低延迟低内存消耗的RNN-T模型
INTERSPEECH2023论文解读|BAT一种低延迟低内存消耗的RNN-T模型
975 0
|
机器学习/深度学习 存储 测试技术
Transformer的潜在竞争对手QRNN论文解读,训练更快的RNN
Transformer的潜在竞争对手QRNN论文解读,训练更快的RNN
632 0
Transformer的潜在竞争对手QRNN论文解读,训练更快的RNN
|
机器学习/深度学习 自然语言处理 算法
论文赏析[NAACL16]RNN文法(二)
论文赏析[NAACL16]RNN文法 论文地址:Recurrent Neural Network Grammars 代码地址:github
419 0
论文赏析[NAACL16]RNN文法(二)
|
机器学习/深度学习 存储 算法
图灵机就是深度学习最热循环神经网络RNN?1996年论文就已证明(2)
图灵机就是深度学习最热循环神经网络RNN?1996年论文就已证明
352 0
|
机器学习/深度学习 存储 人工智能
图灵机就是深度学习最热循环神经网络RNN?1996年论文就已证明(1)
图灵机就是深度学习最热循环神经网络RNN?1996年论文就已证明
408 0

热门文章

最新文章