引入上下文检索(Contextual Retrieval):提升AI模型的精准度与效率 原创
01、概述
在当今的数字时代,人工智能(AI)模型的应用场景越来越广泛,从客户支持聊天机器人到法律分析助手,每一种应用都需要准确的背景知识。为了让AI在特定环境中更有用,开发者通常会利用一种叫做“检索增强生成(RAG)”的方法。这种方法通过从知识库中检索相关信息并将其附加到用户的提示中,从而显著提升模型的响应质量。然而,传统的RAG方案在编码信息时往往会丢失上下文,导致系统无法有效地检索到相关信息。
在本文中,我们将介绍一种名为“上下文检索”的新方法,该方法通过引入两种子技术——上下文嵌入和上下文BM25,显著提升了RAG中的检索步骤。通过这种方法,我们的研究显示,检索失败率减少了49%,而结合重新排序(reranking)时,失败率甚至减少了67%。这一系列的改进直接提高了后续任务的表现。
02、什么是上下文检索?
上下文检索的核心在于在每个文本块前加上特定的上下文说明,这样即便是独立的文本块也能被准确理解。传统的RAG方法通常将知识库中的文档拆分成较小的文本块,这样做虽然提高了检索效率,但也可能导致每个块缺乏足够的上下文信息。例如,在处理财务信息时,如果我们收到这样的问题:“2023年第二季度ACME公司的收入增长是多少?”相关的文本块可能只包含“公司的收入比上一季度增长了3%”,但并没有提到具体是哪个公司,或者增长的时间段。这使得检索信息的准确性大打折扣。
上下文检索解决了这个问题,通过将特定上下文附加到每个块前,确保每个块在被嵌入和创建BM25索引时都能包含足够的背景信息。例如,对于我们提到的SEC文件,原始块“公司的收入比上一季度增长了3%”可以被转换为“这个块来自于关于ACME公司2023年第二季度业绩的SEC文件;上一季度的收入为3.14亿美元。公司的收入比上一季度增长了3%。”
如何实施上下文检索?
当然,手动为数以千计的块注释并不切实际。为了实施上下文检索,我们可以借助Claude。我们编写了一个提示,指导模型为每个块提供简洁的块特定上下文,以提高检索效果。具体的提示如下:
<document>
{{WHOLE_DOCUMENT}}
</document>
这里是我们希望定位的块
<chunk>
{{CHUNK_CONTENT}}
</chunk>
请为该块提供简洁的上下文,以便改善该块的检索效果。只回答上下文,不要其他内容。
通过这个过程,我们可以确保上下文信息被有效地附加到每个文本块上。
03、传统RAG方法的局限性
传统的RAG方法在检索时可能会破坏上下文信息。由于文档通常被拆分成较小的块,如果这些块单独存在,可能会导致信息不完整。比如,在处理技术支持数据库时,如果用户查询“错误代码TS-999”,嵌入模型可能会找到关于错误代码的一般信息,但却可能错过确切的“TS-999”匹配。这时,BM25这种基于词汇匹配的老方法则能有效帮助找到确切的匹配。
04、提升检索精度的方法
结合上下文嵌入和BM25,我们可以通过以下步骤显著提升检索的准确性:
- 将知识库中的文档拆分为较小的文本块,通常不超过几百个token;
- 为这些块创建TF-IDF编码和语义嵌入;
- 使用BM25找到基于精确匹配的最佳块;
- 利用嵌入查找基于语义相似度的最佳块;
- 结合并去重第三和第四步的结果,使用排序融合技术;
- 将前K个块添加到提示中以生成响应。
通过这种方式,传统的RAG系统可以更全面、准确地检索信息,平衡了精确匹配与广泛语义理解之间的关系。
05、进一步提升性能的重新排序
在传统RAG中,AI系统在检索知识库时,可能会返回大量相关信息块,有时甚至是数百个。这时,重新排序(reranking)成为一种常用的过滤技术,确保只有最相关的块被传递给模型,从而提升响应质量并减少成本和延迟。
重新排序的步骤
- 进行初步检索以获取最相关的块(使用了前150个块);
- 将前N个块及用户的查询通过重新排序模型;
- 使用重新排序模型为每个块根据其与提示的相关性和重要性打分,然后选择前K个块(使用前20个块);
- 将前K个块传递给模型生成最终结果。
通过上下文检索和重新排序的结合,可以进一步优化检索的精度。实验表明,结合上下文嵌入和BM25的重新排序将前20个块的检索失败率减少了67%。
成本与延迟考虑
重新排序的一个重要考虑因素是对延迟和成本的影响,尤其是在需要对大量块进行重新排序时。由于重新排序增加了运行时的额外步骤,虽然它是并行处理的,但不可避免地会增加一些延迟。因此,寻找重新排序更多块以提高性能与减少延迟和成本之间的平衡是至关重要的。
06、结语
通过我们的实验,我们发现以下几条经验总结:
- 嵌入加BM25的组合优于单独使用嵌入;
- Voyage和Gemini是测试中效果最好的嵌入模型;
- 将前20个块传递给模型比仅传递前10或前5个更有效;
- 为块添加上下文显著提高检索准确性;
- 重新排序效果明显优于不使用重新排序。
所有这些改进都是相辅相成的,最大化性能提升的方式是将上下文嵌入(来自Voyage或Gemini)、上下文BM25、重新排序步骤以及将20个块添加到提示中结合在一起。
在未来,随着知识库的不断扩展,上下文检索将成为提升AI模型性能的重要工具,帮助开发者更高效地实现智能化的应用。希望本文能为你在AI开发和应用的道路上提供一些有价值的见解与启发。
参考:
本文转载自公众号Halo咯咯 作者:基咯咯