原文链接:

Better, Faster, Stronger Sequence Tagging Constituent Parsers

为了看懂论文里的策略梯度,又去把强化学习看了一遍。。。

论文地址:

Better, Faster, Stronger Sequence Tagging Constituent Parsers

介绍

这篇论文主要是在之前的那篇论文

Constituent Parsing as Sequence Labeling

基础上解决了如下三个问题:

  • 太长的短语预测错误率高。
  • 输出空间太大导致label稀疏性。
  • 贪心解码导致的错误传播。

本文提出的解决方法分别是:

  • 采用融合了相对编码和绝对编码的动态编码。
  • 将预测任务分解为多个子任务。
  • 采用辅助任务和策略梯度。

三大问题以及解决方法

过长短语预测的高错误率

由下面这张图可以看出,当 太小时,准确率就会大幅下降。这个问题主要体现在过长短语的闭合上,右括号的预测尤其困难。其实这也跟数据稀疏性有很大关系,训练集中过长短语毕竟占少数。

解决方法就是采用动态编码,如下图所示:

第一行是相对值编码,第二行是绝对值编码,之前文章都已经解释过了。第三行是结合了上面两种编码的动态编码,具体取值情况是大多数时候都还采用相对值编码,因为毕竟相对值编码空间比较小,可以适当缓解数据稀疏性。但是当满足如下两种情况的时候,就采用绝对值编码:

  • 绝对值 ,也就是说CA的个数不能超过3个,这样也是为了降低数据的稀疏性。
  • 相对值 ,也就是说将上图中准确率比较低的那些负数值全部用绝对值替代了,在句法树中表现为 所在的子树比 低两层以上。

输出空间太大导致label稀疏性

这个问题主要是由于三元组 太稀疏了导致的。假设 ,那么这个三元组的状态空间是 ,可以通过将三元组分解为三个不同的子任务将复杂度降低为 。最后的损失函数定义为三个子任务的损失之和:

具体实现上,可以将任务 的输出给任务 作为输入。

贪心解码导致的错误传播

这个问题在基于贪心的方法中基本都存在,也就是所谓的一步错步步错,这里主要提出了两种解决方法。

辅助任务 辅助任务主要就是用来帮助主任务学习到一些不太容易学到的信息。这里才用了两个辅助任务,一个是在预测 的同时再预测一个 ,这样就能往后多预测一步,适当的减少了贪心的影响。另一个方法就是将之前博客写到的句法距离(syntactic distances)加入到模型中一起预测:

对于不同的辅助任务,最后将他们的损失求和加到最终的损失函数中去:

策略梯度 这个方法可以从全局的角度来对模型进行优化。假设模型在 时刻的状态为 ,输出标签为 ,那么模型选择 的概率定义为策略 ,模型最终可以获得的奖励为 ,定义为句法树的F1值。

定义句法树的概率为每一步决策的概率之积:

所以模型最终就是要最大化如下的奖励:

按照梯度上升的方向更新参数 ,求梯度可得:

代入可得:

其中 是根据分布 采样出来的 棵句法树的奖励。

具体实现的时候有好几个小Tips。

第一个就是要将奖励减去一个baseline,这里定义为模型直接根据贪心求得的句法树的F1值:

这么做的目的就是为了让奖励有正有负,不然全部都是正数的话,因为采样不可能全部采样到,可能会导致高概率的样本概率越来越高,而没有采样到的低概率样本可能奖励非常高,却因此概率越来越低。

第二个Tip就是加入熵作为正则项:

目的就是使概率尽量不要太小,不然的话采样数不够的话就有可能造成采样不到小概率的样本。

还有就是给策略加入噪声:

目的同样是加大概率,防止概率太接近于0,当然这个可加可不加。。。

实验结果

首先测试了不同设置的影响:

可以看出上面提到的几种方法对性能都有提升,其中采用动态编码、多任务(也就是减少输出空间)、辅助任务(主要是预测前一个 )还有策略梯度可以获得最好的结果。

最终模型在测试集上取得了90.6的F1值,虽然不是很高,但比之前的序列标注模型提升还是不少。

最后再来看一下模型在负数预测上的准确率,可以看出有了非常大的提升:

总结

这篇论文提出了不少的小Tips来提升序列模型的准确率,但是效果却还是远远低于syntactic distances那篇论文(F1值91.8),具体原因我也不得而知,我猜测跟树到序列映射编码关系可能不是特别大,可能还是跟序列建模有关,那篇论文的序列采用了两次LSTM,中间还夹杂了一次CNN卷积操作。所以编码器的好坏还是直接决定了最后性能的好坏,怪不得Elmo和Bert的效果那么的突出。

[NAACL19]一个更好更快更强的序列标注成分句法分析器相关推荐

  1. 56.4 AP!超越YOLOv4,更快更强的CenterNet2来了!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 代码:https://github.com/xingyizhou/CenterNet2 论文:http ...

  2. 极智Paper | YOLOv7 更高 更快 更强

      欢迎关注我的公众号 [极智视界],获取我的更多笔记分享   大家好,我是极智视界,本文解读一下 更高.更快.更强的 YOLOv7:Trainable bag-of-freebies sets ne ...

  3. 清华大学丁霄汉:深度网络重参数化——让你的模型更快更强

    不到现场,照样看最干货的学术报告! 嗨,大家好.这里是学术报告专栏,读芯术小编不定期挑选并亲自跑会,为大家奉献科技领域最优秀的学术报告,为同学们记录报告干货,并想方设法搞到一手的PPT和现场视频--足 ...

  4. 评论回复功能 asp.net_一键抠图 更快 更强!六月新版 PS 2020 21.2 新增功能测试报告...

    一键抠图 更快 更强!六月新版 PS 2020 21.2 新增功能测试报告! 紫枫前几天发布了 Adobe Photoshop 2020 21.2.0.225 最新版本,今天来说说这个版本的新增功能. ...

  5. 【Python并行计算】- Dask 让你的python更快更强

    [Python并行计算]- Dask 让你的python更快更强 Dask(https://docs.dask.org/en/latest/) 是一个灵活的python并行/分布式计算的框架. 类似的 ...

  6. 更快更强更清晰 苹果发布The New iPad

    更快更强更清晰 苹果发布The New iPad 北京时间3月8日凌晨两点,全球IT目光聚焦美国旧金山,在芳草地艺术中心,苹果召开新品发布会,正式推出了第三代iPad平板电脑:The New iPad ...

  7. 不是更快更强,而是更加自如——2015年终总结

    此前,我一直感觉这个世界有些不对劲儿,2015年9月之后,这种感觉基本消失了.我确定了一些之前自认为是正确,但是别人多数不会干的事,比如:在这个急躁的世界上无私的帮助别人:切断跟不靠谱但是所谓社会地位 ...

  8. 更高更快更强!“游戏引擎”发展漫谈

    作者:紫竹_Mydrivers [1.导读] 游戏引擎(Game Engine)是什么?大多数人给出的解释都是基于engine的英文翻译,将游戏引擎等同于汽车中的引擎(发动机),再好一些的解释成动力, ...

  9. 更高更快更强 游戏引擎发展漫谈

    [1.导读] 游戏引擎(Game Engine)是什么?大多数人给出的解释都是基于engine的英文翻译,将游戏引擎等同于汽车中的引擎(发动机),再好一些的解释成动力,这些解释都对,但是动力只说并不全 ...

  10. Chaos 解密:如何使 Chaos 更快更强

    本演讲介绍如何通过英特尔和 Epic Games 的技术合作使得虚幻引擎的最新物理破环系统 Chaos 更快更强.展示了曾经在 GDC 2019 演示过的示例,并解析示例背后所使用的开发工具及技术,从 ...

最新文章

  1. 汇编语言reg和sreg bp的介绍
  2. 甲骨文推出低成本高速公共与混合云方案,矛头直指AWS
  3. Linux下MySQL C API简单示例
  4. Python3数字格式化代码示例
  5. Python如何嵌入C/C++进行开发
  6. DOM树和Render树的创建
  7. 把C#.NET程序移植到DB2上的经验浅谈(C#连接DB2可以用IBM.Data.DB2.dll)
  8. ssl初一组周六模拟赛【2018.5.19】
  9. 数据科学 IPython 笔记本 8.4 简单的折线图
  10. 虎牙被抬员工当事人再发声;淘宝回应网店客服“看见”用户未发送内容;Python 3.9.2 发布 | 极客头条...
  11. ios手机游戏 带你体验拉斯维加斯的疯狂
  12. 数字图像处理实践(二)
  13. 操作系统概念:系统引导过程、引导程序、固件
  14. 微服务网关(一)微服务的选择以及网关的功能
  15. 医院信息化服务器配置,医院信息化建设方案(完整).doc
  16. 基本技能 100316
  17. 景嘉微变更会计师事务所引发投资者担忧
  18. windows10只显示图标不显示缩略图
  19. 转大型分布式网站术语浅析
  20. ConcurrentHashMap源码解析

热门文章

  1. 面向对象---大纲笔记
  2. 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图
  3. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  4. C#实现--单链表(链式)
  5. 跟着 Microsoft 跑!
  6. Flash Memory(一)
  7. Linux驱动模型解析bus之platform bus
  8. poj 1269 Intersecting Lines
  9. java对获取的字节数组进行处理
  10. C#中的委托与事件 笔记