上下文检索(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. 文档预处理:
original_chunk = "公司收入比上季度增长了3%。"
contextualized_chunk = """
这段内容来自ACME公司2023年Q2的SEC文件,
上季度收入为3.14亿美元。
公司收入比上季度增长了3%。
"""
- 1. 使用Claude生成上下文:
prompt = """
<document>
{完整文档}
</document>
这是我们要处理的文本块:
<chunk>
{文本块内容}
</chunk>
请简要说明这个文本块在整个文档中的上下文,以提升检索效果。
只需给出简洁的上下文描述,无需其他内容。
"""
2. 实现考虑因素
标准检索增强生成 (RAG) 系统,使用嵌入和最佳匹配 25 (BM25) 来检索信息。TF-IDF(术语频率-逆文档频率)衡量单词重要性并构成 BM25 的基础
上下文检索是一种提高检索准确性的预处理技术
- 文本分块策略
- 合理的块大小
- 适当的重叠度
- 边界划分方式
- 嵌入模型选择
- Gemini和Voyage效果最佳
- 不同模型受益程度不同
- 提示词优化
- 可针对具体领域定制
- 考虑添加关键术语解释
- 检索数量权衡
- 实验表明检索20个块效果最好
- 需要平衡信息量和模型负担
四、进一步优化:重排序
结合上下文检索和重新排名以最大限度地提高检索准确性
1. 重排序流程
1. 初始检索150个候选块
2. 重排序模型评分
3. 选取最相关的20个
4. 传入LLM生成答案
2. 性能与成本平衡
- 重排序会增加一定延迟
- 需要在性能和成本间取舍
- 建议针对具体场景测试调优
五、最佳实践总结
- 技术组合建议:
- 使用Voyage或Gemini的嵌入
- 开启上下文嵌入和BM25
- 添加重排序步骤
- 检索前20个相关块
2. 性能提升效果:
- 各项技术优化叠加
- 检索失败率最高降低67%
- 显著提升下游任务表现
上下文检索技术为RAG系统带来了革命性的提升,是构建高性能AI应用的重要工具。希望本文能帮助开发者更好地理解和应用这一技术创新!