在我们系列的上一篇博客中,我们介绍了语义重排序的概念。在这篇博客中,我们将讨论我们训练并在技术预览中发布的重排序模型。
Elastic 的一个目标是降低实现高质量文本搜索的门槛。基于 Lucene,Elasticsearch 提供了一套丰富的可扩展的、优化良好的全文检索原语,包括使用 BM25 评分的词法检索、学习稀疏检索和向量数据库。我们最近在搜索 API 中引入了检索器的概念,这使得包括语义重排序在内的组合操作成为可能。同时,我们也在致力于将高级搜索管道引入ES|QL。
从我们的无服务器产品开始,我们在技术预览中发布了 Elastic Rerank 模型。这是一个交叉编码器重排序模型。随着时间推移,我们计划将其整合到我们的全产品套件中,并提供优化版本以在任何集群中的机器学习节点上运行,就像我们对检索模型所做的那样。我们还在开发一些令人兴奋的新推理功能,这些功能将非常适合重排序工作负载,因此请期待进一步的公告。
这个版本主要针对英文文本重排序,并在推理成本方面提供了显著的质量优势。本文将讨论其架构和训练的一些方面。但首先……
在我们上一次的博客中,我们讨论了 BM25 评分(简称 BM25)的词法检索在索引成本很高的情况下是一个有吸引力的选择。然而,较新的方法通常在相关性上相比 BM25 有显著的提升,尤其是针对更复杂的自然语言查询。
正如我们之前讨论过的那样,BEIR 套件是一个高质量且广泛使用的英文检索基准。它也被 MTEB 基准用来评估文本嵌入的检索质量。它包括各种任务,包括开放领域的问答(QA),BM25 通常在这方面表现较差。由于 BM25 是一个成本效益高的第一阶段检索器,了解我们可以通过重排序在多大程度上“修正”其在 BEIR 中的相关性是很有趣的。
在我们下一篇博客中,我们将详细分析下表中所列的不同高质量重排序模型。这包括对其行为的更多定性分析以及一些关于成本与相关性权衡的额外见解。在这里,我们遵循现有的做法,描述它们在 BM25 检索的前 100 个结果中进行重排序的有效性。这是一个相当深入的重排序,不一定适合在 CPU 上进行推理。然而,正如我们将在下一篇博客中展示的那样,它提供了一个合理的近似,以显示通过重排序可以实现的相关性提升。
模型 | 参数数量 | 平均 nDCG@10 |
---|---|---|
BM25 | - | 0.426 |
MiniLM-L-12-v2 | 33M | 0.487 |
mxbai-rerank-base-v1 | 184M | 0.48 |
monoT5-large | 770M | 0.514 |
Cohere v3 | n/a | 0.529 |
bge-re-ranker-v2-gemma | 2B | 0.568 |
Elastic | 184M | 0.565 |
BEIR 中 BM25 检索的前 100 个文档的平均 nDCG@10
为了展示不同模型的相对成本与相关性的权衡,我们绘制了下表。
BEIR 中 BM25 检索的前 100 个文档的平均nDCG@10。向上和向左代表更好。
为了完整性,我们还展示了 Elastic Rerank 在各个数据集上的结果。这代表了整个套件中平均 39% 的提升。截至撰写本文时,BM25 经重排序后在MTEB 排行榜上大约位列第 20 名。所有更有效的模型都使用了大嵌入,至少有 1024 维,并且模型显著更大(平均比 Elastic Rerank 大 30 倍)。
数据集 | BM25 nDCG@10 | 重排序 nDCG@10 | 提升 |
---|---|---|---|
AguAna | 0.47 | 0.68 | 44% |
Climate-FEVER | 0.19 | 0.33 | 80% |
DBPedia | 0.32 | 0.45 | 40% |
FEVER | 0.69 | 0.89 | 37% |
FiQA-2018 | 0.25 | 0.45 | 76% |
HotpotQA | 0.6 | 0.77 | 28% |
Natural Questions | 0.33 | 0.62 | 90% |
NFCorpus | 0.33 | 0.37 | 12% |
Quora | 0.81 | 0.88 | 9% |
SCIDOCS | 0.16 | 0.20 | 23% |
Scifact | 0.69 | 0.77 | 12% |
Touche-2020 | 0.35 | 0.36 | 4% |
TREC-COVID | 0.69 | 0.86 | 25% |
MS MARCO | 0.23 | 0.42 | 85% |
CQADupstack (平均) | 0.33 | 0.41 | 27% |
*使用 Elastic Rerank 模型在 BEIR 中 BM25 检索的前 100 个文档的 nDCG@10
正如我们之前讨论过的,语言模型通常分多个阶段进行训练。第一阶段训练从随机初始化的模型权重开始,训练各种不同的无监督任务,例如掩码词预测。这些预训练模型随后在进一步的下游任务上进行训练,如文本检索,这一过程称为微调。有大量的实验证据表明,预训练过程生成了有用的特征,这些特征可以在新任务中重新利用,这一过程称为迁移学习。与单独训练下游任务相比,生成的模型表现显著更好,训练时间显著减少。这种技术支持了基于 Transformer 的 NLP 在 BERT 之后的许多成功。
预训练方法和模型架构的具体选择也会影响下游任务的性能。对于我们的重排序器,我们选择从DeBERTa v3 检查点开始训练。它结合了预训练文献中的各种成功理念,并在微调后在各种 NLP 基准上提供了与模型大小相关的最先进性能。
简要总结一下这个模型:
如果你感兴趣,可以在这里找到详细信息。
对于第一个版本,我们训练了这个模型家族的基础变体。这个模型有 184M 参数,但由于其词汇表大约是 BERT 的 4 倍,骨干部分只有 86M 参数,输入嵌入层使用了 98M 参数。这意味着推理成本与 BERT 基础版相当。在我们下一篇博客中,我们将探讨预算受限重排序的最佳策略。简而言之,我们计划通过蒸馏训练该模型的较小版本。
每当你在模型上训练一个新任务时,总是存在遗忘重要信息的风险。因此,我们训练 Elastic 重排序器的第一步是尽量从 DeBERTa 中提取相关性判断。我们使用标准的池化方法;特别是,我们添加了一个头部,计算 A(D(L(h(CLS)))A(D(L(h(CLS))) 其中 AA 是 GeLU 激活,DD 是 dropout 层,LL 是线性层。在预训练中,CLS 标记表示,用于下一个句子的分类任务。这与相关性评估高度一致,因此作为头部的输入是一个自然的选择。
我们训练头部参数到收敛,冻结模型的其余部分,在我们的全训练数据的一个子集上进行。这一步更新了头部,从预训练的 CLS 标记表示中读取有用的信息,用于相关性判断。进行这样的两步微调,使得最终在 BEIR 上的 nDCG@10 提升了大约 2%。
通常用对比方法训练排序任务。具体来说,一个查询会与一个相关(或正面)文档和一个或多个不相关(或负面)文档进行比较,模型被训练为更喜欢相关的那个。与使用纯对比损失(如最大化正面文档的对数概率)不同,一个强大的教师模型可以提供对文档相关性的真实评估。这种选择解决了负面示例标签错误的问题。它还为每个查询提供了比仅仅最大化正面文档的对数概率更多的信息。
为了训练我们的交叉编码器,我们使用教师模型提供一组分数,从中我们使用softmax 函数计算正面和负面文档的参考概率分布:
$$P(q,d)=\frac{e^{score(q,d)}}{\sum_{d' \in p \cup N} e^{score(q,d')}}$$
这里,q 是查询文本,p 是正面文本,N 是负面文本集,d ∈ p ∪ N,score 函数是交叉编码器的输出。
我们最小化交叉编码器分数与参考分布的交叉熵。我们还尝试了Margin-MSE损失,它在训练 ELSER 时效果良好,但发现交叉熵对重排序任务更有效。
这种整体公式自然解释了将点排名解释为评估每个文档与查询相关的概率。在这种情况下,最小化交叉熵相当于通过最大似然估计拟合概率模型,具有这种估计器所赋予的良好性质。相比于 Margin-MSE,我们还认为我们获得了收益,因为交叉熵允许我们了解所有分数之间的关系,因为它通过完全匹配参考分布来最小化。这很重要,因为正如我们下面讨论的那样,我们训练时使用了多个负面示例。
对于教师模型,我们使用一个强大的双编码器模型和一个强大的交叉编码器模型的加权平均集合。我们发现双编码器提供了对负面示例更细致的评估,我们假设这是由于大批量训练对比数百万不同的文本每批次。然而,交叉编码器在区分正面和负面示例方面更好。事实上,我们预期在这方面还有进一步的改进。具体来说,对于模型选择,我们使用一个小但有效的代理来执行多样化检索任务,我们计划探索是否有利于使用黑盒优化我们的教师在这个任务。
训练数据集和负面采样对模型质量至关重要。
我们的训练数据集包括开放 QA 数据集和自然对的,例如文章标题和摘要。我们对这些数据集进行了一些基本的清理和模糊去重。使用开源 LLM,我们还生成了大约 18 万对具有不同相关程度的合成查询和段落。我们使用多阶段提示策略,确保这个数据集涵盖多样的话题和各种查询类型,如关键词搜索、精确短语匹配以及短和长的自然语言问题。总的来说,我们的训练数据集包含大约 300 万个查询。
普遍观察到,质量会随着重排序深度的增加而下降。通常的难负样本挖掘使用浅层采样的检索结果:它为每个查询寻找最难的负样本。文档的多样性随着检索深度的增加而增加,我们认为典型的难负样本挖掘因此没有向重排序器呈现足够的多样性。特别是,训练必须展示查询和负面文档之间关系的充分多样性。
这种缺陷不能通过增加整体查询和文档多样性来解决;训练必须包括从检索结果的深尾部分来的负面文档。因此,我们使用多种方法提取每个查询的前 128 个文档。然后,我们使用一个由它们的分数形成的概率分布,从这个候选池中抽取五个负样本。每个查询使用这么多负样本并不典型;然而,我们发现增加抽样的负样本数量显著提高了最终质量。
使用大量多样的负样本集的一个好处是,它应该有助于模型校准。这是将模型分数映射到有意义的尺度(如相关性概率估计)的过程。校准良好的分数为下游处理或直接给用户提供有用的信息。它们还帮助其他任务,如选择一个阈值以删除结果。我们计划在单独的博客中发布一些我们研究校准策略的工作,以及它们如何有效应用于不同的检索和重排序模型。
训练语言模型传统上需要学习率调度以实现最佳结果。这是指随着训练进展改变用于梯度下降的步长乘数的过程。它带来了一些挑战:必须提前知道总训练步骤数;它还引入了多个额外的超参数需要调整。
一些最近有趣的工作表明,如果采用一种新的权重更新方案,包括沿优化轨迹平均参数,则可以放弃学习率调度。我们采用了这个方案,使用 AdamW 作为基础优化器,发现它产生了出色的结果,而且易于调整。
在本文中,我们介绍了新的 Elastic Rerank 模型。它从 DeBERTa v3 基础模型微调而来,使用了一个精心准备的数据集,通过双编码器和交叉编码器模型的集合进行蒸馏。
我们展示了它在词法检索结果的重排序中提供了最先进的相关性。此外,它使用的参数比竞争模型少得多。在我们下一篇博客中,我们将更详细地研究其行为,并重新审视我们在本文中比较的其他高质量模型。因此,我们将提供一些关于模型和重排序深度选择的额外见解。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有