2039 字
约 6 分钟
5
多路召回设计

多路召回设计

  1. 引言2. BM25(Best Matching 25)检索BM25(Best Matching 25) 是一种在信息检索(Information Retrieval)领域广泛使用的排名函数,用于评估一个文档与搜索查询的相关性。它是基于概率检索框架对 TF-IDF 算法的改进,特别是在处理...

引言

BM25(Best Matching 25)检索

BM25(Best Matching 25) 是一种在信息检索(Information Retrieval)领域广泛使用的排名函数,用于评估一个文档与搜索查询的相关性。它是基于概率检索框架对 TF-IDF 算法的改进,特别是在处理词频饱和及文档长度归一化方面表现更为优秀。

目前,BM25 及其变体(如 BM25F)是 Lucene、Elasticsearch 和 Solr 等主流搜索引擎的默认相关性评分算法。

1. 核心公式

BM25 的核心思想是计算查询 $$ 的相关性分数,并将这些分数累加。

其标准数学公式如下:

变量含义说明:
  • $$ 的最终相关性得分。
  • $$ 个关键词(Query Term)。
  • $$ 的逆文档频率(Inverse Document Frequency)。
  • $$ 中出现的频率(Term Frequency)。
  • $$ 的长度(即文档中词的总数)。
  • $$:表示整个文档集合中所有文档的平均长度(Average Document Length)。
  • $$ 之间)。
  • $$)。

2. 公式拆解与原理

BM25 公式主要由三个部分组成:IDF 组件TF 饱和度组件文档长度归一化组件

2.1 IDF (逆文档频率)

IDF 用于衡量一个词的稀有程度。如果一个词在很多文档中都出现(如 "的", "是"),它的权重应该很低;如果一个词很少出现,它的权重应该很高。

BM25 中使用的 IDF 公式通常为:

其中:

  • $$:表示索引中的文档总数。
  • $$ 的文档数量。
  • $$:用于平滑处理,防止除以零或取对数负无穷。
2.2 TF (词频) 与 饱和度 ($$)

在传统的 TF-IDF 中,词频得分是线性的(或对数的),这意味着一个词出现次数越多,得分越高且无上限。但在实际搜索中,一个词出现 100 次并不代表其相关性是出现 1 次的 100 倍。

BM25 引入了参数 $$ 来控制词频的饱和度

  • 当 $$(在忽略长度归一化的情况下)。
  • 这意味着一旦一个词在文档中出现了一定次数,再次出现对分数的贡献会急剧减小。
2.3 文档长度归一化 ()

长文档往往包含更多的词,因此更容易包含查询词。为了公平起见,需要对长文档进行惩罚,对短文档进行补偿。

分母中的 部分负责此功能:

  • 如果 $(长文档),分母变大,得分降低。
  • 如果 $$(短文档),分母变小,得分提高。
  • 参数 $****$ 控制归一化的强度:
  • :完全归一化。
  • :不进行归一化(完全忽略文档长度)。

3. BM25 与 传统 TF-IDF 的对比

特性 传统 TF-IDF BM25
词频 (TF) 增长 线性增长(Linear)。词出现越多分越高,无上限。 渐进饱和(Saturation)。词频增加到一定程度后,分数增长趋缓。
文档长度 通常需要额外的余弦相似度归一化。 内置了可调节的长度归一化机制。
参数调节 较少,通常是固定的公式。 有 $$ 两个超参数可供根据数据分布进行微调。
适用场景 简单的文本挖掘任务。 搜索引擎、推荐系统召回。

4. 参数调优建议

在实际应用(如 Elasticsearch)中,默认参数通常表现良好,但针对特定数据可以微调:

  • ** (默认约 1.2)**:
  • 如果你希望文档中词频更高时分数差异更明显,可以调大 。
  • 如果是短文本(如标题搜索),词频通常很低, 的影响较小。
  • ** (默认 0.75)**:
  • 如果文档长度差异很大,且长文档确实包含更多垃圾信息,保持 或更高。
  • 如果你索引的是精准的短文本(如商品名称),长度对相关性影响不大,可以尝试减小 。
  • 如果文档越长代表信息量越丰富(相关性越高),可以将 。

5. 总结

BM25 算法是召回(Retrieval)阶段的黄金标准。它通过非线性的词频饱和及精细的长度归一化,解决了传统 TF-IDF 在长文本和高频词场景下的缺陷,能够更准确地反映查询与文档的语义相关性。

Rank

1. RRF 初次排 (Reciprocal Rank Fusion)

RRF(倒数排名融合) 是一种将多个检索结果列表(例如:一个是 BM25 的结果列表,一个是向量检索的结果列表)合并成一个单一列表的算法。它通常被称为“初次排序”或“粗排融合”。

为什么需要 RRF?

不同的召回算法输出的分数范围完全不同:

  • BM25 的分数可能是 $$(基于词频,无上限)。
  • 向量检索(余弦相似度)的分数通常在 $$ 之间。 直接把这两个分数相加(例如 $$)是没有意义的,因为 BM25 会完全主导结果。RRF 忽略具体的分数,只看排名(Rank),从而解决了“分数归一化”的难题。
RRF 核心公式

公式中的变量含义如下:

  • :表示某一个文档。
  • $)。
  • 个列表中的排名位置(从 1 开始,即第一名为 1)。
  • )。它的作用是减缓排名靠前的文档权重的衰减速度。
举个例子

假设我们设定 $$(为了计算简单):

  • BM25 列表:文档 A 排第 1,文档 B 排第 100。
  • 向量列表:文档 B 排第 1,文档 A 排第 100。 计算 RRF 得分:
  • 文档 A 得分:$$
  • 文档 B 得分:$$ 结果:两者得分相同,都被提升到了顶部。RRF 倾向于奖励在多个列表中都排名靠前的文档。

2. Dranker 精排 (Deep Ranker / Distilled Ranker)

注:在业界标准术语中,通常称之为 Re-ranker (重排序)Cross-Encoder (交叉编码器)。你提到的 "Dranker" 极大概率是 Deep RankerDistilled Ranker 的缩写/谐音,指代基于深度学习的精排模型。

精排(Fine Ranking) 是在召回和融合之后,对候选的 Top-N(例如前 50 个)文档进行极其精细的语义打分。

核心机制:Cross-Encoder (交叉编码器)

与向量召回(Bi-Encoder,双塔模型)不同,精排模型的工作方式如下:

  • 输入:它将“查询 Query”和“文档 Document”拼接在一起,作为一个整体输入到 BERT 等模型中。
  • 输入格式:[CLS] Query [SEP] Document [SEP]
  • 处理:模型内部的注意力机制(Self-Attention)允许 Query 中的每个字与 Document 中的每个字进行深度交互
  • 输出:直接输出一个 $$ 之间的相关性概率分数。
为什么叫“精”排?
维度 向量召回 (Bi-Encoder) 精排 (Cross-Encoder / Dranker)
计算位置 离线计算文档向量,在线只算距离。 在线实时计算整个模型推理。
计算复杂度 极低(点积运算)。 极高(BERT 完整推理)。
精度 较低。只能捕捉模糊的语义相似。 极高。能理解逻辑关系、否定词、因果关系。
处理数据量 全库(百万/亿级)。 仅处理 Top 50 或 Top 100。
多路召回设计
http://clxhxhhr.top/posts/283/
作者
clxstart
发布于
2026-07-26
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。