本次分享的论文来自于SIGIR 2021会议,论文全名为Optimizing Dense Retrieval Model Training with Hard Negatives,即通过难负例优化稠密向量检索模型训练。
论文地址: https://arxiv.org/abs/2104.08051 代码地址: https://github.com/jingtaozhan/DRhard 随着预训练语言模型的出现,表征学习技术的发展,稠密向量检索(DR,Dense Retrieval)模型 已经取得了很好的效果,但它们的性能改进很大程度上依赖于训练样本的采样技术。 该篇论文发现,目前大多数研究都使用随机采样(random sampling) 或者静态难负例采样(static hard negative sampling) 。其中,随机采样往往优化的是模型的整体的排序误差,对检索top-k文档来说是次优选择;而静态难负例采样虽然以top-k文档排序误差为优化目标,但是由于负例会随着模型训练,其对应排序降低,导致训练不稳定。 (1)稠密检索的稳定训练算法 (STAR ,Stable Training Algorithm for dense Retrieval) (2)直接优化排序性能的查询端训练算法 (ADORE ,Algorithm for Directly OptimizingRanking pErformance) STAR算法,通过引入随机采样来提高稠密检索模型训练过程的稳定性。ADORE算法,使用动态难负例采样方法代替了广泛使用的静态难负例采样方法,直接优化排序性能。 对于给定的查询 和语料库 ,用参数为 的稠密向量检索模型找到与查询 相关的文档 。模型将查询和文档分别进行编码,记为 和 。然后利用相似度函数(通常是内积)进行高效检索。设 为预测相关性得分: 稠密 向量检索模型通常使用pairwise loss进行训练 ,每个训练样本由一个查询 、一个负向文档 和一个正向文档 组成。 损失函数如下: 其中, 是一个指示函数,当A满足时为1,否则为0。同时,文档 的排序位置与训练损失的关系如下: 其中, 为比文档 排序靠前的相关文档个数, 为所有非相关文档。 由于训练过程中,不可能训练全部样本,因此,不同的抽样策略可以看作是为每个负向文档设置不同的权重 ,优化目标如下: RANDOM VS. HARD NEGATIVES
随机采样方法,相当于使用随机负例最小化 ,或者说优化整体pairwise loss: 虽 然 最小化整体pairwise loss似乎是合理的 ,但上述优化目标存在以下关键问题 。 关于单个查询 的损失函数是unbounded。 可以与整个语料库的大小一致,因此, 整体pairwise loss主要学习语料库之间的差异,模型很难专注于提高top-k文档排序的性能 。 难负例采样,即从所有负例中找到top-k个负例,进行模型训练,如下: 其中, 为难负例的个数, 为中前第 个负例在 负例集合 中的排序位置。 可以看出,难负例采样最小化的top-K的pairwise loss,而不是整体pairwise loss,可以更好地提高top-k文档排序的性能。 STATIC VS. DYNAMIC HARD NEGATIVES
其中 , 为预先检索好的难负例集合。 定义,最高排序位置 为难负例集合质量,如下: 可以看出, 的边界较宽泛,理论上可以为很大的值。使用mean reciprocal rank(MRR)来评价排序性能,MRR的下限值如下: 考虑 到训练损失为0的“理想”DR模型的结果为是 ,是不可接受的; 因此,静态难负例采样在训练过程中其实是存在风险的。 动态难负例采样,实际上是在训练过程中,根据DR模型的变化,同步提供排名最高的负向负例。定义,最高排序位置 为难负例集合质量,如下: 从理论推导上说,动态难负例采样效果优于静态难负例采样 。 STAR(StableTraining Algorithm for dense Retrieval )算法的目标是通过引入随机采样来提高稠密检索模型训练过程的稳定性。 (1)Employing StaticHard Negatives STAR算法,使用一个预热模型来检索所有训练查询的top文档,这些文档作为静态难负例,在训练过程中不会被更新。 (2)Employing RandomNegatives 为了稳定训练过程,STAR算法在训练过程中引入了随机采样因素,并优化目标如下: 其中, 为随机采样损失, 为难负例采样损失, 为超参。 STAR算法,采用重用策略以提高效率。训练过程中,没有再次输入随机负例,而是重用同一批中其他样本近似随机负例。如下图所示, STAR算法,采用RankNetpairwise loss,具体如下: ADORE算法,利用动态难负例采样和LambdaLoss损失直接优化排序性能;采用一个预先训练好的文档编码器,对查询编码器进行训练。具体如下图所示, (1)EmployingDynamic Hard Negatives 在训练之前,ADORE算法,使用预先训练好的文档编码器,对文档向量进行预计算,并建立文档向量索引。它们在整个训练过程中都是固定的。在每次训练迭代中,模型对查询进行向量编码,并使用query向量进行检索找到最相关的top文档,作为动态难负例。然后,利用检索来训练DR模型。 (2)DirectlyOptimizing IR Metrics 不像以前的方法,ADORE算法在每一步都执行检索,因此可以利用list-wise方式直接优化排序性能。损失函数如下: ADORE算法和STAR算法都有各自的优势。ADORE算法可以直接优化排序性能,而STAR算法不能。STAR算法同时优化了查询编码器和文档编码器,而ADORE算法只优化查询编码器。 论文结合了两个策略,采用STAR算法,对文档编码器进行预先训练,然后再使用ADORE算法对查询编码器进一步训练。 通过下图可以看出,随机采样在总体的pair-wise loss优于难负例采样,而难负例采样在Top-K 的pair-wise loss优于随机采样。 通过下图可以看出,随机采样在最优效果上没有难负例采样好,动态难负例采样效果最优。 通过下图可以看出,静态难负例采样在与真实负例的覆盖率,随着训练的增加,而变小。并且静态难负例采样存在不稳定性。 从下图中我们可以看出,ADORE+STAR组合效果最优,已经接近使用BERT模型进行交互的结果。STAR算法显著优于随机抽样(尤其是在top-ranking上);ADORE算法极大地提高了所有DR模型的排序性能。 从下图可以看出,训练收敛速度上,ADORE算法和STAR算法相比于ANCE(索引周期刷新方法)都是快很多的。 需要注意的是,虽然ADOR算法E在每一步都检索文档,但搜索非常高效,总共耗时40分钟,约占整个训练时间的20%。 从下图可以看出,在对向量进行压缩时,PQ=96将GPU内存占用减少到3%,并产生很少的性能损失(0.326 vs. 0.329) 。 该篇论文主要提出了动态难负例抽样提高模型效果,以及将随机抽样结合静态难负例抽样提高模型稳定性。 其实,关于文档向量化,一直是我的一个痛。虽然论文中提高,文档的向量检索效果不错,但是实验数据集的长度还是较短。真实场景下,面对上千甚至上万字的文档,真的是无能为力。sad!!!!