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)基于摘要的索引(进行了评估,效果不佳)。这些方法与上下文检索方法不同。

上下文检索实现

当然,手动注释知识库中的成千上万甚至数百万块会是太多工作。为了实施上下文检索,基于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.pd
fHyDE: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大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56591.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf删除几个页面怎么操作?PDF页面删除的快捷方法

pdf删除几个页面怎么操作&#xff1f;在日常办公与学习中&#xff0c;PDF文件因其跨平台兼容性和良好的格式保持性而广受欢迎。然而&#xff0c;随着文件内容的累积&#xff0c;PDF文档往往会变得庞大而臃肿&#xff0c;不仅占用存储空间&#xff0c;还可能在传输时造成不便。因…

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…

FAST-LIVO复现

文章目录 FAST-LIVO准备工作编译运行复现效果 FAST-LIVO FAST-LIVO&#xff08;Fast LiDAR-Inertial-Visual Odometry&#xff09;是一种融合LiDAR&#xff08;激光雷达&#xff09;、惯性测量单元&#xff08;IMU&#xff09;和视觉信息的里程计算法。它旨在提供高精度和实时…

MySQL 执行流程是怎样的?

可以看到&#xff0c; MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层&#xff0c; Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现。存储引擎层负责数据的存储和读取。 InnoDB、MyISAM、Memory。不同的存储引擎共用一个 Server 层…

7-基于国产化FT-M6678+JFM7K325T的6U CPCI信号处理卡

一、板卡概述 本板卡系我公司自主研发&#xff0c;基于6U CPCI的通用高性能信号处理平台。板卡采用一片国产8核DSP FT-C6678和一片国产FPGA JFM7K325T-2FFG900作为主处理器。为您提供了丰富的运算资源。如下图所示&#xff1a; 二、设计参考标准 ● PCIMG 2.0 R3.0 CompactP…

推荐一个可以免费上传PDF产品图册的网站

​在数字化时代&#xff0c;企业将产品图册以PDF格式上传至网络&#xff0c;不仅便于客户浏览和下载&#xff0c;还能提升企业的专业形象。今天&#xff0c;就为您推荐一个可以免费上传PDF产品图册的网站——FLBOOK&#xff0c;轻松实现产品图册的在线展示。 1.注册登录&#x…

从Naive RAG到Agentic RAG:基于Milvus构建Agentic RAG

检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;作为应用大模型落地的方案之一&#xff0c;通过让 LLM 获取上下文最新数据来解决 LLM 的局限性。典型的应用案例是基于公司特定的文档和知识库开发的聊天机器人&#xff0c;为公司内部人员快速检索内部…

服务器数据恢复—Raid5阵列硬盘磁头损坏导致掉线的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌存储设备上有一组由10块硬盘&#xff08;9块数据盘1块热备盘&#xff09;组建的raid5阵列&#xff0c;上层部署vmware exsi虚拟化平台。 服务器故障&#xff1a; raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取&am…

在Centos中安装、配置与使用atop监控工具

目录 前言1. atop工具的安装1.1 atop简介1.2 atop的安装步骤 2. 安装并配置netatop模块2.1 安装内核开发包2.2 安装所需依赖2.3 下载netatop2.4 解压并安装netatop2.5 启动netatop 3. atop的配置与使用3.1 配置监控周期与日志保留时间3.2 设置定时任务生成日志3.3 启动与查看at…

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

URDF 文件是一个标准的 XML 文件格式&#xff0c;用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签&#xff0c;简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂&#xff0c;但在 URDF 中可以主要简化为两个核心部分&#xff1a; 连杆&#xff…

Linux——echo-tail-重定向符

echo命令 类似printf 输出&#xff0c;最好加“ ” echo "hello Linux" 反引号 ‘ ’ 引用命令 echo ‘ pwd ’ 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容&#xff0c;追踪文件最新更改 tail -num 从尾部往上读num行&#…

九大排序之选择排序和归并排序

1.前言 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 本章重点&#xff1a; 堆排序和选择排序和归并排序 2.选择排序 基本思路 left和right记录区间的左端和右…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤&#xff1a;&#xff08;数据默认保存在/var/lib/elasticsearch下&#xff0c;自行更改&#xff09; 一、装 Java 环境 Elasticsearch 是用 Java 编写的&#xff0c;所以需要先安装 Java 运行环境。 检查系统中是…

pdf怎么删除多余不想要的页面?删除pdf多余页面的多个方法

pdf怎么删除多余不想要的页面&#xff1f;在日常办公或学习中&#xff0c;我们经常会遇到需要处理PDF文件的情况。PDF文件因其格式稳定、不易被篡改的特点而广受青睐&#xff0c;但在编辑方面却相对不如Word等文档灵活。有时&#xff0c;在接收或创建的PDF文件中&#xff0c;可…

OceanBase 的写盘与传统数据库有什么不同?

背景 在数据库开发过程中&#xff0c;“写盘”是一项核心操作&#xff0c;即将内存中暂存的数据安全地转储到磁盘上。在诸如MySQL这样的传统数据库管理系统中&#xff0c;写盘主要有以下几步&#xff1a;首先将数据写入缓存池&#xff1b;其次&#xff0c;为了确保数据的完整性…

利用Spring Boot构建大创项目资源规划平台

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

Linux的zookeeper安装部署

1.zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和HBASE的重要组件 2.下载zookeeper安装包zookeeper安装包https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/ 移动到Linux解压 解压到/export/server文件夹 命令: tar -xvf apache-zooke…

【前端】如何制作一个自己的网页(6)

接上文 网络中的图片 我们也可以在百度等网站搜索自己喜欢的图片。 此时对图片点击右键&#xff0c;选择【复制图片地址】&#xff0c;即可获得该图片的网络地址。 其实在HTML中&#xff0c;除了图片以外&#xff0c;我们还可以利用地址找到另一个网页。 如右图所示&#…

spring/springboot获取resource目录下的文件

1.正常情况springbot项目的resource目录下会反正项目使用到的很多文件所以这里编写一个读取demo目录如下图所示 2.复制代码直接运行 import org.springframework.core.io.ClassPathResource; import java.nio.file.Files; import java.util.stream.Stream;/*** spring/spring…

第十四章 RabbitMQ延迟消息之延迟队列

目录 一、引言 二、死信队列 三、核心代码实现 四、运行效果 五、总结 一、引言 什么是延迟消息&#xff1f; 发送者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间后收到消息。 什么是延迟任务&#xff1f; 设置在一定时间之后才…