Anthropic分享RAG最佳实践:Contextual Retrieval!

先说结论,Anthropic提出了一种显著改进RAG中检索步骤的方法。这种方法被称为“上下文检索(Contextual Retrieval)”:

  • 它使用两种子技术:上下文嵌入(Contextual Embeddings)和上下文BM25

  • 这种方法可以将检索失败的次数减少49%

  • 并且当结合重排时,减少67%

上下文检索(Contextual Retrieval)的出发点:RAG是一种从知识库检索相关信息并将其附加到用户提示上的方法,显著提升了模型的响应。但是传统的RAG解决方案在编码信息时会移除上下文,这常常导致系统无法从知识库中检索到相关信息。

关于仅使用更长提示的说明

有时最简单的解决方案就是最好的。如果你的知识库小于200,000个token(大约500页材料),你可以将整个知识库包含在你给模型的提示中,无需RAG或类似方法。

几周前,Anthropic为Claude发布了提示缓存,这使得这种方法显著更快且更具成本效益。开发者现在可以在API调用之间缓存经常使用的提示,减少延迟超过2倍,成本降低高达90%。

然而,随着你知识库的增长,你需要一个更可扩展的解决方案。这就是上下文检索发挥作用的地方。

RAG简介:扩展到更大的知识库

对于不适合在上下文窗口内的知识库,RAG是典型的解决方案。RAG通过以下步骤预处理知识库:

  • 将知识库(文档的“语料库”)分解成较小的文本块,通常不超过几百个token;

  • 使用嵌入模型将这些块转换为编码意义的向量嵌入;

  • 将这些嵌入存储在允许按语义相似性搜索的向量数据库中。

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

虽然嵌入模型在捕获语义关系方面表现出色,但它们可能会错过关键的精确匹配。幸运的是,有一种较老的技术可以在这些情况下提供帮助。BM25使用词汇匹配来找到精确的单词或短语匹配。它特别适用于包含唯一标识符或技术术语的查询。

RAG解决方案可以通过以下步骤结合嵌入和BM25技术,更准确地检索最适用的块:

  • 将知识库(文档的“语料库”)分解成较小的文本块,通常不超过几百个token;

  • 为这些块创建TF-IDF编码和语义嵌入;

  • 使用BM25基于精确匹配找到顶部块;

  • 使用嵌入基于语义相似性找到顶部块;

  • 使用排名融合技术结合并去重(3)和(4)的结果;

  • 将顶部K块添加到提示中以生成响应。

通过利用BM25和嵌入模型,传统的RAG系统可以提供更全面和准确的结果,平衡精确术语匹配与更广泛的语义理解。

这种方法允许你以成本效益的方式扩展到巨大的知识库,远远超出单个提示所能适应的范围。但这些传统的RAG系统有一个显著的限制:它们经常破坏上下文。

传统RAG中的上下文困境

在传统的RAG中,文档通常被分割成较小的块以便于检索。虽然这种方法对许多应用来说效果很好,但当单个块缺乏足够的上下文时,它可能会导致问题。

例如,想象你有一个金融信息集合(比如美国SEC文件)嵌入在你的知识库中,你收到了以下问题:“2023年第二季度ACME公司的收入增长是多少?

一个相关的块可能包含这样的文本:“公司的收入比上个季度增长了3%。”然而,这个块本身并没有指定它指的是哪家公司或相关的时间段,这使得检索正确信息或有效使用信息变得困难。

上下文检索技术(Contextual Retrieval)

上下文检索通过在嵌入之前将块特定的解释性上下文附加到每个块之前(“上下文嵌入”)和创建BM25索引(“上下文BM25”)来解决这个问题。

回到SEC文件集合示例。这里有一个块如何被转换的例子:

original_chunk = "The company's revenue grew by 3% over the previous quarter."

contextualized_chunk = "This chunk is from an SEC filing on ACME corp's performance in Q2 2023; the previous quarter's revenue was $314 million. The company's revenue grew by 3% over the previous quarter."
中文:

中文:

原始块 = "公司的收入比上个季度增长了3%。" 
上下文化块 = "这个块来自关于ACME公司2023年第二季度表现的SEC文件;上个季度的收入为3.14亿美元。公司的收入比上个季度增长了3%。"

值得注意的是,过去曾提出过使用上下文来改进检索的其他方法。其他提议包括:向块添加通用文档摘要(实验看到非常有限的收益),假设性文档嵌入(HyDE)基于摘要的索引(进行了评估,效果不佳)。这些方法与上下文检索方法不同。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

上下文检索实现

当然,手动注释知识库中的成千上万甚至数百万块会是太多工作。为了实施上下文检索,基于Claude模型,使用整个文档的上下文为每个块提供简洁的、块特定的上下文。使用了以下Claude 3 Haiku Prompt为每个块生成上下文:

<document> 
{{WHOLE_DOCUMENT}} 
</document> 
Here is the chunk we want to situate within the whole document 
<chunk> 
{{CHUNK_CONTENT}} 
</chunk> 
Please give a short succinct context to situate this chunk within the overall document for the purposes of improving search retrieval of the chunk. Answer only with the succinct context and nothing else.

生成的上下文文本,通常为50-100个token,会在嵌入索引和BM25索引之前附加到块上。

**Contextual Retrieval**实际中的预处理流程:上下文检索是一种提高检索准确性的预处理技术。

使用Prompt Caching降低上下文检索的成本

上面提到的特殊的提示缓存功能,上下文检索在Claude上是可能以低成本实现的。有了提示缓存,你不需要为每个块传入参考文档。你只需将文档加载到缓存中一次,然后引用先前缓存的内容。假设800 token的块,8k token的文档,50 token的上下文指令,每个块100 token的上下文,一次性生成上下文化块的成本是每百万文档token 1.02美元。

上下文检索性能提升

在各种知识领域(代码库、小说、ArXiv论文、科学论文)进行了实验,嵌入模型、检索策略和评估指标,实验表明:

  • 上下文嵌入将Top20个块的检索失败率降低了35%(5.7% → 3.7%)。

  • 结合上下文嵌入和上下文BM25将Top20个块的检索失败率降低了49%(5.7% → 2.9%)。

使用表现最佳的嵌入配置(Gemini Text 004)检索前20个块时所有知识领域的平均性能

通过重排(Reranking)进一步提高性能

在最后一步中,可以结合上下文检索和另一种技术来获得更多的性能改进。在传统的RAG中,AI系统搜索其知识库以找到可能相关的信息块。对于大型知识库,初始检索通常会返回大量(有时是数百个)具有不同相关性和重要性的块。

Reranking是一种常用的过滤技术,确保只有最相关的块被传递到模型。重新排名提供了更好的响应,并降低了成本和延迟,因为模型处理的信息更少。关键步骤是:

  • 执行初始检索以获取Top潜在相关的块(使用了Top150个);

  • 将TopN块和用户的查询一起通过重新排名模型;

  • 使用重新排名模型,根据其与提示的相关性和重要性给每个块打分,然后选择TopK块(使用了Top20个);

  • 将TopK块作为上下文传递到模型以生成最终结果。

结合上下文检索和重新排序来最大化检索准确性

上下文检索 性能进一步改进

使用Cohere重新排名器进行了测试,实验表明,在各个领域,添加重新排序步骤可以进一步优化检索。

具体来说,发现重新排名的上下文嵌入和上下文BM25将Top20块的检索失败率降低了67% (5.7% → 1.9%)。

结论

Anthropic进行了大量的测试,比较了上述所有技术的不同组合(嵌入模型、使用BM25、使用上下文检索、使用重新排名器和检索的TopK结果),所有这些都在不同类型的数据集上进行了测试,总结如下:

  • 嵌入+BM25比单独使用嵌入更好;

  • Voyage和Gemini具有最好的嵌入;

  • 将Top20块传递给模型比仅Top10或5更有效;

  • 向块添加上下文大大提高了检索准确性;

  • 重新排名比不重新排名更好;

  • 所有这些好处都是叠加的:为了最大化性能改进,可以结合上下文嵌入(来自Voyage或Gemini)、上下文BM25,加上重新排名步骤,并添加20个块到提示中。

附录I

以下是跨数据集、嵌入提供商、使用BM25+嵌入、使用上下文检索以及对检索@20的重新排名的使用结果细分。

向块中添加通用文档摘要:https://aclanthology.org/W02-0405.pdf
HyDE:https://arxiv.org/abs/2212.10496
Summary-based indexing:https://www.llamaindex.ai/blog/a-new-document-summary-index-for-llm-powered-qa-systems-9a32ece2f9ec

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

学习路线

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值