ACL2021 | 关键词生成任务新范式 - 把关键词生成看成集合预测问题

每天给你送来NLP技术干货!


来自:FundanNLP

e8d356af9e4bfbe287921fa5f0073c46.png

论文链接:https://arxiv.org/abs/2105.11134

代码链接:https://github.com/jiacheng-ye/kg_one2set


Background

什么是关键词生成任务

给定一篇源文档(比如论文的摘要),关键词预测任务就是希望能预测出一些表达文档重点信息的关键词,或者更准确的说是关键短语。关键词有两种类型:在文档里面的(Present Keyphrase)和不在文档里面的(Absent Keyphrase)。所以,任务的训练样本是, 其中是一个包含Present和Absent两种类型的关键词集合。下图展示了两种类型的关键词:

eaa385213d925369692bd28ea08155f4.png

  解决关键词生成比较常用的范式有One2One和One2Seq两种:

3682e4be5d266e24c23173fc9a66780f.png

One2One和One2Seq两种范式下训练样本的例子

  • One2One[1]:在One2One范式下,我们把训练样本是拆分成多个样本对,每个样本对就是源文档和一个对应的关键词。因为在训练的时候每次只有一个目标关键词作为监督,如果需要在测试阶段生成多个关键词,就需要用Beam Search来生成多个关键词(如[1]中Beam Size取了200)。这个范式有两个很大的问题:

    • 语义依赖:Beam Search生成的多个关键词之间也没有语义上的依赖性,可能生成语义重复的关键词。

    • 动态数量:Beam Search数量往往给定,即不能为不同源文档生成动态数量的关键词。

  • One2Seq[2]:为了解决One2One的语义依赖和动态数量这两个问题,有研究者提出一种One2Seq的范式,他把所有的关键词按照一个给定的顺序(比如一般就是Present在前,Absent在后)连起来作为训练样本,也即训练样本为。语义依赖问题通过看到前面预测关键词来实现,动态数量问题可以用最后的标签决定。

Motivation

从上述分析可以看出,One2Seq范式下引入了一个先验顺序函数,导致和原始的数据样本并不一致。这种预定义的顺序函数会有以下问题:

  • 其一,之前有研究者[3]发现不同的顺序函数会对结果有比较大的影响。尽管他们发现Appear-Ap策略(Present关键词按照在文章中出现的先后顺序以此排列,Absent关键词按照作者给的顺序连接到Present关键词序列后面)会相对比其他几种策略好一些。如果关键词有顺序的话,这种顺序可能也未必是最好的选择。

  • 其二,训练的时候引入预定的顺序函数很可能带来错误的偏置。如下图(a)所示,上面是目标序列(即),下面是预测的序列。尽管模型预测对了这两个关键词本身,但是由于顺序和给定的不一样,模型还是会有很大的loss,也就是这种先验顺序会干扰模型学习真正要学的东西。

这里可能有个疑问,那为什么不可以让模型学会这个顺序函数,这样也就不会预测出Topic Model在前,Deep Learning在后的情况了?当然,如果模型真的能学会,那自然是没有问题的,但是模型实际上很难学会,原因以下两点:

  • 一方面,训练集中不能保证都是Topic Model在前,Deep Learning在后,这可称之为多模式问题(Multi-Modality Problem)。这在其他任务,比如非自回归机器翻译以及对话的回复生成中也会遇到类似问题,模型很可能学到一个错误的中间状态,这一定程度上也会导致在One2Seq范式下容易预测出重复的关键词。

  • 另一方面,模型确实很难学这个顺序。比如后面的Absent关键词序列部分是按照作者给定的先后顺序连接的,而不同作者给的顺序依据也是不一样的,有的作者可能就是按照重要性给,有的就是按照技术、领域等Topic给,有的可能就是比较随意地给,那么这也就要求模型去拟合不同作者的这一特征,而这在没有作者信息的情况下是很难的(引入作者信息是一个方向)。

所以,既然这个顺序函数会带来那么多问题,而且更重要的是数据本身就是没有这个东西的,那我们能不能不引入顺序函数来进行训练和预测呢?

82d10a3269634cd98a6416c19d96c362.png

这也就引出了我们的做法,我们希望在训练和预测的时候都和顺序无关,而只关注在每个关键词本身的预测上,如上图(b)。

模型结构

在One2Set范式下,我们提出了SetTrans (Set prediction model based onTransformer) 模型,该模型模型主要解决以下问题:

  • 如何生成一个集合而不是一个序列?

  • 生成的集合和目标集合的loss怎么算?

  • 如何考虑到预测的依赖问题和动态数量问题?

5068cb86517e45c599bb59eec81960ac.png

如何生成一个集合而不是一个序列?

针对第一个问题,我们引入个控制编码(Control Code),每个控制编码对应生成一个集合元素,这样我们就生成了包含个关键词的集合。

生成的集合和目标集合的loss怎么算?

针对第二个问题,也就是给定包含个预测关键词的集合,如何与包含个关键词的目标集合计算loss。这里我们假设预定义的的取值始终大于等于(即统计数据集中文档的关键词最多有几个)。然后,我们用 元素加进中,使得两个集合元素数量相等,这样我们只需为他们进行最优的一对一匹配(匈牙利算法可解),然后匹配完之后就能计算loss了。其中,每个预测关键词与目标关键词的匹配得分可以定义为目标关键词在预测分布中的概率之和。

如何考虑到预测的依赖问题和动态数量问题?

针对第三个问题,依赖问题可以一定程度上在训练时让Control Code隐式学习到,动态数量问题可以通过去掉预测的元素解决。

此外,还有几个细节问题:

  • 由于匹配目标前是不知道Target是哪个的,于是只能自回归预测,但是开始阶段模型不会预测出<eos>,就是个冷启动的问题。

    • 这边令每个控制编码只预测步(如图中),然后用这个和每个Target关键词的前个算Score

  • 在匹配完之后,由于每个Control Code都只对应自回归成了个,如果直接给监督的话信息不完整,而且是一种Student-Forcing的形式,效果会很差(见消融实验倒数第二行)。

    • 这边选择在匹配完之后Teacher-Forcing地再过一遍算loss

  • 这边在匹配目标的时候Present和Absent两个集合的时候分开考虑(Separate Set Loss),也就是一半的Control Code只会和Present关键词做匹配,另一半的Control Code只会和Absent关键词做匹配。

    • 这样好处是让这两部分的Control Code学到Present和Absent预测中不同的偏置(Present部分的Control Code会更倾向于指导模型去Copy原文内容,Absent部分则倾向于指导模型自己归纳生成)。这可以看成是一种在输入端而不是和常见的在输出端做区分的Multi-Task。(见消融实验最后一行)

实验与分析

主实验

我们在KP20k数据集上做训练,并在KG任务5个标准测试上做测试,在Present和Absent预测上的主结果如下表所示,可以看到One2Set范式下的SetTrans模型相比One2Seq下的Transformer模型还是有一定的性能提升的。

0acc16919ebb5a98c787b8421fba802a.png

预测多样性

多样性体现在能预测更多而且重复率更低的关键词。重复率上的优势主要源自训练时匹配的二分特性。如模型图所示,第5个和第8个Control Code都指导生成了重复关键词“neural model”,但是由于一对一匹配的特征,只有一个会和目标中最接近的“neural network”做匹配,另一个只能和元素做匹配。那么当loss进行回传时,第5个和第8个Control Code会学到不要生成重复的关键词,同理,所有Control Code都朝不同的方向来指导模型生成多样的关键词。

5f1e4ce87230b29737aebcbe337c1007.png

消融实验

这里比较有意思的是去掉K-step Assign的情况,也就是按照One2Seq的顺序函数f进行顺序匹配。可以发现预测数量明显下降(如present关键词数量 5.10 -> 2.64),重复率明显上升(8% -> 26%),且重复率和Transformer几乎一致。

1725584b6147e41eef84b688e482dcbb.png

Control Code 分析

这里对学好的Control Code在测试集上的预测出Present关键词、Absent关键词的比例进行了统计(每个Control Code只会生成Present关键词、Absent关键词或者 元素),从上到下依次是去掉K-step Assign、K-step Assign+Single Set Loss以及K-step Assign+Separate Set Loss。主要有以下几点发现:

  • 去掉K-step Assign的情况下,仅前面少数几个Control Code能生成有效的关键词,后面都是预测的元素,而且通过前面的结果也可以发现,在只有5个左右Control Code有效的情况下还有26%的重复率,说明这些Control Code并不能学到语义上的信息

  • K-step Assign+Single Set Loss相比去掉K-step Assign,更多的Control Code可以来指导生成,但是由于Absent预测比较难,模型还是更倾向于预测Present关键词。

  • Separate Set Loss相比Single Set Loss能将Present和Absent分开来,不仅有助于两者预测地更准确(消融实验最后一行),也能预测更多的Absent关键词,说明这种输入端做Multi-Task的形式能让这两部分的Control Code一定程度上也能学到Present和Absent预测存在的偏置。

9e1218211832e0ffd7c5a7098b3d5e67.png

总结

我们提出了一种新的训练范式One2Set来去掉顺序函数带来的诸多问题。在此范式下,我们提出了模型SetTrans,其特点是能够预测更多、更准确而且重复率更低的关键词集合。同时,我们也通过大量实验对比了有顺序和没有顺序带来的影响。我们还发现SetTrans由于可以并行预测,在Inference效率上是Transfomer的6.44倍。

其他详细实验分析可移步原论文查看,点击左下角阅读原文即可获得。


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

bfeca4386b8714fb4c7e64bb1475fccb.png

记得备注呦

整理不易,还望给个在看!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值