RAG - Hybrid retrieval + Rerank
向量检索
- 当前主流的 RAG 检索方式主要采用向量检索,通过语义相似度来匹配 Chunk
- 向量检索并非万能,在某些场景下无法替代传统关键词检索的优势
- 当需要精准搜索的时候,向量检索的准确性就往往不如关键词检索
- 当用户输入的问题非常简短,语义匹配的效果可能不尽理想
- 关键词检索的适用场景
- 精确匹配
- 少量字符的匹配 - 不适合用向量检索
- 低频词汇的匹配
混合检索
结合关键词检索和语义匹配的优势
- 在 RAG 检索场景中,首要目标是确保最相关的结果能够出现在候选列表中
- 向量检索和关键词检索各具优势,混合检索通过结合多种检索技术,弥补各自不足,提供一种更加全面的搜索方案
- 重排序技术在检索系统中扮演着至关重要的角色
- 即使检索算法已经能够捕捉到所有相关的结果,重排序过程依然不可或缺
- 确保最符合用户意图和查询语义的结果优先展示,提升用户的搜索体验和结果的准确性
在多个数据集和多个检索任务中,混合检索和重排序的组合均取得了最佳表现
融合检索 / 多路召回
https://python.langchain.com/v0.2/api_reference/community/retrievers.html
检索方法 | 方法说明 |
---|---|
向量检索 | 通过将文档转换为向量表示,利用向量之间的语义相似度检索,能够找到与查询语义最相近的内容 |
关键词检索 | 依赖于精确匹配文本中的关键词。适用于需要精确查找特定术语、短语或标识符的场景。 |
多重提问检索 - 问题扩写 | 通过生成多个与原始查询相关的问题,扩展检索范围,适用于查询不明确问题的情况 |
上下文压缩检索 | 先检索出大量相关文档,然后对其内容进行压缩,保留核心信息,以便 LLM 处理和理解 |
父文档检索 | 不仅检索文档片段,而是检索整个文档,适用于需要查看完整文档内容的场景,确保信息全面性 |
多向量检索 | 为每个文档创建多个向量表示,捕捉文档的不同特征,能够在检索中识别出文档多维度信息 |
自查询检索 - Self RAG | 理解并重构复杂查询,从而提高检索的精度,使检索结果更贴合用户意图 |
- 选择何种检索技术,取决于需要解决什么问题、系统的性能要求、数据的复杂性以及用户的搜索习惯等
- 针对具体需求选择合适的检索技术,能够最大化地提升 RAG 系统的效率和准确性
BM25
- BM25 是一种强大的关键词搜索算法
- 通过分析词频(TF)和逆向文档频率(IDF)来评估文档与查询的相关性
- BM25 检查查询词在文档中的出现频率,以及该词在所有文档中出现的稀有程度
- 如果一个词在特定文档中频繁出现,但在其他文档中较少出现 - 该文档高度相关
- BM25 还通过调整文档长度的影响,防止因文档长度不同而导致的词频偏差
- BM25 结合了词频和文档长度平衡的机制,使得 BM25 在关键词检索中能够提供精准的检索结果
重排序
概述
- 在 RAG 检索流程中,重排序技术通过对初始检索结果进行重新排序
- 改善检索结果的相关性,为 LLM 提供更优质的上下文,从而提升 RAG 系统的整体效果
- 尽管向量检索技术能够为每个 Chunk 生成初步的相关性分数,但引入重排序模型仍然至关重要
- 向量检索主要依赖于全局语义相似性
- 通过将查询和文档映射到高维语义空间进行匹配
- 往往忽略了查询与文档具体内容之间的细粒度交互
- 重排序模型大多基于双塔或交叉编码架构的模型
- 在此基础上进一步计算更加精确的相关性分数
- 能够捕捉词与 Chunk 之间更细致的相关性,从而在细节层面上提高检索精度
- 向量检索提供了有效的初步筛选,重排序模型则通过更深入的分析和排序
- 确保最终结果在语义和内容层面上更紧密地契合查询意图,实现检索质量的提升
- RAG 流程有两个概念:粗排 + 精排
- 粗排 - 检索效率高,但召回的内容不一定强相关
- 精排 - 效率较低,适合在粗排的基础上进一步优化,代表技术为重排序
优势
- 优化检索结果
- 在 RAG 系统中,初始的检索结果通常来自于向量检索或基于关键词的检索方法
- 初始的检索结果可能包含大量的冗余信息或与查询完全不相关的文档
- 通过重排序技术,可以对初步检索到的文档进行进一步的筛选和排序,将最相关、最重要的文档至于前列
- 增强上下文相关性
- RAG 系统依赖于检索到的文档作为 LLM 的上下文 - 直接影响生成结果
- 重排序技术通过重新评估文档与查询的相关性,确保 LLM 优先使用那些与查询最相关的文档
- 应对复杂查询
- 对于复杂查询,初始检索可能会返回一些与表面上相关但实际上不太匹配的文档
- 重排序技术可以根据查询的复杂性和具体需求,对这些结果进行更细致的分析和排序
RRF
Reciprocal Rank Fusion - 递归折减融合
- RRF 是一种把来自不同检索方法的排名结果结合起来的技巧
- 基本思想:如果一个文档在不同的检索结果中都排名比较靠前,那么它在综合排名中应该得到更高的位置
- 相比于复杂的重排序技术,RRF 的操作更加简单,不需要对每种检索结果进行复杂的调整或计算
- 通过直接考虑文档在不同方法中的排名,快速生成一个合理的综合排名
- 非常适合那些需要快速融合多个检索结果的场景,短时间内得到一个有参考价值的排序
模型
- Query 与每个 Chunk 计算对应的相关性分数,并根据这些分数对文档进行重新排序
- 市面上可用的重排序模型并不多
- 商用 - Cohere
- 开源 - BGE、Sentence、Mixedbread、T5-Reranker、BCE
- 甚至可以使用 Prompt 让 LLM 进行重排
- 在生产环境中使用重排序模型会面临资源和效率问题
- 计算资源消耗高 + 推理速度慢 + 模型参数量大
- 重排序模型在对候选项进行精细排序时,因其较大参数量而导致的高计算需求和复杂耗时的推理过程
- 从而对 RAG 系统的响应时间和整体效率产生负面影响
- 在实际应用中,要根据实际资源需求,在精度和效率之间进行平衡
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.