为什么需要重排序

2
0
0
2025-07-14

重排序是什么

重排序(Re-ranking)是对初步检索到的文档进行二次排序的关键步骤,目的是提升最相关文档的优先级,从而优化最终生成答案的质量。

为什么需要重排序

在 RAG 中,系统通常会使用:

  • BM25、TF-IDF 等稀疏方法,或

  • Embedding 相似度(如 DPR、ColBERT)等稠密方法

先召回一批(如 top 100)候选文档。这些方法虽然快速,但准确率有限,容易混入不够相关的内容。

所以,需要一个更强的模型来对召回结果做重排序,从而:

  • 提高 top-k 文档的相关性

  • 帮助生成模块(如 GPT)拿到更有价值的信息

为什么嵌入模型还不够?需要 Re-ranker?

一句话总结:

嵌入模型关注“整体相似”,而 Re-ranker 关注“语义对齐”。

嵌入模型的优点与局限

优点:

  • 高效:预先对文档进行编码,只需计算向量相似度(如余弦距离)。

  • 可扩展:适用于百万甚至上亿文档的快速检索。

局限:

  • 嵌入模型通常将整段文本“压缩”成一个固定维度的向量,比如 768 维。

  • 这会导致 语义信息的平均化特定细节的丢失,特别是在面对复杂、细粒度的查询时。

  • 它不考虑当前的查询内容,只提供文档本身的“通用表示”。

例如:

查询:“退税证明可以在线申请吗?”

某篇文档整体讲了退税流程,但提到“证明需线下办理”。嵌入模型可能会因为“退税”两个字匹配就给它很高的分,但实际并不回答用户的“在线申请”诉求。


Re-ranker 是怎么解决这个问题的?

特点:

  • Re-ranker 是一个 query-aware 模型(通常是 Cross-Encoder)。

  • 它将查询与候选文档 一起作为输入,进行上下文匹配判断。

  • 可以看到词与词之间的具体交互,例如:问题中“在线申请”与文档中“只能线下办理”是否语义冲突。

缺点:

  • 推理速度慢(需要每次 pairwise 编码)

  • 通常只用于 top-k(如前100)文档的精排,而不是全部语料。


举个例子理解差异

比如你问:“迪士尼年卡是否能用于快速通道?”

  • 嵌入模型可能找到了讲“年卡权益”或“快速通道”的文档;

  • Re-ranker可以判断这两段话是否明确说了“年卡可以/不可以用于快速通道”。


总结一句话

嵌入模型负责“粗筛”,重排序器负责“精挑”。只有两者配合,才能实现高效且高质量的检索增强生成(RAG)系统。