倒数排名融合(RRF)是一种用于评估多个先前排名结果中的搜索分数,以生成统一结果集的算法。在Azure AI搜索中,当并行执行两个或多个查询时,便会使用RRF。每个查询会生成一个排名结果集,而RRF则用于将这些排名合并和同质化为单个结果集,并在查询响应中返回。混合搜索和并行执行多个矢量查询等场景,都会始终使用RRF。
RRF基于倒数排名的概念,即搜索结果列表中第一个相关文档的排名的倒数。该方法旨在考虑项目在原始排名中的位置,并赋予在多个列表中排名较高的项目更高的重要性。这有助于提高最终排名的整体质量和可靠性,使其对融合多个有序搜索结果的任务更加有用。
RRF的工作流程如下:
- 从并行执行的多个查询中获取排名的搜索结果。
- 为每个排名列表中的结果分配倒数排名分数。对于搜索结果中的每个文档,引擎基于其在列表中的位置分配倒数排名分数。分数按公式计算,其中N是文档在列表中的位置,K是一个经过实验证明的最佳值为60的常量。
- 合并分数。对于每个文档,引擎将从每个搜索系统中获得的倒数排名分数相加,为每个文档生成合并分数。
- 引擎根据合并分数对文档进行排名和排序,得到的列表即为融合排名。
在混合搜索中,只有索引中标记为可搜索或查询中标记为可返回的字段才用于评分。搜索结果中仅返回标记为可返回或在查询的返回字段中指定的字段,同时还会返回它们的搜索分数。
每当有多个查询执行时,都会使用RRF。例如:
- 一个全文查询加上一个矢量查询(简单的混合场景),等于两个查询执行。
- 一个全文查询加上一个面向两个矢量字段的矢量查询,等于三个查询执行。
- 一个全文查询加上两个面向五个矢量字段的矢量查询,等于11个查询执行。
每次对结果排名时,属性都包含用于对结果进行排序的值。分数是由每种方法的排名算法生成的,每种算法都有自己的范围和幅度。例如,全文搜索使用BM25算法,没有上限;矢量搜索使用HNSW算法,其范围根据HNSW配置中指定的相似性指标而定;混合搜索使用RRF算法,其上限受融合的查询数限制;语义排名则使用语义排序器,其分数范围为0.00-4.00。
要获取子分数,可以使用最新预览版搜索文档REST API或某个提供该功能的Azure SDK beta版包。修改查询请求,将新的参数集添加到select(如果使用语义排序器)或count中即可。
在混合查询中,如果添加了矢量加权,则初始分数会受到加权乘数的影响。默认值为1.0,表示没有权重;如果添加了0.5的权重,则分数会降低;如果添加了2.0的权重,则分数会成为整体RRF分数中的较大因素。
默认情况下,搜索引擎会返回全文搜索的前50个最高排名匹配项以及矢量搜索的最相似的匹配项。在混合查询中,决定了响应中的结果数。默认情况下会返回统一结果集的前50个最高排名匹配项。通常搜索引擎会比和查找到更多结果,要使用分页参数、、和来返回更多结果。例如可以将设置为较大的值(默认值为1000)以从混合查询的文本端返回更多结果。