Reranker 是排序模型,训练目标是让相关 doc 的分数 > 不相关 doc,核心围绕 (query, doc) 对的相关性打分展开。
基础训练数据单元
| 字段 | 含义 | 示例 |
|---|
| query | 用户查询 | “Reranker 模型有什么用” |
| doc | 候选文本 | “Reranker 用于检索后二次精排” |
| label/score | 相关性标注 | 0/1(二分类)、1-5(分级) |
主流训练数据形式
标注式数据
二分类标签:
1
2
3
| query,doc,label
"Reranker模型有什么用","Reranker是检索精排模型",1
"Reranker模型有什么用","Embedding模型用于向量召回",0
|
多分级标签:
对比式数据
成对式(Pair-wise):
1
2
| query,pos_doc,neg_doc
"Reranker训练","Reranker用交叉编码训练","Reranker用于海量召回"
|
列表式(List-wise):
1
2
| query,doc_list,rank_list
"AI绘画原理","[扩散模型,Transformer,Java]","[1,2,3]"
|
负样本构造
| 方法 | 说明 |
|---|
| 随机负样本 | 语料库随机选非正样本,噪声大 |
| 难负样本 | 语义相似但不相关,效果最优 |
| 检索负样本 | 粗召回排前但不相关的 doc |
主流训练范式
Point-wise 逐点训练
| 项目 | 说明 |
|---|
| 数据 | (query, doc, label) |
| 损失 | BCE Loss(二分类)、CE Loss(多分级) |
| 优点 | 数据简单、训练快 |
| 缺点 | 忽略排序相对关系 |
Pair-wise 成对训练(工业界主流)
| 项目 | 说明 |
|---|
| 数据 | (query, pos_doc, neg_doc) |
| 损失 | Margin Loss:$max(0, margin - score(pos) + score(neg))$ |
| 优点 | 聚焦排序相对关系,精排精度高 |
| 缺点 | 对难负样本依赖度高 |
List-wise 列表训练
| 项目 | 说明 |
|---|
| 数据 | (query, doc_list, rank_list) |
| 损失 | ListNet Loss、NDCG Loss |
| 优点 | 排序效果最优 |
| 缺点 | 标注成本极高 |
训练流程
- 数据准备:收集 query + doc,构造正/负样本
- 数据编码:
[CLS] query [SEP] doc [SEP] - 模型初始化:加载预训练编码器,替换输出层
- 训练:AdamW(学习率 1e-5
5e-5),批次 832 - 评估:NDCG@10、MRR@10
选型速查
| 场景 | 数据形式 | 训练范式 | 模型 |
|---|
| 快速原型 | 二分类 Point-wise | Point-wise | MiniLM |
| 通用 RAG | 成对式 + 难负样本 | Pair-wise | BGE-Reranker |
| 高精度搜索 | 列表式 + 分级标签 | List-wise | RoBERTa-large |
| 低延迟部署 | 蒸馏数据 | 知识蒸馏 + Pair-wise | 蒸馏轻量模型 |
Comments