重排模型调优:TopK、模型大小、领域微调与分数校准
重排(reranking)在向量召回之后,用 cross-encoder 对 query 和候选文档逐对打分,把最相关的文档排到前面。它比双塔向量模型更准,但延迟更高,所以通常只处理 Top 20–100 个候选。重排的效果取决于召回候选质量、模型与领域匹配度、TopK 和分数阈值。
调优顺序:先保证召回有相关文档,再选重排模型,再调 TopK/批处理/阈值,最后考虑领域微调。不要用重排去弥补召回完全缺失的文档;也不要把重排分数直接当概率。
# sentence-transformers CrossEncoder
from sentence_transformers import CrossEncoder
model = CrossEncoder("BAAI/bge-reranker-v2-m3", max_length=512)
pairs = [(query, doc) for doc in candidates]
scores = model.predict(pairs, batch_size=16)
ranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)[:5]
# TEI / Infinity 的 rerank 端点
curl http://localhost:8080/rerank \
-H 'Content-Type: application/json' \
-d '{"query":"磁盘满怎么排查","texts":["df -h 看分区","Pod 日志排查"]}'
# 领域微调:构造 (query, positive, negative) 三元组
# 用 MarginMSE / CrossEntropy 训练 cross-encoder
# 评估用 nDCG@5、MRR、Recall@5,不要只看 loss
调参起点:
- 召回 TopK:20–50 进重排,最终取 3–8 给 LLM
- batch size:按显存和 P95 延迟调
- 分数阈值:用标注数据校准,不要拍脑袋
- 模型大小:base 通常够用,large 更准但更慢
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令