混合搜索重温:在 Elasticsearch 中引入线性检索器!
了解线性检索器如何利用加权分数和 MinMax 归一化来增强混合搜索,从而获得更精确、更一致的排名,并学习如何使用它。
Elasticsearch is packed with new features to help you build the best search solutions for your use case. Learn how to put them into action in our hands-on webinar on building a modern Search AI experience. You can also start a free cloud trial or try Elastic on your local machine now.
在上一篇博文中,我们介绍了重新设计的 "从零开始 "检索器框架,它可以创建复杂的排名管道。我们还探讨了互易排名融合(RRF)检索器如何通过合并不同查询的结果来实现混合搜索。虽然 RRF 很容易实现,但它有一个明显的局限性:它只关注相对排名,而忽略了实际得分。这就给微调和优化带来了挑战。
直线型寻回犬
在本篇文章中,我们将介绍linear retriever,它是我们支持混合搜索的最新成员!与rrf 不同,linear retriever 计算的是与文档匹配的所有查询的加权总和。这种方法既能保留结果集中每个文档的相对重要性,又能精确控制每个查询对最终得分的影响。因此,它为微调混合搜索提供了一种更直观、更灵活的方式。
定义一个线性检索器,其最终得分的计算公式为
就这么简单:
GET linear_retriever_blog/_search
{
"retriever": {
"linear": {
"retrievers": [
{
"retriever": {
"knn": {
...
}
},
"weight": 5
},
{
"retriever": {
"standard": {
...
}
},
"weight": 1.5
},
]
}
}
}注意到它有多简单直观了吗?(与rrf 非常相似!)这种配置允许您精确控制每种查询类型对最终排名的贡献程度,这与rrf 不同,后者仅依赖于相对排名。
需要注意的是:knn 分数可能有严格的界限,这取决于所使用的相似性指标。例如,使用余弦相似度或单位归一化向量的点积,得分总是在[0, 1] 范围内。相比之下,bm25 分数的可预测性较差,而且没有明确的界限。
评分缩放:KNN vs BM25
混合搜索面临的一个挑战是,不同的检索器会产生不同的分数。例如,请考虑以下情况:
查询 A 得分:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
100 | 1.5 | 1 | 0.5 |
查询 B 得分:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
bm25 | 0.63 | 0.01 | 0.3 | 0.4 |
您可以从上面看到这种差异:kNN 分数介于 0 和 1 之间,而bm25 分数可能相差悬殊。这种差异使得设置静态最佳权重以合并结果变得非常棘手。
归一化拯救:MinMax 归一化器
为了解决这个问题,我们引入了一个可选的minmax 归一化器,该归一化器使用以下公式将每个查询的分数独立缩放至[0, 1] 范围:
这就保留了每个文档在查询结果集中的相对重要性,从而更容易合并来自不同检索器的得分。正常化后,分数变为
查询 A 得分:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
bm25 | 1.00 | 0.01 | 0.005 | 0.000 |
查询 B 得分:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
bm25 | 1.00 | 0.000 | 0.465 | 0.645 |
现在,所有得分都在[0, 1] 范围内,加权总和的优化也更加简单明了,因为我们现在捕捉的是结果的重要性(相对于查询而言),而不是绝对得分,并能在不同查询中保持一致。
线性寻回器示例
现在,让我们通过一个例子来展示上述内容,以及linear Retriever 如何解决rrf 的一些不足之处。RRF 仅依靠相对排名,不考虑实际分数差异。例如,给出这些分数:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
bm25 | 100 | 1.5 | 1 | 0.5 |
rrf 分数 | 0.03226 | 0.03252 | 0.03200 | 0.03125 |
rrf 会将文件排序为
但是,doc1 的bm25 得分明显高于其他文件,而rrf 只查看相对排名,因此未能捕捉到这一点。linear Retriever 结合归一化处理,可以正确地考虑分数及其差异,从而得出更有意义的排名:
doc1 | doc2 | doc3 | 文档4 | |
|---|---|---|---|---|
knn | 0.347 | 0.35 | 0.348 | 0.346 |
bm25 | 1 | 0.01 | 0.005 | 0 |
如上图所示,doc1 的优秀排名和score 的bm25 都得到了适当的考虑,并反映在最终得分上。此外,所有分数现在都在[0, 1] 范围内,这样我们就能以更直观的方式对它们进行比较和组合(甚至建立离线优化流程)。
将所有内容整合在一起
要充分利用linear 检索器的正常化功能,搜索请求应如下所示:
GET linear_retriever_blog/_search
{
"retriever": {
"linear": {
"retrievers": [
{
"retriever": {
"knn": {
...
}
},
"weight": 5
},
{
"retriever": {
"standard": {
...
}
},
"weight": 1.5,
"normalizer": "minmax"
},
]
}
}
}这种方法结合了两方面的优点:既保留了linear Retriever 的灵活性和直观评分,又通过 MinMax 归一化确保了一致的评分缩放。
与我们所有的检索工具一样,linear 检索工具可以集成到分层检索树的任何层级中,并支持可解释性、匹配高亮、字段折叠等功能。
何时选择线性寻回犬,为什么会有区别
linear 猎犬:
通过利用实际得分,而不仅仅是排名,来保留相对重要性。
允许利用不同查询的加权贡献进行微调。
利用规范化增强一致性,使混合搜索更稳健、更可预测。
结论
linear retriever 已经在 Elasticsearch Serverless 以及 8.18 和 9.0 版本中可用!更多示例和配置参数可参阅我们的文档。试用一下,看看它如何改善您的混合搜索体验--我们期待您的反馈。搜索愉快
常见问题
与之前的互易等级融合(RRF)方法相比,线性检索器如何改进混合搜索?
在混合搜索中,线性寻回器比 RRF 具有若干优势。RRF 只关注相对排名,忽略实际得分,而线性检索器则计算查询的加权总和,保留每个文档的相对重要性。这种方法可以更精确地控制不同查询类型对最终排名的影响。此外,线性检索器还支持 MinMax 等归一化技术,从而可以更轻松地组合不同检索器的得分,优化最终搜索结果。这种灵活性和控制性提供了更加直观和微调的混合搜索体验。




