[NAACL19] 一个更好更快更强的序列标注成分句法分
|
这篇论文主要是在之前的那篇论文
Constituent Parsing as Sequence Labelinggodweiyang.com 基础上解决了如下三个问题:
本文提出的解决方法分别是:
三大问题以及解决方法过长短语预测的高错误率
由下面这张图可以看出,当
解决方法就是采用动态编码,如下图所示:
第一行是相对值编码,第二行是绝对值编码,之前文章都已经解释过了。第三行是结合了上面两种编码的动态编码,具体取值情况是大多数时候都还采用相对值编码,因为毕竟相对值编码空间比较小,可以适当缓解数据稀疏性。但是当满足如下两种情况的时候,就采用绝对值编码:
输出空间太大导致 label 稀疏性
这个问题主要是由于三元组
具体实现上,可以将任务 贪心解码导致的错误传播这个问题在基于贪心的方法中基本都存在,也就是所谓的一步错步步错,这里主要提出了两种解决方法。
辅助任务 辅助任务主要就是用来帮助主任务学习到一些不太容易学到的信息。这里才用了两个辅助任务,一个是在预测
对于不同的辅助任务,最后将他们的损失求和加到最终的损失函数中去:
策略梯度 这个方法可以从全局的角度来对模型进行优化。假设模型在 定义句法树的概率为每一步决策的概率之积:
所以模型最终就是要最大化如下的奖励:
按照梯度上升的方向更新参数
将
其中 具体实现的时候有好几个小 Tips。 第一个就是要将奖励减去一个 baseline,这里定义为模型直接根据贪心求得的句法树的 F1 值:
这么做的目的就是为了让奖励有正有负,不然全部都是正数的话,因为采样不可能全部采样到,可能会导致高概率的样本概率越来越高,而没有采样到的低概率样本可能奖励非常高,却因此概率越来越低。 第二个 Tip 就是加入熵作为正则项:
目的就是使概率尽量不要太小,不然的话采样数不够的话就有可能造成采样不到小概率的样本。 还有就是给策略加入噪声:
目的同样是加大概率,防止概率太接近于 0,当然这个可加可不加。。。 实验结果首先测试了不同设置的影响:
可以看出上面提到的几种方法对性能都有提升,其中采用动态编码、多任务(也就是减少输出空间)、辅助任务(主要是预测前一个 最终模型在测试集上取得了 90.6 的 F1 值,虽然不是很高,但比之前的序列标注模型提升还是不少。
最后再来看一下模型在负数预测上的准确率,可以看出有了非常大的提升:
总结这篇论文提出了不少的小 Tips 来提升序列模型的准确率,但是效果却还是远远低于 syntactic distances 那篇论文(F1 值 91.8),具体原因我也不得而知,我猜测跟树到序列映射编码关系可能不是特别大,可能还是跟序列建模有关,那篇论文的序列采用了两次 LSTM,中间还夹杂了一次 CNN 卷积操作。所以编码器的好坏还是直接决定了最后性能的好坏,怪不得 Elmo 和 Bert 的效果那么的突出。 |
时间:2019-04-01 19:21 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。