上下文检索(Contextual Retrieval):一个显著提升RAG检索准确率的创新方法

在构建基于大语言模型的AI应用时,如何让模型准确获取所需的背景知识是一个关键挑战。传统的检索增强生成(RAG)方法在编码信息时往往会丢失上下文,导致检索失败。今天要介绍的上下文检索(Contextual Retrieval)技术创新性地解决了这个问题,能将检索失败率降低高达67%。

一、什么是上下文检索?

其最大特点是:在chunk编码前预先添加解释性的上下文信息,大幅提升检索准确率。

上下文检索是一种改进RAG系统检索步骤的新方法,它包含两个核心技术:

1. 上下文嵌入(Contextual Embeddings)

上下文嵌入通过在文本块编码前添加解释性上下文,来提升语义检索的准确性:

# 传统方式
chunk = "收入增长率为3%"
embedding = encode(chunk)

# 上下文嵌入
context = "这是ACME公司2023年Q2财报中关于季度收入的描述"
contextual_chunk = context + chunk
enhanced_embedding = encode(contextual_chunk)

主要优势:

  • 保留了文档的语境信息
  • 提升了语义理解的准确度
  • 减少歧义和误检索

2. 上下文BM25(Contextual BM25)

BM25(最佳匹配 25)是一种排名函数,它使用词汇匹配来查找精确的单词或短语匹配。它对于包含唯一标识符或技术术语的查询特别有效。

# 传统BM25
score = bm25(query="ACME Q2收入", text="收入增长率为3%")

# 上下文BM25
context = "ACME公司2023年Q2财报 | 季度收入部分"
contextual_text = context + ": 收入增长率为3%"
enhanced_score = bm25(query="ACME Q2收入", text=contextual_text)

核心特点:

  • 结合精确词匹配和上下文信息
  • 提高关键词检索准确率
  • 特别适合处理专业术语和数字信息

这两种技术的结合使用创造了显著的协同效应:

  • 上下文嵌入提供深层语义理解
  • 上下文BM25确保关键信息精确匹配
  • 双管齐下大幅提升检索质量

二、为什么需要上下文检索?

1. 传统RAG的局限性

传统RAG系统在将文档分块时会丢失重要上下文。例如对于这样一个问题: “ACME公司2023年Q2的收入增长是多少?”

相关的文本块可能只包含:“公司收入比上季度增长了3%。”

  • 没有指明是哪家公司
  • 没有说明具体时间
  • 难以判断是否为正确信息

2. 显著的性能提升

上下文检索带来的改进:

  • 单独使用上下文嵌入:检索失败率降低35%
  • 结合上下文BM25:检索失败率降低49%
  • 配合重排序技术:检索失败率降低67%

三、如何实现上下文检索?

1. 基本流程

  1. 1. 文档预处理:
original_chunk = "公司收入比上季度增长了3%。"

contextualized_chunk = """
这段内容来自ACME公司2023年Q2的SEC文件,
上季度收入为3.14亿美元。
公司收入比上季度增长了3%。
"""
  1. 1. 使用Claude生成上下文:
prompt = """
<document>
{完整文档}
</document>

这是我们要处理的文本块:
<chunk>
{文本块内容}
</chunk>

请简要说明这个文本块在整个文档中的上下文,以提升检索效果。
只需给出简洁的上下文描述,无需其他内容。
"""

2. 实现考虑因素

上下文检索(Contextual Retrieval):一个显著提升RAG检索准确率的创新方法_ai

标准检索增强生成 (RAG) 系统,使用嵌入和最佳匹配 25 (BM25) 来检索信息。TF-IDF(术语频率-逆文档频率)衡量单词重要性并构成 BM25 的基础

上下文检索(Contextual Retrieval):一个显著提升RAG检索准确率的创新方法_LLM_02

上下文检索是一种提高检索准确性的预处理技术

  1. 文本分块策略
  • 合理的块大小
  • 适当的重叠度
  • 边界划分方式
  1. 嵌入模型选择
  • Gemini和Voyage效果最佳
  • 不同模型受益程度不同
  1. 提示词优化
  • 可针对具体领域定制
  • 考虑添加关键术语解释
  1. 检索数量权衡
  • 实验表明检索20个块效果最好
  • 需要平衡信息量和模型负担

四、进一步优化:重排序

上下文检索(Contextual Retrieval):一个显著提升RAG检索准确率的创新方法_AI大模型_03

结合上下文检索和重新排名以最大限度地提高检索准确性

1. 重排序流程

1. 初始检索150个候选块
2. 重排序模型评分
3. 选取最相关的20个
4. 传入LLM生成答案

2. 性能与成本平衡

  • 重排序会增加一定延迟
  • 需要在性能和成本间取舍
  • 建议针对具体场景测试调优

五、最佳实践总结

  1. 技术组合建议:
  • 使用Voyage或Gemini的嵌入
  • 开启上下文嵌入和BM25
  • 添加重排序步骤
  • 检索前20个相关块

2. 性能提升效果:

  • 各项技术优化叠加
  • 检索失败率最高降低67%
  • 显著提升下游任务表现

上下文检索技术为RAG系统带来了革命性的提升,是构建高性能AI应用的重要工具。希望本文能帮助开发者更好地理解和应用这一技术创新!