问题生成任务简单来说就是给定一篇文章passage和一个对应的答案answer来自动生成一个模型,它的应用场景也非常的多,笔者之前也写过一篇有关问题生成的文章,感兴趣的小伙伴可以看看:
QA4QG: 一个多跳问题生成任务模型:https://zhuanlan.zhihu.com/p/467842564
今天要介绍的这篇paper是基于预训练模型做的,不过它的发力点是说之前很多基于预训练模型做的工作都没有考虑文章结构,为此作者针对性的提出设计了两个模块来解决,最后在SQuAD数据集上取得了很好的效果
论文链接:https://arxiv.org/pdf/2209.04179.pdf
在正式介绍本文方法之前,先来看两个概念,一个是Self-Attention,一个是ProphetNet。
我们知道预训练模型的架构就是transformer,而其最基本的就是Self-Attention,相信大家也比较熟悉,具体公式就是:
这里之所以老生常谈的拿出来这个公式,是因为后边作者提出的方法就是在这个基础上做了一些改动。
另一个需要提前知道的就是ProphetNet,这也是一个问题生成的模型,它的看点在于每一步step预测n个tokens,而不是一个token,该模型是一个很强的基线,感兴趣的小伙伴也可以去看看这篇论文:
https://aclanthology.org/2020.findings-emnlp.217/
总体框架:
首先定义一下变量:假设文章passage、问题question和答案answer 分别是P、Q和A,那么问题生成任务其实就是:
下面我们来分别细看作者的两个设计
相比于传统的Self-Attention,作者在softmax这里多设计了一个 如下:
而 是一个 的矩阵,其中 是预训练模型当前输入的长度,而其中的每一个元素 代表着token 到 token 的偏好,其实就是类似Self-Attention中计算当前某两个token的对齐分数。
在上面的公式中有两个参数,首先第一个是 ,假设当前答案这个span对应的启始和结束位分别是 和 ,那么:
可以看到 其实就是当前答案所在文章的中心位置。
是一个标准差,具体的 是一个窗口即围绕在 旁边的一个窗口,而$\sigma {i}^{2} D{i} D_{i} $的大小如下:
其中 就是一个松弛变量,将最终的结果缩放到:0到输入长度之间。
到这里就讲完了第一个作者的设计即上述的strengthened localness information:
除了上述的位置编码设计,本小节作者主要针对句法结构进行了设计。
作者第一步是提取句法结构:基于时间复杂度的考虑,不能对全文所有句子都提取句法结构,而是选择一些关键的句子进行句法结构的提取,具体的就是看答案的span在的那些句子作为候选关键句,如果没有捞到,那就通过ROUGE分数来计算和答案头部的相似句子作为候选。
有了候选的句子就可以提取句法结构啦,具体的作者抽取的句法关系有:pred, subj, nsubjpass, csubj, csubjpass, obj, iobj和xcomp,即最后抽取的是一个三元组:
其中 和 是两个token, 是这两个token对应的句法结构。
基于上面抽取的三元组,就可以得到一个MASK矩阵:
当 和 属于某一个句法结构时,其 为0,否则为负无穷。
在得到 后,在计算Self-Attention的score时候就可以做一些改动如下:
可以看到当 和 不属于某一个句法结构时,scores就是无穷小,softmax后就是0,也就是说 和 之间没有什么贡献
作者把强加了句法结构这一设计概括为:
最后作者把上述设计的这两个全新的隐表征相加得到最终结果:
得到了上述的隐表征后,最后的问题生成就是和传统的一样就是decoder解码:
这里就挑一个消融试验看看吧:
可以看到两个设计都是有一定的收益的,更多的对比试验大家感兴趣可以去看看原论文
欢迎关注,下期再见啦~
本文由 mdnice 多平台发布