Reranker 训练数据怎么构造?
正负样本选择、标注方法与数据来源,对 RAG 检索质量的影响
原题:在构建重排序(Reranker)模型时,如何系统地设计和构造用于微调的训练数据集?请详细说明正负样本的选择策略、标注方法、数据来源及其对RAG流程中检索质量的影响。
模型微调 · 美团真题
回答与解析
核心原则
Reranker 要学习的是当前业务对“相关”的定义,训练候选必须接近线上召回器实际产生的分布。正负比例、难负样本占比和一致性阈值都需要按任务与损失函数调优,不存在通用的 1:3、30% 或 Kappa 0.6 门槛。
1. 先定义标签
- 明确直接支持答案、部分支持、仅主题相关和不相关的边界,并规定时效性、权限、来源质量和冲突证据如何标注。
- 多证据问题可以使用分级相关性或列表式标签;若最终训练采用二分类,再说明如何映射。
- 用双人标注、仲裁和抽样复审估计一致性;目标值应结合任务难度和误标成本设定。
2. 正负样本构造
- 正样本来自人工确认的支持证据、可靠点击或业务结果,但点击日志必须校正位置偏置和曝光偏置。
- 易负样本用于学习基本主题边界;难负样本应从 BM25、向量召回或旧 Reranker 的高分误召回中挖掘。
- 难负样本必须复核假阴性,避免把实际相关文档当负样本。批内负样本也要防止不同 query 共享答案导致误标。
3. 数据切分与去泄漏
按 query、文档来源、时间或用户场景切分训练集和评测集,避免同一问题改写、近重复文档或同一事件跨集合泄漏。线上日志应保留采样策略、召回器版本和曝光位置,便于重放。
4. 训练与闭环
比较点式、对式或列表式损失,并在固定召回候选上评估 MRR、NDCG、Recall@K、校准、延迟及最终答案质量。上线后回流高分误召回、低分漏召回和用户纠错,定期重新挖掘难负样本。
结论:高价值数据来自真实候选分布和经过复核的边界样本,样本比例只是超参数,必须通过离线与端到端评测确定。
口语版讲法(约4分钟)
- 核心原则:让模型学会区分相关性的细微差别
- 正负样本策略:难负样本是关键
- 数据来源与标注:多源融合+质量控制
- 对RAG流程的影响:训练-推理一致性与闭环迭代
Reranker 训练数据的核心目标,不是让模型学会“相关/不相关”这么粗的二分类,而是让它在一批都看起来有点相关的候选里,把最能回答问题的文档排到最前面。因为在 RAG 里,召回器会先产生较大的候选集,而生成器受上下文预算限制只能使用其中一部分,所以 reranker 的质量会直接影响最终证据可见性。
我会先定义标注标准。正样本里最好区分强相关和弱相关:强相关是单独看这个文档就能回答 query;弱相关是包含部分信息,但需要和其他文档组合;负样本则是语义相近但不能回答,或者主题相关但事实不对。这个边界必须写进标注指南,否则不同标注员对“相关”的理解会不一致。
负样本设计是关键。随机负样本要有,但只能占一部分,因为它太容易了,模型很快就学会了。真正有价值的是 hard negative,也就是被 BM25 或向量检索排得很靠前,但人工判断不能回答问题的文档。比如用户问“退款到账时间”,召回到一篇“退款申请入口”的文档,它主题很近但不能回答到账时间,这种样本对 reranker 最有训练价值。
数据来源可以分几类。冷启动时用人工标注,质量最高,可以做验证集和黄金集。上线后可以用点击、收藏、人工采纳、客服改写这些行为日志,但要处理位置偏置,因为排第一的文档更容易被点,不代表它一定更相关。还可以用强模型或已有 reranker 打伪标签,快速扩充数据,但伪标签不能无脑全收,最好抽样人工质检。
训练形式上,可以用 pointwise 给每个 query-doc 打相关分,也可以用 pairwise 学习哪个文档应该排在前面。更贴近 reranker 的是 listwise,把同一个 query 下的一组候选一起训练,因为线上排序本来就是在候选列表里比较。
数据比例上,我会混合随机负样本、BM25 hard negative、向量 hard negative、批内负样本。hard negative 太少,模型学不到细粒度排序;太多,又可能训练不稳定,尤其是标注边界不清时。所以比例要通过验证集调,而不是固定写死。
对 RAG 流程的影响很直接:召回器决定“有没有把答案捞回来”,reranker 决定“答案能不能排到模型看得见的位置”。如果训练数据和真实召回分布不一致,就会出现训练集指标很好、线上 Top5 很差的问题。所以我会把线上失败样本回流,定期挖 hard negative,形成数据闭环。
关键一句:Reranker 的训练集必须贴近线上召回器的候选分布,否则会有训练-推理鸿沟。
面试官还可能这样问
- 问法 1 · 场景切入
假设你现在在做电商客服RAG,检索器召回Top100文档,但给大模型的上下文只能放5个。你打算怎么构造训练数据来微调Reranker,让它真能把这5个最相关的挑出来?
- 问法 2 · 层层追问
Reranker的训练数据,正负样本一般怎么选?……那负样本里难负样本怎么构造?……如果BM25召回的文档和真实分布差很多,你训练出来的Reranker上线后会不会崩?
- 问法 3 · 直球架构
设计Reranker微调的数据构造方案。请说明正负样本的类型和比例、数据来源(人工/日志/伪标签)、以及如何保证训练数据与真实检索分布一致。