AI 术语表 · 进阶 · 语言模型
重排序器
重排序模型(reranker)会将检索初步筛选出的候选文档逐一与问题仔细比对,再按真正的相关程度重新排序。它主要在 RAG 等把检索结果交给 AI 的系统中承担“二次审核”的角色。
工作原理
检索通常分为两个阶段。第一阶段用向量检索等快速方法,从海量文档中筛选出几十到几百个候选。这一步会预先把每篇文档的含义压缩成一组数字(向量),只比较它与问题向量之间的距离,因此速度很快,但压缩过程中会丢失一部分信息。第二阶段,重排序器把问题和候选文档逐对一起读取,给出“相关程度”分数,再按分数重新排序。由于同时看问题和文档,结果更准确,但计算量大,所以只用于第一阶段筛出的候选,而不是全部文档。
为什么重要
在 RAG 系统中,如果只把检索结果的前几条交给 AI,真正需要的文档可能因为排名稍靠后而被漏掉。但如果交给 AI 的候选太多,又可能超出 AI 一次能读取的长度(上下文窗口),或者因内容过多反而遗漏重要信息。重排序器先广泛召回大量候选,再只挑出真正有用的几条排到前面,从而缓解这一问题。因此,在改进效果不如预期的 RAG 时,它常被视为一种相对简单、见效快的方法。
发展历程
2019 年,Rodrigo Nogueira 和 Kyunghyun Cho 的论文“Passage Re-ranking with BERT”把问题和段落一起输入语言模型 BERT 来打相关度分,用这种简单方法大幅提升了检索排名效果。不过,这种方法需要对每个问题-文档对都运行一次大模型,速度较慢。2020 年,Omar Khattab 和 Matei Zaharia 的“ColBERT”提出“延迟交互”方式:先分别预处理问题和文档,最后再以词为单位做轻量比较,在保持相近准确率的同时大幅提高了速度。2023 年的论文“Is ChatGPT Good at Search?”表明,只要给出合适的指令,ChatGPT 这样的大语言模型就能很好地为文档排序,并提出了把这种能力迁移到小模型上的方法(Distillation)。
注意事项
重排序器只能在第一阶段检索取回的候选中调整顺序,无法找出根本不在候选中的文档。此外,它要对每个候选运行模型,候选越多,响应越慢,成本也越高。因此在实际应用中,权衡第一阶段取回多少条、经重排序器后保留多少条非常重要。
示例
提供检索和 RAG 工具的公司纷纷把重排序器作为独立功能推出。例如,Cohere 介绍其 Rerank API 时说,只要传入一个问题和一组文档,它就会按与问题语义相关度从高到低重新排序后返回。向量数据库公司 Pinecone 也把“两阶段检索”——先用向量检索广泛召回候选,再用重排序器重新排序——介绍为提升 RAG 性能的代表性方法。
相关术语
参考资料
- Passage Re-ranking with BERT (2019)
- ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT (2020)
- Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agents (2023)
- Rerankers and Two-Stage Retrieval | Pinecone
- An Overview of Cohere's Rerank Model | Cohere