
🧠 图解记忆: Bi-encoder 负责“找得到”,Cross-encoder 负责“排得准”;没召回的证据无法靠重排救回。
💡 答案要点
两阶段检索架构:
用户查询
↓
① 向量检索(BiEncoder,快速召回)
→ 从百万文档中快速召回 Top-100 候选
→ 用 cosine similarity 排序
↓
② Rerank(CrossEncoder,精排)
→ 对 Top-100 候选逐一打分
→ 输出最终 Top-10BiEncoder vs CrossEncoder:
| 维度 | BiEncoder(向量检索) | CrossEncoder(重排序) |
|---|---|---|
| 速度 | 快(一次 embedding) | 慢(需逐个计算注意力) |
| 精度 | 中等 | 高(考虑query-doc交互) |
| 适用阶段 | 粗召回(Top-100) | 精排序(Top-10) |
| 硬件需求 | 低 | 高 |
Rerank 模型示例:
python
from sentence_transformers import CrossEncoder
# 使用交叉编码器重排序
cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
def rerank(query, documents, top_k=10):
# 输入:[query, doc] 对
pairs = [[query, doc] for doc in documents]
# 获取相关性分数
scores = cross_encoder.predict(pairs)
# 按分数排序
ranked_indices = np.argsort(scores)[::-1][:top_k]
return [documents[i] for i in ranked_indices]为什么需要 Rerank?
python
# 向量检索的问题:语义相似 ≠ 相关
query = "如何减肥"
doc1 = "减肥药广告:神奇减肥,一周瘦10斤" # 向量相似度高,但质量差
doc2 = "健康饮食与运动减肥的科学方法" # 向量相似度一般,但更相关
# CrossEncoder 能捕捉细粒度相关性问题
# 它会注意:"减肥"和"健康饮食"虽然字不相似,但实际高度相关面试话术:
"向量检索是 BiEncoder,能快速从海量文档里召回候选,但精度有限。Rerank 用 CrossEncoder,对每个 query-doc 对计算交叉注意力,打分更精准。生产级 RAG 系统通常是两阶段:向量检索 Top-100 → CrossEncoder 重排 Top-10。BiEncoder 快但粗,CrossEncoder 慢但准,两者结合是工程最优解。"
📚 参考:BGE Reranker(bge-reranker-v2-m3 模型卡) · Cohere:Rerank 官方文档