前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACL2021 | 把关键词生成看成集合预测问题

ACL2021 | 把关键词生成看成集合预测问题

作者头像
NewBeeNLP
发布2021-07-28 10:05:14
6400
发布2021-07-28 10:05:14
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

今天来看看 ACL2021 「关键词生成」进展

  • 论文地址:https://arxiv.org/abs/2105.11134
  • 代码地址:https://github.com/jiacheng-ye/kg_one2set

背景介绍

这里简单介绍一下关键词生成任务的形式。给一篇源文档(比如论文的摘要),关键词预测任务就是希望能预测出一些表达文档重点信息的关键词,或者更准确的说是关键短语。

关键词有两种类型,分别是在文档里面的(present keyphrase)和不在文档里面的 (absent keyphrase)两种类型。所以,任务的训练样本是

(\mathbf{x}, \mathcal{Y})

\mathcal{Y}

是一个包含presentabsent两种类型的关键词集合。图1展示了两种类型的关键词:

图1:present和absent关键词的例子

之前做关键词生成常用的有One2OneOne2Seq两种范式:

One2One

One2One范式下,我们把训练样本是

(\mathbf{x}, \mathcal{Y})

拆分成多个样本对

\left\{\left(\mathbf{x},\mathbf{y}^{i}\right)\right\}_{i=1, \ldots,|\mathcal{Y}|}

,每个样本对就是源文档

\mathbf{x}

和一个对应的关键词

\mathbf{y}^{i}

。因为在训练的时候每次只有一个目标关键词作为监督,如果需要在测试阶段生成多个关键词,就需要用beam search来生成多个关键词(如[1]中beam size取了200)。

这个范式有两个很大的问题:

  • 语义依赖:beam search生成的多个关键词之间也没有语义上的依赖性,可能生成语义重复的关键词。
  • 动态数量:beam search数量往往给定,即不能为不同源文档 x 生成动态数量的关键词
One2Seq

为了解决One2One的语义依赖和动态数量这两个问题,研究者提出一种One2Seq的范式,他把所有的关键词按照一个给定的顺序(比如一般就是present在前,absent在后)连起来作为训练样本,也即训练样本为

(\mathbf{x}, f(\mathcal{Y}))

。语义依赖问题通过看到前面预测关键词来实现,动态数量问题可以用最后的eos标签决定。

上面两种范式下的的训练样本举例图2所示。

图2:One2One和One2Seq示例

论文动机

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

  • 一方面,之前有研究者[3]发现不同的顺序函数会对结果有比较大的影响。尽管他们发现Appear-Ap策略(present关键词按照在文章中出现的先后顺序以此排列,absent关键词按照作者给的顺序连接到present关键词序列后面)会相对比其他几种策略好一些。如果关键词有顺序的话,这种顺序可能也未必是最好的选择。
  • 另一方面,训练的时候引入预定的顺序函数很可能带来错误的偏置。如图3(a)所示,上面是目标序列(即
f(\mathcal{Y})

),下面是预测的序列。尽管模型预测对了这两个关键词本身,但是由于顺序和给定的不一样,模型还是会有很大的loss,也就是这种先验顺序会干扰模型学习真正要学的东西。

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

  • 一方面,训练集中不能保证都是topic model在前,deep learning在后,这可称之为多模式问题(multi-modality problem)。这在其他任务,比如非自回归机器翻译以及对话的回复生成中也会遇到类似问题,模型很可能学到一个错误的中间状态。
  • 另一方面,模型确实很难学这个顺序。比如后面的absent关键词序列部分是按照作者给定的先后顺序连接的,而不同作者给的顺序依据也是不一样的,有的作者可能就是按照重要性给,有的就是按照技术、领域等topic给,有的可能就是比较随意地给,那么这也就要求模型去拟合不同作者的这一特征,而这在没有作者信息的情况下是很难的(引入作者信息是一个方向)。

图3:One2Seq与One2Set的对比

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

这也就引出了我们的做法,我们希望在训练和预测的时候都和顺序无关,而只关注在每个关键词本身上。如图3(b),简单来说,在One2Set范式下,模型的训练样本就是原样本

(\mathbf{x}, \mathcal{Y})

模型介绍

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

  • 如何生成一个集合而不是一个序列?
  • 生成的集合和目标集合的loss怎么算?
  • 如何考虑到预测的依赖问题和动态数量问题?

图4:模型结构图,图中展示了N=8,K=2的情况

为了解决第一个问题,我们引入

N

个控制编码(Control Code),每个控制编码对应生成一个集合元素,这样我们就生成了包含

N

个关键词的集合。

为了解决第二个问题,也就是给定包含

N

个预测关键词的集合,如何与包含

M

个关键词的目标集合计算loss。这里我们假设预定义的

N

的取值始终大于等于

M

(即统计数据集中文档的关键词最多有几个)。然后,我们用

\varnothing

元素加进

M

中,使得两个集合元素数量相等,这样我们只需为他们进行最优的一对一匹配(匈牙利算法可解),然后匹配完之后就能计算loss了。其中,每个预测关键词与目标关键词的匹配得分可以定义为目标关键词在预测分布中的概率之和。

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

\varnothing

元素解决。

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

  • 由于匹配目标前是不知道target是哪个的,于是只能自回归预测,但是开始阶段模型不会预测出<eos>,就是个冷启动的问题。这边令每个控制编码只预测
K

步(如图中

K=2

),然后用这

K

个和每个target关键词的前

K

个算score。

  • 在匹配完之后,由于每个control code都只对应自回归成了
K

个,如果直接给监督的话信息不完整,而且是一种student-forcing的形式,效果会很差(见消融实验倒数第二行)。这边选择在匹配完之后teacher-forcing地再过一遍算loss。

  • 这边在匹配目标的时候presentabsent两个集合的时候分开考虑(Separate Set Loss),也就是一半的control code只会和present关键词做匹配,另一半的control code只会和absent关键词做匹配。这样好处是让这两部分的control code学到presentabsent预测中不同的偏置(present部分的control code会更倾向于指导模型去copy原文内容,absent部分则倾向于指导模型自己归纳生成)。这可以看成是一种在输入端而不是和常见的在输出端做区分的multi-task。(见消融实验最后一行)

实验与分析

主实验

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

表1:Present和Absent关键词预测结果

预测多样性

多样性体现在能预测更多而且重复率更低的关键词。重复率上的优势主要源自训练时匹配的二分特性。如模型图所示,第5个和第8个control code都指导生成了重复关键词“neural model”,但是由于一对一匹配的特征,只有一个会和目标中最接近的“neural network”做匹配,另一个只能和

\varnothing

元素做匹配。那么当loss进行回传时,第5个和第8个control code会学到不要生成重复的关键词,同理,所有control code都朝不同的方向来指导模型生成多样的关键词。

表2:预测数量和重复率的对比

消融实验

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

表3:消融实验

Control Code分析

这里对学好的Control Code在测试集上的预测出present关键词、absent关键词的比例进行了统计(每个Control Code只会生成present关键词、absent关键词或者

\varnothing

元素),从上到下依次是 去掉K-step assignK-step assign+Single Set Loss以及K-step assign+Separate Set Loss。主要有以下几点发现:

  • 去掉K-step assign的情况下,仅前面少数几个Control Code能生成有效的关键词,后面都是预测的
\varnothing

元素,而且通过前面的结果也可以发现,在只有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能将presentabsent分开来,不仅有助于两者预测地更准确(消融实验最后一行),也能预测更多的absent关键词,说明这种输入端做multi-task的形式能让这两部分的Control Code一定程度上也能学到presentabsent预测存在的偏置。

图5:不同模型下control code预测类型的统计对比,从上到下以此是 去掉K-step assign、K-step assign+Single Set Loss以及K-step assign+Separate Set Loss

总结

做个简单的总结,我们提出了一种新的训练范式One2Set来去掉顺序函数带来的诸多问题。在此范式下,我们提出了模型SetTrans,其特点是能够预测更多、更准确而且重复率更低的关键词集合。同时,我们也通过大量实验对比了顺序和没有顺序的结果,从而来证实One2Seq中的顺序函数带来的影响。我们还发现 SetTrans由于可以并行预测,在 inference 效率上是Transfomer的6.44倍,其他实验分析可移步论文[1]查看。

欢迎大家批评指正~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
    • One2One
      • One2Seq
      • 论文动机
      • 模型介绍
      • 实验与分析
        • 主实验
          • 预测多样性
            • 消融实验
              • Control Code分析
              • 总结
              相关产品与服务
              机器翻译
              机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档