# 2007.00808_ANCE: Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval * 首页: * PDF: * 引用: 1455(2025-09-23) * 组织: * Microsoft * GitHub: ## 总结 **简介** * 前期叫 ANCE,后面改名 ANN-NCL * ANCE: Approximate nearest neighbor Negative Contrastive Estimation * ANN-NCL: Approximate Nearest Neighbor Negative Contrastive Learning(近似最近邻负对比学习) **背景** 1. **稠密检索**:传统的检索系统(如BM25)依赖于关键词的精确匹配。而稠密检索使用深度学习模型(如BERT)将文本(查询和文档)映射成一个低维的**稠密向量**。检索过程就变成了在向量空间中寻找与查询向量最接近的文档向量。这种方法能更好地理解语义。 2. **对比学习**:训练这种稠密向量模型通常采用**对比学习**。核心思想是让正样本对(如一个查询和它对应的相关文档)的向量距离更近,而让负样本对(查询和不相关文档)的向量距离更远。 3. **核心问题:负样本质量**:对比学习的效果严重依赖于负样本的质量。如果负样本太“简单”(即与查询明显不相关,模型很容易区分),那么模型就学不到有用的知识,泛化能力差。 * **早期方法**:使用随机抽样的文档作为负样本。这些负样本质量很低。 * **改进方法**:**批量负采样**。在同一训练批次中,将其他查询的正样本文档用作当前查询的负样本。这提供了一些“较难”的负样本,因为批次内的文档可能或多或少有些相关。 * **遗留问题**:批量负采样提供的难负样本数量有限,且是“偶然”得到的,并不是系统性地为每个查询寻找最难的样本。 **核心思想:ANN-NCL** * 起因 * 要训练一个强大的稠密检索模型,就应该直接使用 **“最难”的负样本** 来“磨练”它。 * 所谓“最难”的负样本,就是那些与查询在语义上**很相似,但实际上并不相关**的文档。模型需要学会精细地区分这些细微的差别。 * 如何高效地为每个查询找到这些全局范围内最难的负样本 * **解决方案**:**Approximate Nearest Neighbor Negative Contrastive Learning(近似最近邻负对比学习)** * **负对比学习**:使用负样本进行对比学习。 * **最近邻**:目标是找到每个查询的“最近邻”文档作为负样本,也就是向量空间中最接近但又不相关的文档(即最难负样本)。 * **近似**:在整个庞大的文档库中进行精确的最近邻搜索(即穷举法)在计算上是不可行的。因此,论文采用**近似最近邻搜索**技术来高效地实现这一目标。 **ANN-NCL 的工作流程** * 该方法的核心是一个**动态、迭代**的训练过程 * 步骤 1. **建立初始检索器**:首先,用一个基础方法(例如使用批量负采样训练的模型)初始化一个稠密检索模型。这个初始模型虽然不完美,但能大致将语义相似的文本映射到相近的向量空间。 2. **为每个查询寻找难负样本**:在每次训练迭代中,使用**当前最新的模型**作为编码器,将整个文档库中的所有文档都编码成向量,并构建一个**高效的ANN索引**(如Faiss库)。 3. **ANN搜索**:对于训练集中的每一个查询,也用它当前的模型编码成向量,然后去ANN索引中快速搜索与其最相似的**Top-K个文档**。这些文档就是候选的“难负样本”。 4. **过滤与采样**:从这Top-K个文档中,**剔除掉真正的正样本文档**,剩下的就是本次训练迭代中为这个查询准备的“难负样本”。 5. **模型更新**:构建训练数据:`(查询,正样本文档,难负样本1,难负样本2, ...)`。然后用对比学习损失函数来更新模型参数。**关键点在于,损失函数会惩罚模型没能将查询与这些很难区分的负样本分离开的情况**。 6. **循环迭代**:重复步骤2-5。随着模型的不断更新,它对文本的向量表示能力越来越强,因此每一步找到的“难负样本”也会越来越准、越来越难。这个过程形成了一个自我改进的良性循环。 **主要贡献与创新点** 1. **系统性的难负样本挖掘**:与依赖随机性或批次内巧合的方法不同,ANN-NCL**主动地、系统性地**为每个查询从整个文档库中挖掘高质量的难负样本。 2. **高效性**:通过引入**近似最近邻搜索**,解决了在大规模文档库上进行全局难样本挖掘的计算瓶颈,使该方法具有实用价值。 3. **迭代式训练**:提出了一个动态的训练机制,使难样本挖掘和模型优化相互促进,共同进化。 4. **显著的性能提升**:在多个标准检索基准上的实验表明,ANN-NCL方法显著优于之前的稠密检索模型,证明了高质量负样本对于对比学习的重要性。 **正样本列表 D_positive 包含所有的正样本吗?整个文档库(通常是数百万甚至数千万个文档),有没有可能候选样本中也有正样本?** 1. **依赖稀疏但高质量的标注**: * 这是最基本的策略。 * 方法假设我们拥有的少量标注是**绝对正确**的。 * 我们确保这些已知的正样本一定不会被用作负样本。这是我们能做的最基本也是最重要的保障。 2. **“难负样本”的重新定义**: * 在存在大量未标注正样本的背景下,ANN-NCL寻找的“难负样本”其实际含义变成了: > **“在向量空间中与查询最接近的,并且** ***不属于已知正样本*** **的文档。”** * 这些文档之所以“难”,可能是因为它们: * **a) 是真正的难负样本**:语义相似但不相关。 * **b) 是未被标注的正样本**:语义相似且相关,但标注缺失。 3. **模型训练的鲁棒性**:虽然(b)情况会产生噪声,但机器学习模型(尤其是深度学习模型)通常对一定比例的标注噪声具有一定的鲁棒性。只要高质量的已知正样本提供的“拉近”信号足够强,并且(a)情况(真正的难负样本)占主导地位,模型仍然能够从整体趋势中学到有效的表示。 4. **这是一个权衡**:ANN-NCL方法做了一个重要的权衡:**它选择承担“假负样本”的风险,以换取获得大量“真难负样本”的巨大收益。** 实验结果表明,这个权衡是值得的,因为带来的性能提升远远超过了噪声引入的负面影响。 ## Abstract 本文探讨了在**稠密表示空间**中进行文本检索的潜力和挑战。尽管基于端到端学习的稠密检索(Dense Retrieval, DR)具有很多理论上的优势,但其在实际表现上却常常 **不如基于词的稀疏检索方法**。 ### 学习瓶颈的理论分析 作者首先**从理论上分析了稠密检索的学习瓶颈**。他们指出,这一瓶颈的主要原因是训练过程中**在小批量中采样了大量无信息量的负样本**,这些负样本导致了以下问题: - **梯度范数逐渐减小**(diminishing gradient norms); - **随机梯度的方差较大**(large stochastic gradient variances); - **学习收敛速度缓慢**(slow learning convergence)。 这些问题严重阻碍了稠密检索模型的性能提升。 ### 提出方法:ANCE 为了解决上述问题,作者提出了**Approximate Nearest Neighbor Negative Contrastive Learning (ANCE)** 方法。其关键点是: - **全局选择难样本**(hard negatives)作为训练负样本,而不是仅限于当前小批量; - 使用一个**异步更新的近似最近邻(ANN)索引**,从**整个语料库中选取最难的负样本**,从而增强训练的对比学习效果。 ### 实验结果与效果 作者在多个任务中验证了ANCE的有效性,包括: - **网页搜索**(web search); - **问答系统**(question answering); - **商业搜索环境**(commercial search environment)。 实验结果表明,ANCE的**点积检索(dot-product retrieval)方法**在准确率上**几乎可以达到BERT级联信息检索(Cascade IR)系统的水平**,但却**效率高出100倍**。这表明ANCE在保持高质量检索效果的同时,显著提升了计算效率。 ### 重点总结 - **核心问题**:稠密检索的性能瓶颈源于局部无信息负样本的使用; - **核心贡献**:提出ANCES,通过全局抽取难样本提升学习效果; - **关键优势**:ANCE在多种任务中表现出接近SOTA的精度,同时效率大幅提升。 ## 1 Introduction 以下是论文《Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval》的第一章节 **1 Introduction** 的内容总结: ### 1.1 语言系统的文本检索问题 许多语言系统都将文本检索作为第一步,以获取相关信息。例如: - **搜索排名**(Search Ranking)(Nogueira & Cho, 2019) - **开放域问答**(OpenQA)(Chen et al., 2017) - **事实验证**(Fact Verification)(Thorne et al., 2018) 这些系统通常先通过**检索模型**获取相关文档,再通过**重排序模型**(reranking)、**机器阅读**(machine reading)和**推理模型**(reasoning models)进行处理。 尽管后期模型已受益于深度学习的进展(如 BERT、RoBERTa 等),但**第一阶段的检索模型**仍主要依赖传统的稀疏方法,如 **BM25**,成为系统性能的瓶颈(Nogueira & Cho, 2019; Luan et al., 2020; Zhao et al., 2020)。 --- ### 1.2 密集检索(Dense Retrieval, DR)的提出 **密集检索(Dense Retrieval)**旨在通过深度神经网络学习文本的**连续表示空间**来克服稀疏检索的瓶颈。其优势包括: - 完全可学习的表示(fully learnable representations) - 易于与预训练模型整合 - 支持高效的近似最近邻搜索(ANN search)(Johnson et al., 2019) 这些特性使得密集检索有望解决稀疏检索中的关键问题,如**词汇不匹配**(vocabulary mismatch)(Croft et al., 2010)。 --- ### 1.3 密集检索的关键挑战:负样本构建 密集检索学习中的一个关键挑战是**如何构造有效的负样本**(Karpukhin et al., 2020)。 - **与重排序阶段不同**:在重排序中,负样本可以自然地取自首轮检索中不相关的文档,但在**首轮检索**中,模型必须从整个语料库中区分相关和不相关的文档。 - 如图 1 所示,**全局负样本**(global negatives)与传统稀疏检索得到的负样本存在显著差异。 近期的一些研究(如 Faghri et al., 2017;Oord et al., 2018;Chen et al., 2020a)尝试通过**对比学习**(contrastive learning)在当前或最近的 mini-batch 中选取硬负样本。 然而,**局部负样本**(in-batch negatives)虽然在学习词或视觉表示上有效,但在密集检索模型中**提升有限**,甚至在某些任务中(如文档检索)**表现不如 BM25**(Lee et al., 2019;Gao et al., 2020b;Luan et al., 2020)。 --- ### 1.4 本文贡献:理论与新方法 本文首先**从理论上分析了密集检索中负样本采样对训练收敛的影响**。 - 借助**方差减少框架**(variance reduction framework)(Alain et al., 2015;Katharopoulos & Fleuret, 2018),本文指出: - 在密集检索中,**局部负样本会导致梯度范数衰减**(diminishing gradient norms),进而造成**高方差的随机梯度估计**,导致训练**收敛缓慢**。 - **局部负样本是密集检索性能受限的根本原因**。 基于这一分析,本文提出了一种新的对比学习方法:**Approximate Nearest Neighbor Negative Contrastive Estimation (ANCE)**。 - 与传统随机或局部负样本不同,**ANCE 使用正在优化的 DR 模型从整个语料库中进行近似最近邻检索来构造全局负样本**。 - 这使得训练中的负样本分布更贴近测试时的真实分布。 - 从**方差减少**的角度来看,ANCE 能有效**提升梯度范数的上界**并**降低梯度方差**,从而**加快模型收敛**。 --- ### 1.5 实验与实现 本文实现了 ANCE,采用**异步更新的 ANN 索引**(ANN index)来支持负样本检索: - 类似于 Guu et al. (2020) 的方法,使用一个**并行编码器(Inferencer)**,与正在优化的 DR 模型同步更新。 - 定期刷新 ANN 索引,以匹配模型训练进度。 **实验验证了 ANCE 在以下三个场景中的优势**: - 标准网页搜索(Craswell et al., 2020) - 开放域问答(Rajpurkar et al., 2016;Kwiatkowski et al., 2019) - 一个商业搜索引擎的检索系统 此外,实验还验证了**ANCE 取样负样本的梯度范数显著高于局部负样本**,从而**提升了密集检索模型的收敛效率**。 --- ### 总结 本章介绍了从稀疏检索到密集检索的背景,指出现有密集检索方法在负样本选择上的不足,提出了**基于近似最近邻的对比学习方法 ANCE**,并从理论和实验上验证了其在提升模型收敛速度和性能上的有效性。 ## 2 Preliminaries 本节讨论了**稠密检索**(Dense Retrieval)及其**表示学习**的预备知识。 --- ### Task Definition(任务定义) 稠密检索的目标是:**给定一个查询 $ q $ 和一个语料库 $ C $,从 $ C $ 中检索出一组与查询相关的文档 $ D^+ = \{d_1, ..., d_i, ..., d_n\} $**。由于语料库通常非常大,因此 $ |D^+| \ll |C| $。 与传统基于**稀疏词项匹配**和**倒排索引**的方法不同,稠密检索通过**在学习的嵌入空间中计算相似性**进行检索,其公式如下: $$ f(q, d) = \text{sim}(g(q; \theta), g(d; \theta)) $$ 其中: - $ g(\cdot; \theta) $ 是一个**表示模型**(representation model),用于将查询或文档编码为**稠密向量**(dense embeddings); - $ \theta $ 是模型参数,通常是在**预训练模型**(如 BERT)基础上进行微调; - $ \text{sim}(\cdot, \cdot) $ 是相似性函数,通常是**余弦相似度**(cosine similarity)或**点积**(dot product),便于使用高效的近似最近邻(ANN)检索算法。 **重点内容**:稠密检索的核心在于学习一个高质量的嵌入空间,使得相关查询和文档在该空间中距离更近,而非相关文档距离更远。 --- ### Learning with Negative Sampling(负采样学习) 稠密检索模型的训练目标是学习一个能够区分相关与不相关文档的表示空间。其学习过程通常遵循**学习排序**(Learning to Rank, LTR)的范式: $$ \theta^* = \arg\min_{\theta} \sum_{q} \sum_{d^+ \in D^+} \sum_{d^- \in D^-} l(f(q, d^+), f(q, d^-)) $$ 其中: - $ D^+ $ 是与查询 $ q $ 相关的正样本文档; - $ D^- $ 是不相关的负样本文档; - $ l(\cdot, \cdot) $ 是损失函数,可以是**二分类交叉熵**(BCE)、**hinge loss** 或 **负对数似然**(NLL)等。 **重点内容**:训练时的关键在于如何采样负样本(negative sampling)。 --- ### Negative Sampling Challenges(负采样挑战) 在第一阶段检索中,稠密检索面临的一个**独特挑战**是:**负样本需要从整个语料库 $ C $ 中选取**,即 $ D^- = C \setminus D^+ $。由于语料库规模巨大,负样本数量通常可达数百万,因此需要高效采样。 改进后的损失函数如下: $$ \theta^* = \arg\min_{\theta} \sum_{q} \sum_{d^+ \in D^+} \sum_{d^- \in \hat{D}^-} l(f(q, d^+), f(q, d^-)) $$ 其中 $ \hat{D}^- $ 是从语料库中**采样得到的负样本**集合。 --- ### Negative Sampling Approaches(负采样方法) 1. **BM25 采样**:从 BM25 检索出的顶部文档中采样负样本。 **问题**:这种方法可能导致 DR 模型仅仅学习到稀疏检索的模式,提升效果有限。 2. **局部小批量采样**(Local Mini-batch Sampling):如在对比学习(Contrastive Learning)中使用当前小批量中的负样本。 **问题**:尽管结构简单,但其效果通常**不如 BM25 采样**,也无法显著提升稠密检索性能。 **重点内容**:当前的负采样方法在稠密检索任务中尚未取得突破性进展,尤其是在如何有效利用大规模负样本方面仍有挑战。 --- ### 总结 这一部分主要介绍了: - **稠密检索的基本任务定义**; - **表示学习的目标和结构**; - **训练时的负采样问题及其挑战**; - **当前常用的负采样方法及其局限性**。 核心思想是:**稠密检索的关键在于学习一个高质量的嵌入空间,而有效的负采样是实现这一目标的关键一步**。 ## 3 Analyses on The Convergence of Dense Retrieval Training 本节从理论角度分析了密集检索(Dense Retrieval)中表示学习的**收敛性**。主要内容包括:**学习收敛与梯度范数的关系**、**非信息性负样本导致梯度衰减**,以及**同批次内的局部负样本在常见条件下无效**。 --- ### **收敛速度与梯度范数** 在密集检索中,训练目标是通过负采样(negative sampling)优化模型参数,通常使用随机梯度下降(SGD)。假设损失函数为 $ l(d^+, d^-) = l(f(q, d^+), f(q, d^-)) $,其中 $ f $ 是查询 $ q $ 与文档 $ d $ 的嵌入表示函数,$ d^+ $ 是正样本,$ d^- $ 是负样本。 如果使用重要性采样(importance sampling),SGD 的更新公式为: $$ \theta_{t+1} = \theta_t - \eta \cdot \frac{1}{N p_{d^-}} \nabla_{\theta_t} l(d^+, d^-) $$ - $ \theta_t $ 是第 $ t $ 次迭代的模型参数; - $ \eta $ 是学习率; - $ N $ 是负样本数量; - $ p_{d^-} $ 是负样本的采样概率; - $ \frac{1}{N p_{d^-}} $ 是确保梯度估计无偏的缩放因子。 接着,作者推导了收敛速度的数学表达式,发现收敛速度与以下两个因素有关: 1. **梯度方向与最优参数之间的投影**:$ \mathbb{E}(g_{d^-})^T (\theta_t - \theta^*) $; 2. **梯度估计的方差**:$ \mathbb{E} ||g_{d^-}||^2 $ 或 $ \text{Tr}(\mathcal{V}(g_{d^-})) $。 **重点结论**:为了获得更快的收敛速度,应从梯度范数较大的样本中采样,即使用**重要性采样**(importance sampling)方法,按梯度范数的大小进行加权采样。 $$ p_{d^-}^* \propto ||\nabla_{\theta_t} l(d^+, d^-)||_2 $$ 这在文献中是已知结论,通过 Jensen 不等式也可证明该方法能最小化梯度方差,从而提高收敛速度。 --- ### **非信息性负样本导致梯度衰减** 在实际中,我们不能每次都计算最优的梯度范数分布,但可以利用一些理论结果来分析负样本对训练的影响。 Katharopoulos 等人(2018)提出了在多层感知机(MLP)中梯度范数的上界,表示为: $$ ||\nabla_{\theta_t} l(d^+, d^-)||_2 \leq L \rho ||\nabla_{\phi_L} l(d^+, d^-)||_2 $$ - $ L $ 是网络层数; - $ \rho $ 是由中间层的权重和梯度组成的常数; - $ \nabla_{\phi_L} $ 是对最后一层的梯度。 进一步地,对于常见的排序损失函数(如 BCE loss、pairwise hinge loss),损失趋近于零时,梯度也会趋近于零: $$ l(d^+, d^-) \to 0 \Rightarrow ||\nabla_{\theta_t} l(d^+, d^-)||_2 \to 0 $$ **重点结论**:如果负样本与正样本的损失已经接近于零,那么其梯度几乎为零,**对模型收敛贡献很小**。这类样本被称为**非信息性负样本**,它们的存在会降低模型的训练效率。 --- ### **同批次局部负样本无效** 在密集检索任务中,通常使用同批次(in-batch)的负样本。然而,作者指出这种策略在常见条件下是**无效的**。 假设: - $ D^{-*} $ 是与正样本 $ D^+ $ 难以区分的**高质量负样本集合**; - $ b $ 是批次大小; - $ |C| $ 是整个语料库的大小。 通常满足以下两个条件: 1. 批次大小远小于语料库大小:$ b \ll |C| $; 2. 有效负样本数量远小于语料库大小:$ |D^{-*}| \ll |C| $。 在这种情况下,一个随机批次中包含有效负样本的概率 $ p = \frac{b |D^{-*}|}{|C|^2} $ 接近于零。 **重点结论**:从同批次中采样的负样本大多为**无意义的负样本**,无法提供有效的训练信号。因此,**局部负样本在密集检索训练中通常无效**。 --- ### **图示:ANCE 异步训练流程(图2)** 图中展示了 ANCE(Approximate Nearest Neighbor Contrastive Learning)的异步训练机制: - **Trainer** 使用 ANN 索引中的负样本来更新模型参数; - **Inferencer** 使用最新的模型检查点对语料库中的文档进行编码,并更新 ANN 索引; - 这种异步机制可以确保训练使用的负样本始终来自当前最优的表示,从而提高训练效率和模型性能。 --- ### **总结** 本节从理论角度分析了密集检索模型训练的收敛性问题,得出以下主要结论: 1. **收敛速度与梯度范数密切相关**,应通过**重要性采样**选择梯度较大的样本以加速收敛; 2. **非信息性负样本会导致梯度衰减**,训练过程中应尽量避免使用此类样本; 3. **同批次的负样本在常见条件下无效**,难以提供有效的训练信号; 4. **使用 ANN 索引进行异步训练**(如 ANCE)是一种有效的策略,可以持续引入高质量负样本,提升模型训练效果。 ## 4 Approximate Nearest Neighbor Noise Contrastive Estimation 本节提出 **Approximate Nearest Neighbor Noise Contrastive Estimation**(简称 ANCE),用于通过从整个语料库中选择负样本的方式训练密集检索模型,从而提升模型的收敛效果和性能。 --- ### **4.1 方法概述** 我们的分析表明,**从全局语料库中构建负样本是必要甚至关键的**。因此,ANCE 的核心思想是:**通过异步更新的近似最近邻(ANN)索引,从整个语料库中采样最难的负样本**,以提升模型训练的效果。 其目标函数定义如下: $$ \theta^* = \arg\min_{\theta} \sum_q \sum_{d^+ \in D^+} \sum_{d^- \in D^{-}_{\text{ANCE}}} l(f(q, d^+), f(q, d^-)) $$ - $ D^+ $:每个查询 $ q $ 对应的正样本集合; - $ D^{-}_{\text{ANCE}} $:从 ANN 索引中检索出的最难负样本集合; - $ f(q, d) $:查询和文档的嵌入函数; - $ l(\cdot, \cdot) $:损失函数(如负对数似然损失,NLL)。 **重点说明**: ANCE 中的 $ D^{-}_{\text{ANCE}} $ 是当前模型认为最难区分的负样本(即最难的负样本 $ D^{-*} $ 的近似),它们提供了更强的梯度信息,有助于模型更快收敛。 --- ### **4.2 模型架构** **ANCE 可用于训练任何密集检索模型**。为简化实现,作者采用如下结构: - **模型架构**:使用 BERT 构建的 Siamese/Dual Encoder 结构; - **相似度计算**:余弦相似度或点积; - **损失函数**:负对数似然损失(NLL)。 这种设计与近期研究(如 Luan et al., 2020)保持一致,便于对比实验。 --- ### **4.3 异步索引更新(Asynchronous Index Refresh)** 在训练过程中,检索模型 $ f() $ 每个 mini-batch 都会被更新,因此如果每次更新都重建 ANN 索引,计算成本极高。具体挑战包括: 1. **Inference**:需要对整个语料库重新编码(计算开销大); 2. **Index**:重建 ANN 索引(相对高效); 为解决这一问题,ANCE 采用**异步更新机制**: - 每 $ m $ 个 batch 更新一次 ANN 索引; - 使用最新 checkpoint $ f_k $ 对语料库重新编码; - 同时,训练器继续使用上一个版本的索引 $ \text{ANN}_{f_{k-1}} $ 进行训练; - 当编码完成后,Inferencer 更新索引为 $ \text{ANN}_{f_k} $,并传递给训练器。 **重点说明**: 这种异步机制使得 ANN 索引能够“逐渐”跟上模型更新,而不必实时同步。文中指出,**1:1 的 GPU 分配比例**就足以最小化这种异步带来的影响。 --- ### **4.4 小结** - ANCE 通过**从整个语料库中异步选择最难负样本**,显著提升训练效率与模型性能; - 使用了 BERT-based 编码器和点积相似度,结构简单但有效; - 引入异步索引更新机制,降低了维护最新索引的计算开销; - 实验和分析表明,**异步更新在合理资源配置下对模型性能影响很小**,是高效训练的关键。 --- **本节重点总结**: ANCE 的核心贡献在于**全局负样本选择**与**异步索引更新机制**。通过这两个设计,模型能够在大规模语料库中高效训练并取得更好的收敛效果。 ## 5 Experimental Methodologies ### Benchmarks(基准) 本节描述了实验设置,更多细节请参见附录 ``A.1`` ``A.2``。 **网络搜索实验**使用 TREC 2019 深度学习 (DL) Track 的基准(Craswell et al., 2020),这是一个大规模的 ad hoc 检索数据集。我们遵循官方指南,主要在检索设置中进行评估,也包括使用 BM25 重排前 100 个候选项的结果。 **开放式问答 (OpenQA) 实验**使用 Natural Questions (NQ)(Kwiatkowski et al., 2019)和 TriviaQA (TQA)(Joshi et al., 2017),设置与 Karpukhin et al.(2020)一致。评估指标为 Coverage@20/100,用于衡量 Top-20/100 检索到的段落中是否包含答案。此外,还评估了 ANCE 更好的检索能力是否能提升最终答案的准确率,通过使用最先进的系统读取器(如 RAG-Token 和 DPR Reader)基于 ANCE 替代 DPR 进行检索。 **生产系统中的研究**方面,我们研究了 ANCE 在商业搜索引擎第一阶段检索中的有效性。通过将生产质量的密集检索模型训练方式改为 ANCE,并评估在不同语料库大小、编码维度和精确/近似搜索下的离线增益。 --- ### Baselines(基线) **在 TREC DL 中**,我们选择了相关类别中的最佳运行结果,并参考 Craswell et al.(2020)的更多基线分数。我们实现了使用相同 BERT-Siamese 架构的最新密集检索基线模型,但负样本构造方法不同: - **Rand Neg**:随机采样批次中的负样本; - **BM25 Neg**:从 BM25 生成的 top 100 候选中随机采样负样本; - **BM25 + Rand Neg**:BM25 与随机负样本的组合; - **NCE Neg**:使用批次中最难的负样本进行对比学习或噪声对比估计(NCE)。 **在 OpenQA 中**,我们与 DPR 和 BM25 及其组合进行比较(Karpukhin et al., 2020)。 --- ### Implementation Details(实现细节) **在 TREC DL 中**,最新的研究发现 MARCO 段落训练标签更干净(Yan et al., 2019),BM25 负样本有助于训练密集检索模型(Karpukhin et al., 2020;Luan et al., 2020)。因此,我们引入了一个“BM25 Warm Up”设置(BM25 →∗→absent\rightarrow\*),即首先使用 MARCO 官方 BM25 负样本训练 DR 模型。ANCE 也通过 BM25 负样本进行预热训练。所有 TREC DL 的 DR 模型都基于 RoBERTa base(Liu et al., 2019)进行微调。 **在 OpenQA 中**,我们使用发布的 DPR 检查点对 ANCE 进行预热训练(Karpukhin et al., 2020)。 为了适应 BERT-Siamese 的长文档处理,ANCE 采用 Dai & Callan(2019b)的两种设置: - **FirstP**:使用文档的前 512 个 token; - **MaxP**:将文档分割为最多 4 个 512-token 的段落,并在段落级别上进行最大池化,该操作在近似最近邻(ANN)中原生支持。 ANN 搜索使用的是 Faiss IndexFlatIP Index(Johnson et al., 2019)。训练时使用 1:1 的 GPU 配置,每 10k 批次刷新索引,批量大小为 8,梯度累积步数为 2,使用 4 块 GPU。每个正样本从 ANN top 200 中均匀采样一个负样本。效率评估使用单个 32GB V100 GPU,在 Intel Xeon Platinum 8168 CPU 和 650GB 内存的云虚拟机上进行。 --- ### 表格与图示 **表 1:TREC 2019 深度学习 Track 的结果。** 展示了不同模型在 MARCO、TREC DL 段落和文档检索中的表现。重点指标包括 MRR@10、Recall@1k、NDCG@10 等。ANCE(FirstP)和 ANCE(MaxP)在多个指标中均表现最佳,尤其在 MaxP 设置下文档检索性能显著提升。 **图 3:NQ 和 TQA 的检索结果(Coverage@20/100)。** 显示了 ANCE 在单任务和多任务设置下的检索覆盖能力优于 BM25 和 DPR,尤其在 Top-20 和 Top-100 表现突出。 **图 4:商业搜索引擎第一阶段检索的相对增益。** 展示了在语料库大小为 250 万和 80 亿、编码维度分别为 768 和 64 的情况下,将生产模型训练方式从传统方法改为 ANCE 后,KNN 和 ANN 搜索下的相对增益分别为 +18.4% 和 +15.5%。 --- ### 总结 本节详细介绍了实验设置,涵盖多个数据集(TREC 2019、NQ、TQA)、不同基线模型、实现细节以及评估方法。重点突出了 ANCE 相比传统方法(如 DPR、BM25)在检索效果和实际系统中的提升效果,尤其在 MaxP 设置和 ANN 搜索下表现优异。 ## 6 Evaluation Results ### 6.1 有效性与效率 在 TREC 2019 DL 基准测试中,ANCE 表现出显著优于所有稀疏检索方法(如 DeepCT 使用 BERT 训练词权重的方法)的效果。在不同的负样本构造机制中,ANCE 是唯一能够使 BERT-Siamese 在文档检索中**稳定超越稀疏方法**的模型。 在开放问答(OpenQA)任务中,ANCE 在段落检索方面也优于 DPR。更重要的是,在实际生产环境中,ANCE 相比其他方法表现出了**约 15% 的相对提升**。 在使用相同读取模型(如 RAG 和 DPR)的情况下,ANCE 更好的检索性能也**提高了答案的准确性**。如表 6 所示,在两个任务(NQ 和 TQA)中,ANCE + Reader 的表现优于 DPR 和 RAG。 | 模型 | NQ | TQA | |------|----|-----| | DPR | 41.5 | 56.8 | | RAG-Token | 44.1 | 55.2 | | ANCE + Reader | 46.0 | 57.5 | 此外,ANCE 在**效率**方面也有显著优势。图 6 提供了 ANCE 的检索与训练效率数据。相比传统的稀疏 IR 方法(如 BM25 + BERT 重排序),ANCE 通过 Siamese 结构和预编码文档,实现了**100 倍的加速**。 | 操作 | 离线时间 | 在线时间 | |------|----------|----------| | BM25 索引构建 | 3 小时 | – | | BM25 检索 | – | 37ms | | BERT 重排序 | – | 1.15s | | 稀疏 IR 总时间 | – | 1.42s | | ANCE 推理 | – | 11.6ms | 在训练方面,ANCE 的主要计算开销在于更新训练语料的编码。若使用异步索引刷新,可以缓解这一问题。 ANCE 的一个重要特性是:其检索结果与重排序的精度**差距很小**,说明其在训练中使用**全局负例**的重要性。这一点颠覆了以往认为“必须建模词级别交互”的观点,证明了 ANCE 能够通过学习一个有效的语义表示空间来捕捉搜索相关性。 --- ### 6.2 训练收敛性的实证分析 在这一部分,作者展示了密集检索中**搜索相关性分布的长尾特性**。如图 7 所示,每个查询中只有少量样本具有显著高的得分,其余大多数形成一个“长尾”分布。在实际检索中,关键挑战是**识别出这些高得分中的相关样本**,其余的是基本无关的。 作者进一步验证了局部负例(local negatives)的“信息量”极低。无论是随机选取还是 NCE 选取的负例,它们与 Top 100 负例的重叠率几乎为 0,这与理论假设一致。相比之下,ANCE 构造的负例与 Top 负例的重叠率从 63% 开始,并最终收敛到 100%。 接着,作者验证了局部负例会导致训练损失**较低、梯度范数较小**,从而**收敛缓慢**。如图 8 所示,使用局部负例的模型训练损失接近于零,而使用 ANCE 全局负例的模型保持较高的训练损失。同时,局部负例的梯度范数几乎为零,而 ANCE 的梯度范数显著更大。 这验证了 ANCE 更符合理论中的**重要性采样分布**假设,从而提升了学习效率和收敛速度。 --- ### 6.3 讨论 为了保持与最新研究的一致性,作者使用了 BERT-Siamese 和负对数似然(NLL)损失。他们也尝试了**余弦相似度**和**BCE/hinge 损失**,虽然这些方法在局部负例上的梯度范数更小,但检索效果提升不大。 在附录中,作者进一步探讨了以下内容: - **A.2**:在 TREC 2019 DL 赛道中,密集检索结果与稀疏检索结果的重叠率**低于 25%**,说明两者本质不同,未来需要更多研究。 - **A.3 & A.4**:研究了异步更新的间隔和超参数对性能的影响。 - **A.5**:通过案例分析发现,ANCE 检索出的无关文档往往**在语义上相关**,与稀疏方法的无关文档完全不同。 --- #### 总结 本章对 ANCE 的评估结果进行了全面分析,重点包括: - **有效性**:在多个检索任务中优于多种稀疏和密集方法; - **效率**:显著提升在线检索速度; - **收敛性**:全局负例设计提升了训练效率与模型性能; - **理论验证**:实证结果支持 ANCE 在理论上的重要性采样假设; - **讨论与扩展**:深入分析了 ANCE 与稀疏方法的差异,并提供了更多实验与案例支持。 ## 7 Related Work ### 早期对神经信息检索(Neu-IR)的研究 早期在神经信息检索(Neural Information Retrieval, Neu-IR)领域的研究中,普遍认为交互模型(Interaction Models)虽然计算成本较高,但在处理词项级别匹配时更有效(Guo et al., 2016; Xiong et al., 2017; Nogueira & Cho, 2019)。为了降低这些模型的高成本,研究者提出了多种技术,例如知识蒸馏(distillation,Gao et al., 2020a)和缓存机制(caching,Humeau et al., 2020; Khattab & Zaharia, 2020; MacAvaney et al., 2020)。 **重点内容**: 文中提到 **ANCE** 的一个重要发现是,经过正确训练的基于表示的 BERT-Siamese 模型实际上可以达到与交互式 BERT 排序模型相当的效果。这一发现为 Neu-IR 领域带来了新的研究方向和启发。 --- ### 稀疏检索与密集检索 深度学习被用于改进稀疏检索的多个组件,例如词项权重(Dai & Callan, 2019b)、查询扩展(Zheng et al., 2020)和文档扩展(Nogueira et al., 2019)。 而密集检索(Dense Retrieval)则选择了一条不同的路径,它完全在嵌入空间中进行,并通过近似最近邻(ANN)搜索(Lee et al., 2019; Karpukhin et al., 2020; Luan et al., 2020)实现检索。 **重点内容**: 本文表明,**一个简单的密集检索系统可以达到当前最优(SOTA)的准确率,并且其行为与传统检索方式有显著差异**。密集检索的最新进展可能推动新一代搜索系统的诞生。 --- ### 对比表示学习中的负采样 近年来,在对比式表示学习(Contrastive Representation Learning)领域,研究发现**从更大的候选池中采样负样本**有助于提升模型性能。 在计算机视觉领域,He 等人(2019)通过维护一个动量更新的负样本池,将负样本池的大小与训练批大小解耦,从而显著提升了无监督视觉表示学习的效果(Chen et al., 2020b)。 类似地,Xiong 等人(2020)通过使用记忆银行(memory bank)改进了 DPR 模型(Wu et al., 2018),其中负样本的表示被冻结以保存更多候选。 **重点内容**: 与这些方法不同,ANCE 采取了更激进的策略,**直接从整个语料库中构建全局负样本**,并使用异步更新的 ANN 索引进行采样。 --- ### 密集检索在语言系统中的应用 密集检索不仅是实际应用的一部分,也是许多语言系统的**核心组件**。例如: - 为基于上下文的语言模型提供相关检索信息(Khandelwal et al., 2019; Guu et al., 2020) - 用于抽取式/生成式问答系统(Karpukhin et al., 2020; Lewis et al., 2020b) - 事实验证任务(Xiong et al., 2020) - 为预训练任务寻找同义句对(Lewis et al., 2020a) 在这些系统中,密集检索模型通常被冻结,或通过最终任务的信号间接优化。 **重点内容**: ANCE 与这些研究方向是**正交的**,它专注于密集检索的表示学习,而不是下游任务的优化。因此,**ANCE 提升的检索准确性可以广泛受益于各种语言系统**。 --- ### 总结 本节综述了神经信息检索、密集检索、对比式学习以及密集检索在语言系统中的应用等方向的相关研究。其中,ANCE 的关键贡献在于: 1. 证明基于表示的学习在检索性能上可媲美交互模型 2. 采用全局负样本构建策略,大幅提升检索质量 3. 为密集检索的表示学习提供了新的研究方向,进一步推动了密集检索的发展 ## 8 Conclusion 本文首先对密集检索(dense retrieval, DR)中表征学习的收敛性进行了理论分析。在常见的文本检索条件下,研究表明,DR训练中使用的局部负样本(local negatives)是无信息的,梯度范数较低,对学习收敛的贡献较小。这个发现是本文的重点之一,揭示了当前训练方法中存在的重要瓶颈。 接着,作者提出了 ANCE(Approximate Nearest Neighbor Contrastive Estimation)方法,通过从整个语料库中构建全局负样本(global negatives)来消除这一瓶颈。这也是本文的核心贡献之一。 实验部分展示了 ANCE 在网页搜索、开放型问答(OpenQA)任务以及一个商业搜索引擎的生产系统中的优势。这些实验结果验证了 ANCE 的有效性。 最后,作者通过实证研究支持了他们的理论:ANCE 所使用的负样本具有更大的梯度范数,能够降低随机梯度的方差,并显著提升训练的收敛性能。这进一步证明了全局负样本在密集检索训练中的重要性。 ## Appendix A Appendix ### A.1 更多实验细节 #### TREC DL 基准的详细信息 - **任务设置**:TREC DL 2019 包含两个任务:文档检索(Document Retrieval)和段落检索(Passage Retrieval)。 - **训练与开发数据**:使用 MS MARCO 数据集,包含一百万个 Bing 查询的段落级相关性标签。 - **文档语料库构建**:通过回填段落链接的正文内容构建文档语料库,并继承段落标签。 - **测试集标注**:由 NIST 标注员对过去 Track 参赛系统返回的前 10 个结果进行标注。 - **评估指标**:包括测试集上的 NDCG@10 和 MS MARCO Passage Dev 上的 MRR@10。由于文档检索(DR)结果标签覆盖率低,其召回率参考价值较低。 - **数据时差与变化问题**:段落训练数据与文档内容之间存在两年时差,部分原始文档已无法获取或内容发生变化,导致许多文档不再包含原始段落。 - **训练数据有效性**:部分参赛者发现段落训练数据比继承的文档标签更有效,原因可能与回填方式有关。 #### 开放问答(OpenQA)实验细节 - **DPR 实验设置**:参考其开源库([GitHub](https://github.com/facebookresearch/DPR))。 - **RAG 模型使用**:选择 RAG-Token(而非 RAG-Seq,因其在实验时尚未稳定)。 - **模型输入设置**:对 NQ 数据集使用 ANCE 提取的 top 20 段落输入 RAG-Token,对 TriviaQA 使用 top 100 段落输入 DPR 的 BERT Reader。 #### 基线模型 - **稀疏检索方法**: - 标准 BM25(bm25base) - 调整后的 BM25 with RM3 扩展(bm25tuned_rm3) - BERT 改进的 BM25(dct_tp_bm25e2) - **级联检索-重排序方法**:使用 BERT 重排序的 bm25exp_marcomb(在 MARCO 排行榜前列模型中表现最好)。 #### BERT-Siamese 配置 - 跟随 Luan et al. (2020) 的网络结构,使用 RoBERTa base 初始化,添加一个 768×768 的投影层,后接 LayerNorm。 #### 实现细节 - 每个 ANCE 训练周期通常耗时 1-2 小时,只要有新的负样本(negative)就立即替换旧的。 - 在约 10 个 epoch 后收敛,使用 LAMB 优化器,学习率分别为文档检索 5e-6,段落检索 1e-6。 - 更详细的超参数设置可在开源代码中找到。 #### 表格 2:TREC DL 标签在密集检索方法上的覆盖率 - 展示了不同密集检索方法(如 ANCE)与 BM25 在 top 100 文档中的重合度(Overlap)和“hole rate”。 - 重点:与 BM25 的重合度普遍较低,说明密集检索方法在文档选取上与传统方法差异较大。 --- ### A.2 与 TREC 2019 中稀疏检索的重合度 - **评估方式说明**:TREC 式评估只标注前 10 个结果,未标注的文档默认视为不相关。这可能导致“hole rate”较高。 - **hole rate 的意义**:反映评估系统与标注池系统的差异,不反映系统准确性。 - **密集 vs 稀疏检索**:密集检索方法与 BM25 重合度低(最多 25%),导致 hole rate 高,召回率不具代表性。 - **MS MARCO 的优势**:其标签基于 Bing 的复杂信号,而非单纯依赖稀疏检索结果,因此召回率更具鲁棒性。 - **未来建议**:若 TREC 2020 使用密集检索方法构建标注池,密集方法可能表现更好。 --- ### A.3 异步间隔对训练的影响 - **图 9** 展示了不同训练配置下 ANCE 的损失和 NDCG 表现。 - **主要发现**: - 学习率过高或刷新频率过低会导致训练波动。 - 每 5k batch 刷新一次可实现稳定收敛,但需要更多 GPU 资源。 - 适当配置 Trainer 与 Inferencer 的 GPU 比例和学习率,可有效降低异步间隔的影响。 --- ### A.4 超参数研究 - **表格 3**:展示不同超参数组合(学习率、Top K Neg 数量、刷新步长)在 MS MARCO 和 TREC DL 上的性能。 - **主要结论**: - 训练 BERT 模型计算成本高,难以大量探索超参数。 - 多数超参数选择依赖训练损失曲线和验证集表现。 - 最佳配置主要基于训练损失、验证 NDCG 和测试性能的一致性。 --- ### A.5 案例研究 - **ANCE 与 BM25 的对比案例**: - **优势案例(表 4)**:ANCE 能更好地捕捉语义相关性。例如,在搜索“瑞士最受欢迎的食物”时,BM25 可能匹配“墨西哥”相关文档,而 ANCE 更准确。 - **劣势案例(表 5)**:ANCE 有时检索到相关但不精确的文档(如“yoga bow”),或因缺乏领域知识(如“active margin”)而出错。 - **t-SNE 可视化(图 10~11)**: - 胜利案例中,不同文档在表示空间中分离明显。 - 失败案例中,表示空间较混杂,或相关文档太少导致性能波动。 - **总结**:ANCE 在语义匹配上优于 BM25,但在领域知识和精确匹配上仍有局限性。未来可进一步分析表示空间的结构以提升模型性能。 --- ## 总体总结 附录 A 提供了论文中密集检索模型(如 ANCE)在 TREC DL 和 OpenQA 任务上的详细实验配置、超参数设置、性能评估和案例分析。重点内容包括: - **数据构建与评估方法**:TREC DL 的标注方式与数据回填方式对实验结果的影响。 - **模型对比**:密集检索与稀疏检索在覆盖率、召回率和语义匹配上的差异。 - **训练与优化**:异步训练方式对性能的影响,以及不同超参数组合的实验表现。 - **案例分析**:通过真实查询场景展示 ANCE 的优势与不足,辅以 t-SNE 可视化表示空间结构。 这些附录内容为模型的可复现性和进一步改进提供了重要参考。