目录
[1. 为什么要加 Rerank(重排)?](#1. 为什么要加 Rerank(重排)?)
[2. Recall@K 和 Precision@K 怎么取舍?](#2. Recall@K 和 Precision@K 怎么取舍?)
[3. Top-K 怎么动态调整?](#3. Top-K 怎么动态调整?)
[4. BM25 是什么?](#4. BM25 是什么?)
[5. 如果 BM25 已经很好了,向量检索还有必要吗?](#5. 如果 BM25 已经很好了,向量检索还有必要吗?)
1. 为什么要加 Rerank(重排)?
在 RAG 系统中,检索通常分为两步:初筛(召回) 和 精排(Rerank)。
-
初筛(如向量检索、BM25): 讲究的是"快"和"全"。它需要在海量(百万甚至千万级)文档中迅速找出可能相关的候选者。为了速度,初筛使用的模型往往是双塔结构(Query和Doc各自独立计算向量),这种结构无法捕捉 Query 和 Doc 之间深度的语义交叉关系。
-
精排(Rerank): 讲究的是"准"。Rerank 模型(通常是 Cross-Encoder)会将 Query 和候选 Doc 拼在一起同时输入模型。由于它能让字词之间产生深度的注意力交互(Attention),因此判断相关性的准确度极高。
总结来说: 加 Rerank 是为了弥补初筛阶段为了速度而牺牲的精度。初筛负责把包含答案的文档"捞"上来,Rerank 负责把最能准确回答问题的文档"排"到最前面,防止不相关的内容干扰大模型(LLM)。
2. Recall@K 和 Precision@K 怎么取舍?
这两个指标在 RAG 中代表了截然不同的诉求:
-
Recall@K(召回率): 在前 K 个检索结果中,包含了多少真正的相关文档。这是 RAG 的生命线。 如果没召回相关文档,大模型再聪明也是"巧妇难为无米之炊"。
-
Precision@K(精确率): 在前 K 个检索结果中,有多大比例是真正相关的。这是防止大模型"幻觉"的关键。 喂给大模型的无关信息越多,它越容易迷失(Lost in the Middle),且浪费 Token。
取舍策略:分阶段优化
在 RAG 系统中,我们不应该在一个阶段同时死磕这两个指标,而是应该分摊给两路流程:
-
检索(Retrieve)阶段保 Recall: 把 K 设大一点(例如 K=20 甚至 100),宁可错杀一千,不可放过一个。
-
重排(Rerank)阶段保 Precision: 对召回的文档进行精准打分,然后截取排名最高的小部分(例如截取前$3 到 5 个),送给大模型生成答案。
3. Top-K 怎么动态调整?
固定给大模型喂 K=5 个文档是很死板的。有时候 1 个文档就足以完美回答问题,有时候需要综合 10 个文档。动态调整 Top-K 可以有效减少无关上下文带来的噪音。
常用的动态调整策略有三种:
-
分数阈值截断(Thresholding): Rerank 之后,不仅看排名,还要看绝对分数。比如只保留相似度分数 > 0.8 的文档。如果只有 2 个文档及格,那这一次的 K 就是 2。
-
断崖式截断(Score Drop / Elbow Method): 观察 Rerank 排序后的分数落差。如果第 1 到第 3 名的分数都是 0.9 左右,而第 4 名突然掉到了 0.6,那么就在第 3 名这里"砍一刀"。
-
上下文窗口动态适配: 根据大模型的 Context Window 和 Query 的长度,动态计算剩余多少 Token 可以用来塞文档。配合分数优先级,按顺序把高分文档塞进去,直到 Token 达到安全阈值。
4. BM25 是什么?
BM25(Best Matching 25)是信息检索领域最经典、最有效的稀疏检索(Sparse Retrieval)算法。它不需要训练任何神经网络,核心原理是基于词频统计。
它的计算主要考虑三个维度:
-
TF(词频): 你的搜索词在这个文档里出现了多少次。出现越多,相关性越大。
-
IDF(逆文档频率): 你的搜索词在所有文档库里有多罕见。像"的"、"是"这种词 IDF 很低;而像"碳纳米管"、"Rerank"这种专业词汇 IDF 很高。罕见词的匹配权重更大。
-
文档长度归一化: 如果一个文档非常长,那它命中关键词的概率自然会变大。BM25 会对过长的文档进行适度惩罚,保证公平。
5. 如果 BM25 已经很好了,向量检索还有必要吗?
极其有必要。
BM25 属于"字面匹配",它的强项在于找专有名词、产品型号、身份证号、特定缩写 。但在 RAG 场景中,用户的提问往往是极其口语化的,这就导致了语义鸿沟。
-
BM25 的死穴: 假设你的知识库里有一句话叫 "移动设备续航能力不足" 。用户的 Query 是 "手机没电了怎么办"。这两个句子在字面上没有任何交集,BM25 连一个字都匹配不上,直接返回 0 分。
-
向量检索的强项: 向量模型理解的是"语义"。在向量空间里,"手机"和"移动设备"、"没电"和"续航不足"距离非常近。向量检索能轻松跨越词汇表象,抓取内在含义。
终极解法:混合检索(Hybrid Search)
在生产环境中,最成熟的做法是 BM25 + 向量检索 双路召回。让 BM25 兜底精准的关键词匹配,让向量检索负责泛化的语义理解,最后再通过 Rerank 把两路合并起来重新排序。这也是目前业界主流 RAG 架构的标准范式。