news 2026/11/2 11:11:36

RAG 重排实战:正确证据找到了,为什么还是没进上下文?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RAG 重排实战:正确证据找到了,为什么还是没进上下文?

RAG 重排实战:正确证据找到了,为什么还是没进上下文?

检索返回了 20 段内容,只取前 5 段送给模型;真正支持答案的证据在第 12 位。此时召回并非一无所获,问题出在最终选择。

重排(Reranking)在候选召回和上下文选择之间增加一次更细的相关性判断。它的目标是把已经找到的关键证据放到预算允许的位置,而不是凭空补出候选集里没有的内容。

1. 召回与重排分别承担什么

常见稠密检索分别编码问题和文档,再比较向量。Cross-encoder 则把问题与候选片段一起输入模型,为这一对文本计算相关性分数。

这使它有机会关注问题中的限定条件,但计算开销也通常高于单次向量比较,所以常用于较小候选集。Passage Re-ranking with BERT

原文也提到 LLM 重排与其他检索研究。不同方法在特定数据集上的排名表现,不能直接等同于当前 RAG 应用的回答正确率;必须沿生成链路继续验证。

2. 一个“例外条款被埋掉”的例子

问题是:“产品有缺陷,超过 30 天还能退款吗?”

片段覆盖的内容
A通常的 30 天退款期限
B提交退货申请的步骤
C有缺陷产品适用的超期例外

这是虚构示例。三段都谈退货,C 却更直接覆盖问题的条件。如果 C 没进上下文,生成模型即使认真阅读 A,也可能给出遗漏例外的回答。

成功的重排应帮助 C 进入最终上下文。它仍要检查片段是否有效、是否适用,相关性高不代表来源正确或最新。

3. 先固定候选集,再比较重排

准备一组固定问题,为每个问题标注相关片段。基线取同一批候选的前 5 条;实验组重排这批候选后再取前 5 条。不要同时改变召回器、候选数量和重排模型,否则难以判断改善来自哪里。

下面是新增的离线指标示例,不调用任何重排服务:

defranking_metrics(ranked_ids,relevant_ids,k=5):ifk<=0orlen(ranked_ids)!=len(set(ranked_ids)):raiseValueError("k 必须为正,排名中不能有重复 ID")relevant=set(relevant_ids)ifnotrelevant:return{"recall":None,"rr":None}top=ranked_ids[:k]recall=len(set(top)&relevant)/len(relevant)rr=next((1/rankforrank,iteminenumerate(top,1)ifiteminrelevant),0.0)return{"recall":recall,"rr":rr}print(ranking_metrics(["A","B","D","E","F","C"],{"C"}))print(ranking_metrics(["C","A","B","D","E","F"],{"C"}))

这个构造例子预期从 Recall@5=0、RR@5=0,变为 1 和 1,只验证指标含义,不证明任何实际模型的提升。

4. 几个指标不要混淆

Recall@5 的分母是该问题全部已标注相关片段数。如果有四条相关片段,前五名包含两条,召回率就是 0.5。若每题只有一条相关证据,它才退化为命中或未命中。

RR@5 是第一条相关结果名次的倒数,前五名没有相关结果时记零。对问题集的 RR 求平均才得到 MRR。上面的示例对没有相关标注的问题返回空值,应单独处理,不要悄悄混入排名平均分。

还应记录候选集 Recall@20、重排增加的延迟和最终答案质量。候选集里本来就没有证据时,重排无法解决召回缺失。

5. 平均分提高以后,还要看退化样本

重点检查正确证据被降到截断线之外、通用规则压过具体例外、重复片段挤掉互补证据三类情况。

分数通常不是经过校准的业务概率,不宜把某个重排分数直接解读为“有 90% 可能正确”。分数阈值需要在当前任务的数据上确定。

对于互相补充的证据,单纯按独立分数取前 k 条也可能不够。可以在控制变量的实验里增加去重和覆盖度策略,再比较结果,避免一次把所有组件都改掉。

6. 什么情况下值得保留重排

重排后的前 k 条应更完整地覆盖证据,生成答案也应更准确、引用更可靠,而且增加的延迟和费用在产品预算内。

评测时固定生成模型和提示词,并加入不可回答问题。一个排名指标更好的系统,也可能更愿意根据相关但不充分的内容作答。最终判断仍要落在用户得到的答案,而不是只看一个排序分数。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 11:07:02

三行命令跑通HTML转PDF:wkhtmltopdf 纯命令行实操手册

三行命令跑通HTML转PDF&#xff1a;wkhtmltopdf 纯命令行实操手册 【免费下载链接】wkhtmltopdf Convert HTML to PDF using Webkit (QtWebKit) 项目地址: https://gitcode.com/gh_mirrors/wk/wkhtmltopdf 网页要存档、报表要打印&#xff0c;复制粘贴总是差一口气&…

作者头像 李华
网站建设 2026/11/2 11:02:58

HarmonyOS 3DGS 滤镜切换实战:效果创建、参数管理与资源释放

HarmonyOS 3DGS 滤镜切换实战&#xff1a;效果创建、参数管理与资源释放 实际项目里&#xff0c;滤镜实例最容易出现的问题不是“接口不会调用”&#xff0c;而是状态分散、异步结果乱序、失败后没有回退。切换滤镜时画面稳定且旧效果被释放&#xff0c;需要把能力边界、生命周…

作者头像 李华
网站建设 2026/11/2 10:42:47

C++ 绘制画布标尺

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 10:42:47

C++字体库开发之fontconfig使用五

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华