重排序模型
先用向量检索召回一批候选 Chunk,再把这些候选文档交给 Rerank重排序模型,让模型根据“用户问题和候选文本的真实语义相关性”重新打分排序,最后只保留最相关的文档根据top_n
RAG 里的 重排序模型,通常叫 Reranker / Re-rank Model
- 由于初始检索找到的内容,不一定排序准确,因此通过重排序模型来提高准确性
- 重排序模型它会重新看“问题 + 每个 chunk检查”,判断哪个 chunk 更能回答这个问题
- 通过重排序模型对候选的文档chunk进行重排打分,将匹配更高的chunk,排到前面
- 重排序保留chunk的数量,配置top_n
- Reranker只能对“已经召回的结果 (候选文档)”重新排序
- 这里的候选文档:包含检索的结果、关键词检索的结果进行排序
- 如果是混合检索,那么会将向量检索和关键词检索通过RRF算法合并为候选文档,然后利用Rerank重排序将候选文档进行打分
为什么使用重排序
- 语义理解偏差
- 向量相似度不靠谱
作用
- RAG 在检索阶段时负责“多查找一些可能相关的资料
- 重排序模型负责“从这些资料里重新判断谁最相似的资料,并把最有用的排到前面”
重排序问题
- 使用重排序模型,会比较慢,但是判断会更细,提高准确性
- 重排序和向量检索会配合使用
- 重排序模型不能直接面对整个知识库
- 通过向量检索来匹配筛选chunk
- 重排序是对已经筛选过的chunk 进行精确排序,对候选文档的chunk进行打分排序
场景
不建议的场景:
- 当知识库数据量小的时候,可以不需要重排序
- 当问题比较简单时,不需要重排序,不需要复杂判断
- 对查询速度要求高的场景,也不建议使用重排序,会增加耗时
- 需要对成本控制时,也不建议使用重排序,使用重排序模型会增加成本
建议的场景
- 企业知识库数据量大,会出现噪音(无关内容)比较多,容易出现幻觉
- 文档很多内容比较相似,需要更准确的排序查询
- 问题比较细,比如问到某一条数据、某一条配置
- 当经常匹配不到答案的时候,可以考虑重排序
总结
- 向量检索负责从海量知识库里“找一批候选的相关资料”,通过
top_k来配置检索文档的结果数量,重排序模型负责对候选内容“精细排序打分”,把最可能回答问题的 chunk 放到前面,从而提升最终 prompt 质量和模型回答准确率 - 可以配置Rerank重排序保留chunk的数量,通过
top_n