内容提要
本文介绍RAG流水线中的重排序(reranking)层,旨在解决检索结果中相关文档排名靠后的问题。文章比较了交叉编码器、双编码器和LLM重排序器三种模型类型,强调选择需权衡延迟、成本和语言覆盖。生产实践中,建议采用混合检索提升召回率,并注意校准阈值、控制成本,Redis Iris可集成这些功能以优化性能。
延伸解读
重排序的边界:受限于第一阶段召回
重排序只能对检索到的候选集进行排序,无法召回未进入候选池的文档。因此,第一阶段的召回质量至关重要。文章指出,增加候选数量并不总是有益,过多无关文档反而可能降低答案准确性。混合检索(结合关键词与向量搜索)能有效提升召回上限,为重排序提供更好的候选池。
延迟与成本的权衡
不同类型的重排序模型在延迟和成本上差异显著。交叉编码器通常增加几十到几百毫秒延迟,而基于LLM的重排序器可能需要数秒。虽然延迟增加,但通过减少传给生成模型的块数,总延迟可能持平。成本方面,通用LLM重排序器可能显著增加每查询成本,而小型开源模型(如0.6B参数)在性能上已具竞争力,是更经济的选择。
分数校准与领域适配
重排序分数仅用于排序,不代表绝对相关性。不同模型的分数不可直接比较,更换模型后需重新校准阈值。领域不匹配时,固定阈值可能失效。建议在实际数据上评估,结合分数下限和top-N截断,而非对所有查询使用固定块数。
Q&A
RAG流水线中重排序(reranking)的作用是什么?
重排序是RAG流水线中的一层,用于解决检索结果中相关文档排名靠后的问题。它通过重新排列候选文档,将最相关的文档移到LLM更关注的位置(如开头或结尾),从而提升最终答案的准确性。
交叉编码器、双编码器和LLM重排序器有什么区别?
交叉编码器将查询和文档一起输入同一个Transformer,计算精确的匹配分数,但速度慢;双编码器(如ColBERT)分别编码查询和文档,可以预计算文档向量,速度较快,但精度略低;LLM重排序器使用生成式模型直接对文档排序,灵活但速度慢且成本高。
如何选择适合自己应用的重排序模型?
选择重排序模型时,需要权衡延迟、成本、语言覆盖和上下文长度。首先根据应用场景确定延迟预算,然后检查模型的最大上下文长度是否满足你的chunk大小,最后测试模型对实际查询语言的支持情况。建议在自有数据上评估,而不是仅依赖排行榜。
为什么重排序前需要保证第一阶段的召回率?
重排序只能对检索到的候选文档进行排序,无法提升召回率。如果相关文档没有被第一阶段检索到,重排序也无法将其提升到前面。因此,提高第一阶段召回率(如使用混合检索)是重排序有效的前提。
重排序的分数阈值需要注意什么?
重排序分数是相对排序,不代表绝对相关性。不同模型的分数不可直接比较,且领域不匹配时分数可能失真。因此,需要根据实际数据重新校准阈值,并评估分数下限和top-N截断,而不是固定使用相同的chunk数量。
如何控制重排序带来的成本?
控制成本的方法包括:使用语义缓存缓存重复查询,避免重复调用重排序;使用更小的模型(如0.6B参数)或开源模型;仅在必要时使用LLM重排序器;利用Redis LangCache等工具降低LLM推理成本。
Redis Iris在RAG重排序中扮演什么角色?
Redis Iris是一个实时上下文引擎,集成了混合检索、语义缓存和RedisVL,支持在Redis基础设施上运行重排序流水线。它通过Redis Search的FT.HYBRID实现混合检索,并支持将重排序器(如Hugging Face、Cohere、Voyage AI)集成到Redis管道中,从而优化性能并降低成本。