🍋🍋AI学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


一、重排序(Re-ranking)详解

1. 为什么需要重排序?

初检阶段(如向量相似度检索)通常采用高效但粗糙的匹配方式:

  • 向量嵌入模型(如 text-embedding-ada-002)虽然能捕捉语义,但对细粒度语义匹配、逻辑一致性、上下文依赖等能力有限。
  • 可能召回大量“表面相关但实质无关”的文档。

🌰 举例:
用户问:“Transformer 模型中 LayerNorm 的作用是什么?”
初检可能召回一篇讲“Transformer 架构综述”的文章(包含 LayerNorm 字眼),但真正解释其作用的段落可能在另一篇更专业的论文中。
重排序的目标就是把后者排到前面。


2. 重排序的核心思想

对初检返回的 top-K(如 K=50)候选文档,使用一个更强、更精细的模型重新计算 query 与每个文档的相关性分数,再按新分数排序,取 top-N(如 N=3~5)送入 LLM。

✅ 本质:粗排(fast but noisy) + 精排(slow but accurate)


3. 重排序的实现方式

(1)基于交叉编码器的重排序(Cross-Encoder Reranker)

这是目前最主流、效果最好的方式。

  • 原理:将 query 和 document 拼接成一个序列,输入一个预训练语言模型(如 BERT、RoBERTa),输出一个相关性分数。
    1[CLS] query: What is LayerNorm? [SEP] passage: In Transformer, LayerNorm is applied after residual... [SEP]
  • 模型输出 [CLS] token 的 logits,经 sigmoid 得到 0~1 的相关性分数。
  • 优点:能建模 query 与 document 的深度交互(token-level attention),远优于双塔模型(Bi-encoder)的独立编码。

对比:

  • Bi-encoder(初检用):query 和 doc 分别编码 → 计算余弦相似度(快,可索引)
  • Cross-encoder(重排用):联合编码 → 精确打分(慢,不可索引)
(2)常用重排序模型
模型 特点 适用场景
BGE-Reranker(智源) 开源、支持中英文、轻量高效 中文 RAG 首选
Cohere Rerank 商业 API,效果极佳,支持长文本 企业级应用(付费)
ColBERTv2 延迟交互(late interaction),比 cross-encoder 快 平衡速度与精度
LLM-based Rerank 用 GPT-4 / Claude 直接判断相关性(Zero-shot) 小规模、高价值场景

💡 推荐:BGE-Reranker-v2-m3(多语言、小模型、效果好)


4. 重排序的关键关注点

关注点 说明
Top-K 选择 初检召回太多 → 重排慢;太少 → 可能漏掉好结果。通常 K=30~100
计算开销 Cross-encoder 无法预计算,需实时推理。可考虑缓存或异步处理
长文本处理 超过模型最大长度(如 512)时需截断或滑动窗口
领域适配 通用 reranker 在专业领域(如医疗、法律)效果下降,建议微调
多语言支持 确保 reranker 支持你的语言(BGE 系列支持中文)
评分归一化 不同 query 的分数分布不同,避免直接比较绝对值

二、多跳检索(Multi-hop Retrieval)详解

1. 什么是多跳检索?

  • 单跳检索:一次 query → 一次检索 → 得到答案(适用于简单事实问答)。
  • 多跳检索:需要多次检索 + 推理才能回答的问题。

🌰 经典例子(HotpotQA 数据集):

“Who is the founder of the company that created TensorFlow?”

需要两跳:

  1. TensorFlow 是谁开发的?→ Google
  2. Google 的创始人是谁?→ Larry Page & Sergey Brin

最终得到答案。


2. 多跳检索的挑战

  • 信息分散:答案分布在多个文档中。
  • 推理链构建:如何从第一跳结果推导出第二跳 query?
  • 错误传播:第一跳检索错误 → 后续全错。
  • 循环/冗余:重复检索相同内容。

3. 实现策略

(1)迭代式检索(Iterative Retrieval)
  • 步骤:
    1. 用原始 query 检索第一批文档。
    2. 用 LLM 分析这些文档,生成新的 sub-query(用于下一跳)。
    3. 用新 query 再次检索。
    4. 重复直到满足停止条件(如找到答案、达到最大跳数)。

📌 关键:Query 生成质量决定成败。

(2)基于图的检索(Graph-based Retrieval)
  • 将知识库构建成实体关系图(如 Wikidata)。
  • 从问题中提取实体,进行图遍历(如 2-hop neighbors)。
  • 适合结构化知识,但构建成本高。
(3)FLARE(Forward-Looking Active Retrieval)
  • 在 LLM 生成过程中动态判断是否需要检索
  • 当模型预测的下一个 token 置信度低时,触发检索。
  • 实现“按需检索”,减少冗余。
(4)Self-Ask / Chain-of-Thought + Retrieval
  • 让 LLM 先生成推理链(CoT),再对每个子问题单独检索。

4. 多跳检索的关键关注点

关注点 说明
跳数控制 通常 2~3 跳足够,更多跳易引入噪声
查询改写质量 使用强 LLM(如 GPT-4)生成 sub-query 效果更好
去重机制 避免重复检索相同文档(可用 embedding 或 hash 去重)
融合策略 如何合并多跳结果?可拼接、加权、或让 LLM 综合
评估难度 需要多跳 QA 数据集(如 HotpotQA、2WikiMultihop)
延迟 vs 精度 多跳增加响应时间,需权衡用户体验

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐