介绍 Elastic Rerank:Elastic 的新语义重新排序模型
2024年11月29日 | by mebius
作者:来自 ElasticThomas Veasey,Quentin Herreros及Thanos Papaoikonomou
了解 Elastic 的新重新排名模型是如何训练的以及它的表现如何。
在本系列的上一篇博客中,我们介绍了语义重新排序的概念。在本篇博客中,我们将讨论我们训练过的、即将在技术预览版中发布的重新排序器。
简介
Elastic 的目标之一是降低实现高质量文本搜索的标准。Elasticsearch 以 Lucene 为基础,提供了一组丰富的可扩展且经过优化的全文检索原语,包括使用 BM25 评分的词汇检索、学习稀疏检索和向量数据库。我们最近将检索器(retrievers)的概念引入了搜索 API,允许进行包括语义重新排序在内的可组合操作。我们还致力于将高级搜索管道引入 ES|QL。
从我们的无服务器(serverless)产品开始,我们将在技术预览版中发布 Elastic Rerank 模型。这是一个跨编码器重新排序模型。随着时间的推移,我们计划将其与我们的完整产品套件集成,并提供优化版本以在任何集群中的 ML 节点上运行;就像我们对检索模型(retrieval model)所做的那样。我们还一直在研究一些令人兴奋的新推理功能,这些功能非常适合重新排名工作负载,因此请期待进一步的公告。
第一个版本针对英文文本重新排名,与我们评估的其他模型相比,在推理成本函数的质量方面提供了一些显着优势。在这篇博文中,我们将讨论其架构和培训的一些方面。但首先……
它如何比较?
在我们上一篇博客中,我们讨论了使用 BM25 评分或(简称 BM25)进行词汇检索如何在使用稀疏或密集模型的索引成本非常高的情况下代表一种有吸引力的选择。然而,与 BM25 相比,较新的方法往往会带来非常显著的相关性改进,特别是对于更复杂的自然语言查询。
正如我们之前所讨论的,BEIR 套件是一个高质量且广泛使用的英语检索基准。它也被 MTEB 基准用于评估文本嵌入的检索质量。它包括各种任务,包括 BM25 通常难以胜任的开放域问答 (Question Answering– QA)。由于 BM25 代表了一种具有成本效益的第一阶段检索器,因此了解我们可以在多大程度上使用重新排名来 “修复” 其由 BEIR 衡量的相关性是很有趣的。
在我们的下一篇博客中,我们将对下表中包含的不同高质量重新排名器进行详细分析。这包括对其行为的更多定性分析以及对其成本相关性权衡的一些额外见解。在这里,我们遵循现有技术并描述它们对 BM25 检索的前 100 个结果进行重新排序的有效性。这是相当深的重新排序,我们不一定推荐在 CPU 上进行推理。但是,正如我们将在下一篇博客中展示的那样,它提供了你可以通过重新排序实现的相关性提升的合理近似值。
Model | Parameter Count | Average 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 对前 100 个 BM25 检索文档进行重新排序的平均 nDCG@10
为了让你了解不同模型的相对成本相关性权衡,我们绘制了下表。
为了完整起见,我们还在下面展示了 Elastic Rerank 的单个数据集结果。这代表整个套件的平均改进率为 39%。在撰写本文时,这使重新排名的 BM25 在 MTEB 排行榜上的所有方法中排名第 20 位左右。所有更有效的模型都使用大型嵌入,至少有 1024 个维度,并且模型明显更大(平均比 Elastic Rerank 大 30⨉)。
Dataset | BM25 nDCG@10 | Reranked nDCtgcodeG@10 | Improvement |
---|---|---|---|
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% |
Scifatgcodect | 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 (avg) | 0.33 | 0.41 | 27% |
架构
正如我们之前讨论过的,语言模型通常分多个步骤进行训练。第一阶段训练采用随机初始化的模型权重,并在各种不同的无监督任务(例如掩码标记预测)上进行训练。然后,这些预训练模型在进一步的下游任务(例如文本检索)上进行训练,这个过程称为微调。有大量经验证据表明,预训练过程会生成有用的特征,这些特征可以在称为迁移学习的过程中重新用于新任务。与单独训练下游任务相比,生成的模型显示出明显更好的性能,并且训练时间显著缩短。这种技术为基于 Transformer 的 NLP 在 BERT 之后取得的许多成功奠定了基础。
确切的预训练方法和模型架构也会影响下游任务的性能。对于我们的重新排序器,我们选择从 DeBERTa v3 检查点进行训练。这结合了预训练文献中的各种成功想法,并在微调后在各种 NLP 基准上提供了与模型大小相关的最新性能。
为了简要概括这个模型:
- DeBERTa 引入了一种解耦的位置信息与内容编码机制,使其能够更细致地学习内容和序列中其他标记位置之间的关系。这被认为对重新排序任务尤为重要,因为查询和文档文本中的单词匹配及语义比较可能是关键环节。
- DeBERTa v3 采用了 ELECTRA 的预训练目标,类似 GAN 的方式,同时训练模型生成高效的 “假” 标记并学习识别这些标记的伪造性质。他们还对这一过程的参数化提出了小幅改进。
如果你有兴趣,可以在此处找到详细信息。
对于第一版,我们训练了该模型家族的基础版本。它包含 184M 个参数,但由于其词汇表大小约为 BERT 的 4 倍,骨干主干仅占 86M 个参数,而输入嵌入层使用了 98M 个参数。因此,其推理成本与 BERT Base 相当。
在下一篇博客中,我们将探讨预算受限的重新排序任务的最佳策略。简单来说,我们计划通过蒸馏(distillation)技术训练该模型的一个更小版本。
数据集和训练
每当你在模型上训练新任务时,总是存在忘记重要信息的风险。因此,我们训练 Elastic Reranker 的第一步是尽最大努力从 DeBERTa 中提取相关性判断。我们使用标准池化方法;特别是,我们添加了一个头部:
- 计算A(D(L(h([CLS]))) 其中A 是 GeLU 激活,D 是 dropout 层,L 是线性层。在预训练中,[CLS] 标记表示,h([CLS]),用于下一个句子分类任务。这与相关性评估非常吻合,因此将其用作头部的输入是自然选择,
- 计算输出激活的加权平均值以对查询文档对(query-document pair)进行评分。
我们对头部参数进行训练,使其收敛,并在完整训练数据的子集上冻结模型的其余部分。此步骤更新头部,以从预训练的[CLS] 标记表示中读取可用于相关性判断的有用信息。执行这样的两步微调可以使 BEIR 上的最终 nDCG@10 提高约 2%。
通常使用对比方法训练排名任务。具体而言,将查询与一个相关(或正)文档和一个或多个不相关(或负)文档进行比较,然后训练模型以偏好相关文档。与使用纯对比损失(如最大化正文档的对数概率)不同,可以使用强大的教师模型来提供文档相关性的基本事实评估。这种选择可以处理诸如错误标记负面示例等问题。它还为每个查询提供了比仅仅最大化相关文档的对数概率更多的信息。
为了训练我们的交叉编码器,我们使用一个老师(teacher)来提供一组分数,我们使用 softmax 函数根据该分数计算每个查询的正文档和负文档的参考概率分布,如下所示:
这里,q 是查询文本,p 是正文本,N 是负文本集合,d∈p∪N, score 函数是交叉编码器的输出。
我们利用此参考分布最小化交叉编码器得分的交叉熵。我们还尝试了 Margin-MSE 损失,它在训练 ELSER 时效果很好,但发现交叉熵对于重新排序任务更有效。
整个公式如下,因为将逐点排序解释为评估每个文档与查询相关的概率是很自然的。在这种情况下,最小化交叉熵相当于通过最大似然拟合概率模型,并具有此类估计器赋予的良好属性(nice properties)。与 Margin-MSE 相比,我们还认为我们获得了收益,因为交叉熵使我们能够了解所有得分之间的关系,因为它是通过精确匹配参考分布来最小化的。这很重要,因为正如我们在下面讨论的那样,我们用多个负数进行训练。
对于教师(teacher),我们使用强双编码器模型和强交叉编码器模型的加权平均集成。我们发现双编码器对反面例子的评估更加细致入微,我们假设这是由于大批量训练每批对比数百万个不同的文本。然而,交叉编码器在区分正面和负面例子方面表现更好。事实上,我们预计在这方面会有进一步的改进。具体来说,对于模型选择,我们使用一个小而有效的代理来完成多样化的检索任务,我们计划探索是否有必要在这个任务上使用老师的黑盒优化。
训练数据集和负采样对模型质量至关重要。
我们的训练数据集包括开放的 QA 数据集和具有自然对的数据集,如文章标题和摘要。我们对这些数据集应用了一些基本的清理和模糊重复数据删除。使用开源 LLM,我们还生成了大约 18 万对具有不同相关程度的合成查询和段落。我们使用了多阶段提示策略来确保该数据集涵盖不同的主题和各种查询类型,例如关键字搜索、精确短语匹配以及短和长自然语言问题。总的来说,我们的训练数据集包含大约 300 万个查询。
人们普遍观察到,质量会随着重新排序的深度而下降。通常,硬负例挖掘(hard negative mining)使用浅层采样检索结果:它会搜索每个查询的最难的负样本。文档多样性随着检索深度而增加,因此我们认为典型的硬负例挖掘不会为重新排序器提供足够的多样性。特别是,训练必须展示查询和负利文档之间关系的足够多样性。
这个缺陷不能通过增加整体查询和文档多样性来解决;训练必须包括来自检索结果深尾的负例文档。为此,我们使用多种方法提取每个查询的前 128 个文档。然后,我们使用由其分数形成的概率分布从这个候选池中抽取五个负样本。每个查询使用这么多负样本并不常见;但是,我们发现增加抽样负样本的数量会显著提高最终质量。
为每个查询使用大量且多样化的负样本集的一个很好的副作用是它应该有助于模型校准。这是一个将模型分数映射到有意义的尺度(例如相关概率的估计值)的过程。经过良好校准的分数可为下游处理或直接向用户提供有用的信息。它们还有助于完成其他任务,例如选择丢弃结果的截止值。我们计划在单独的博客中发布一些我们研究校准策略的工作,以及如何有效地将它们提供给不同的检索和重新排名模型。
训练语言模型传统上需要学习率调度才能获得最佳结果。这是随着训练的进行,梯度下降使用的步长乘数发生变化的过程。它带来了一些挑战:必须提前知道训练步骤的总数;它还引入了多个额外的超参数来调整。
最近的一些有趣的工作表明,如果采用一种新的权重更新方案,包括沿优化轨迹对参数进行平均,则可以放弃学习率调度。我们采用了这种方案,使用 AdamW 作为基础优化器,发现它产生了出色的结果并且易于调整。
总结
在这篇博文中,我们介绍了新的 Elastic Rerank 模型。它是使用双编码器和交叉编码器模型集合的提炼,在精心准备的数据集上对 DeBERTa v3 基础模型进行微调。
我们表明,它提供了最先进的相关性重新排序词汇检索结果。此外,它使用的参数比竞争模型少得多。在我们的下一篇博文中,我们将更详细地研究它的行为,并重新审视我们在这里与之比较的其他高质量模型。因此,我们将提供一些关于模型和重新排序深度选择的额外见解。
Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在你的本地机器上试用 Elastic。
原文:Introducing Elastic Rerank: Elastic’s new semantic re-ranker model – Search Labs
文章来源于互联网:介绍 Elastic Rerank:Elastic 的新语义重新排序模型
相关推荐: OpenTelemetry 演示与 OpenTelemetry 的 Elastic 分发
作者:来自 ElasticRoger Coll 了解 Elastic 如何致力于支持用户使用 OpenTelemetry。探索我们对 OpenTelemetry Demo 的公开部署,并了解 Elastic 的解决方案如何增强你的可观察性体验。 最近,Elas…