RocketQA论文阅读总结

先上论文链接
RocketQA: An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering

现状

  目前的问答系统一般都是retrieval-reader的架构,即先检索相关文档,再进行阅读。检索器作为召回组件,对于阅读器的表现至关重要,但目前的检索器都面临着一个问题,训练精度与推理精度差距大。此外,训练数据集中存在着很多无标签的样本,也会影响模型的精度。

RocketQA改进

  由于交叉编码器通过深度互动来探究问题与段落的相似性,因此它在训练完成之后,在无标签的样本上区分正负例的能力更强,更加具有鲁棒性,因此RocketQA在区分无标签数据的正负性时使用的是这个架构。
picture

跨批次负采样(Cross-batch Negatives)

  由于训练与推理中的负例样本差距大导致精度可能出现差异,RocketQA提出了跨批次负采样在训练中增加负例样本。
picture

  原先的批次内采样是在单个GPU的一个批次内,对于 B B B个问题段落对,每个问题都有与之对应的最相关的段落,那么剩下的 B − 1 B-1 B1个段落作为问题的负例段落。在进行多GPU并行训练时,这个方法就无法充分的使用别的GPU的样本数据了。跨批次负采样的方法是,将每个GPU中的段落在所有GPU中共享,这样如果有 A A A个GPU的话,那么每个问题就能够拥有 𝐴 × 𝐵 − 1 𝐴\times𝐵−1 A×B1个负例样本。

去噪的强负例采样(Denoised Hard Negatives)

  上面的方法可以有效增加训练中的负例样本数量,但是大部分的负例样本对于模型来说很好判断。强负样本对于模型是非常重要的,它能够增加模型的鲁棒性,为了获取强负样本,一般的做法是在返回的top-K个段落中,根据标签挑选出负例段落,这样的段落,模型将其视为与答案最相关的K个段落之一,因此我们可以把它看作强负例样本,但是,由于漏标的存在,这样的段落也有可能是没有被标记的正例样本。RocketQA的做法是利用训练好的交叉编码器,对于top-K个段落,首先去掉有标签的正例样本,然后将剩下的段落交给交叉编码器进行判断,判断为负例的段落,模型才将其视为强负例样本。

数据增强

  这个方法旨在缓解训练数据有限的情况,交叉编码器是使用实验的数据集进行训练的,为了防止模型在检索中的作弊行为,文章引入了大量的无标签的数据,首先交给交叉编码器进行标记,然后将其扩充到原始数据集中,为了保证标记的质量,这里会设置一个阈值,只有高阈值的正例和负例才能够被加入到原始数据集中。这里的数据增强方式可以被视为是一种知识蒸馏,交叉编码器是教师模型,接下来被训练的对偶编码器是学生模型。

训练步骤

  • 定义
    𝐶 𝐶 C表示段落集。 Q L Q_L QL是在 C C C中有标签的段落对应的问题, 𝑄 𝑈 𝑄_𝑈 QU是在 𝐶 𝐶 C中有标签的段落对应的问题, 𝐷 𝐿 𝐷_𝐿 DL是由 𝐶 𝐶 C 𝑄 𝐿 𝑄_𝐿 QL组成的数据集, 𝐷 𝑈 𝐷_𝑈 DU是由 𝐶 𝐶 C 𝑄 𝑈 𝑄_𝑈 QU组成的数据集。

  • 步骤1
    通过跨批次负采样方法在 𝐷 𝐿 𝐷_𝐿 DL上训练一个对偶编码器 𝑀 𝐷 ( 0 ) 𝑀_𝐷^{(0)} MD(0)

  • 步骤2
    𝐷 𝐿 𝐷_𝐿 DL上训练一个交叉编码器 𝑀 𝐶 𝑀_𝐶 MC。正例样本使用原始数据集中已经标定的,负例样本使用从 𝑀 𝐷 ( 0 ) 𝑀_𝐷^{(0)} MD(0)中返回的top-K个文档中除去正例样本之后,剩下的样本进行随机采样。

  • 步骤3
    通过去噪的强负例方法在 𝐷 𝐿 𝐷_𝐿 DL上训练一个双编码器 𝑀 𝐷 ( 1 ) 𝑀_𝐷^{(1)} MD(1)。强负例样本由 𝑀 𝐷 ( 0 ) 𝑀_𝐷^{(0)} MD(0)返回,并且紧接着送入 𝑀 𝐶 𝑀_𝐶 MC,再从 𝑀 𝐶 𝑀_𝐶 MC的输出中挑选置信度高的负例样本作为去噪后的负例样本。

  • 步骤4
    对于每个问题,先通过 𝑀 𝐷 ( 1 ) 𝑀_𝐷^{(1)} MD(1)返回top-K个段落,再通过 𝑀 𝐶 𝑀_𝐶 MC来对段落进行标记,最后再利用手动标记的数据与标记的数据一起训练一个对偶编码器 𝑀 𝐷 ( 2 ) 𝑀_𝐷^{(2)} MD(2)

    跨批次负采样策略在这四个步骤中都会使用到。

picture

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值