2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Self-RAG: 自校验,自检索高级RAG 实施和实际应用介绍

发布日期:2024-07-19 07:17:44 浏览次数: 4319


导言

做RAG的同学都知道,检索质量直接决定了RAG系统回答问题的质量, 但很多场景下,如果检索出来的内容和问题其实不相关, 反倒会降低输出的质量。本文就介绍了另外一种RAG方法:Self-RAG, 由大模型决定是否需要检索, 以及在最终输出结果前自己评估答案的质量保证输出最佳答案。

通过阅读本文你能够了解:

  • Self-RAG的基本原理和方法

  • 获取Self-RAG论文和代码

关注公众号,后台发送"Self-RAG"获取 Self-RAG相关论文和Self-RAG实现源代码


Self-RAG是检索增强生成(RAG)的另一种形式。

与其他RAG检索策略不同,它不会增加RAG过程中的特定模块。相反,它优化了RAG框架中的各个模块,以改善整体的RAG过程。


Self-RAG 概述

Self-RAG 是一种新的 RAG 方法,它利用经过训练的LLM(大型语言模型)进行检索、生成和评估任务,以提高生成结果的准确性和质量。

研究团队通过实验证明,Self-RAG 在开放领域问答、推理和事实验证任务中表现非常好。

它在基础RAG模型的基础上,优于商业模型如ChatGPT和开源模型如Llama2

Self-RAG 旨在解决基础RAG存在的几个问题:

  1. 过度检索: 基础RAG总是对输入问题进行知识检索,这可能引入无关或离题的内容,影响输出结果。    

  2. 不准确的输出: 因为LLM并不总是根据检索到的知识来回答问题,输出可能与检索到的信息不一致。

在接下来的部分中,我们将了解为什么Self-RAG能够解决这些问题。

Self-RAG流程

为了更好地理解自我RAG,让我们将其与基础RAG进行比较,从基础RAG流程图开始:

  1. 这个流程图省略了文档存储和建立索引部分,侧重于检索和生成过程。

  2. 对于每个查询,基本RAG检索相关文档,并将所有文档和查询输入LLM,然后生成结果。

  3. 生成结果的提示需要所有检索到的文档作为查询的上下文,通常要求LLM基于上下文知识进行回答。

现在,让我们看看Self-RAG流程图:    

  • Self-RAG最初使用LLM为查询生成初步结果(这个LLM是经过特殊训练的,我们稍后会讨论)。基于生成的结果,它决定是否需要检索。如果不需要,就直接返回结果。

  • 如果需要检索,Self-RAG检索相关文档,并将每个文档与查询一起输入LLM,以获得每个文档的生成结果。生成结果的提示只使用单个文档作为查询的上下文。

  • 然后评估每个文档的生成结果,选择得分最高的结果作为最终答案返回。


Self-RAG和基础RAG之间的区别

从上面的两个流程图中,我们可以看到自我RAG和基本RAG之间的主要区别

  • 基础RAG对每个查询执行检索,而自我RAG可以根据生成的结果确定是否需要检索。    

  • 基础RAG使用所有检索到的文档作为上下文,而Self-RAG只使用单个文档作为上下文,但为每个文档生成结果。

  • Self-RAG对生成的结果进行评估和选择过程,而基础RAG缺乏这一过程,因为它只生成一个结果。

  • 基础RAG使用通用的LLM,而Self-RAG使用经过特殊训练的LLM


按需检索

在了解了Self-RAG的整体流程之后,深入研究每个阶段的实现原理,从初始查询阶段开始。

与基础RAG不同,自我RAG使用训练有素的LLM,在文本生成过程中输出称为反思标记的特殊标记。在RAG过程中,Self-RAG使用反思标记进行不同的操作。

当Self-RAG开始使用LLM生成结果时,它会输出Retrieve类型的反思标记。这些标记有三个值:

  1. 检索: 表示需要检索。

  2. 无需检索: 表示不需要检索。

  3. 继续使用证据: 表示模型可以继续使用先前检索到的证据。

看一些自我RAG生成反思标记的例子。首先是一个不需要检索的问题:

问题:写一篇关于你最好的暑假的文章。             
答案:当然![无需检索]
作为人工智能,我没有个人经历或记忆,但我可以写关于暑假对个人和家庭的重要性和意义。[无需检索]......


在回答中,我们看到了[无需检索]关键词,表示对于这个问题不需要检索。

现在,一个需要检索的问题:

问题:美国的雕像是如何得到它们的名字的?             
答案:其中一些。[检索]
<段落>[无关] 一些是以最初赞助它们的人命名的,一些是以它们代表的事件或问题命名的,还有一些是以神话人物命名的。[实用性:4]


在这里,回答包括了[检索]<段落>关键词,表示需要外部知识,即检索。    

当然,基本RAG也可以通过其他方式实现按需检索,例如首先使用LLM确定查询是否需要检索,返回是/否的结果。如果不需要检索,则LLM生成最终结果。这意味着如果查询不需要检索,基本RAG会调用两次LLM,而自我RAG只会调用一次LLM。


如图所示,Self-RAG在无需检索分支上比基本RAG更有效率。


检索和生成

当Self-RAG在初始查询后确定需要检索时,它使用检索器根据查询找到文档。在检索方面,Self-RAG和基本RAG类似,都使用向量相似性来检索文档。

在检索到文档后,将每个文档和查询输入LLM以为每个文档生成结果。


在这第二代阶段,Self-RAG LLM生成三种类型的反思标记:

  • IsREL: 检查检索到的文档是否为查询提供了有用信息,值为[相关][不相关]表示相关性。

  • IsSUP: 检查检索到的文档是否支持生成的答案,值为[完全支持],[部分支持][无支持/矛盾]表示支持水平。

  • IsUSE: 表示生成的答案是否对查询有帮助,值为[实用性:5],[实用性:4],[实用性:3],[实用性:2],[实用性:1],表示答案的质量,数字越高表示质量越高。    

   

以下是自我RAG在这个阶段生成的结果的示例:


问题:洛基在试图征服地球时使用了什么神秘物体?              
答案1:[相关] 洛基在试图征服地球时使用的神秘物体是无法预知潜力的强大能源——Tesseract。[完全支持] [实用性:5]              
答案2:[相关] 塔诺斯使用时间宝石躲避了洛基的攻击。[无支持/矛盾] [实用性:5]


每个生成的结果都包括上述三种反思标记,这些标记在下一个评估阶段中使用。

优化生成效率

尽管这个阶段需要LLM为每个文档生成结果,可能会降低与基础RAG相比的效率,但并发可以提高效率。    

在这个图表中,虽然Self-RAG调用LLM三次,但并发执行使执行时间等于调用LLM一次。因此,尽管消耗更多的标记,但Self-RAG在这个阶段的效率与基本RAG相匹配。

评估和选择

在为每个文档生成结果后,Self-RAG 使用反思标记来评估每个结果,计算每个文档的分数,然后选择得分最高的文档作为最终答案。    

评估参数:logprobs

在深入研究评估方法之前,让我们先了解一下 logprobs 参数。该参数指的是在结果生成过程中由LLM输出的每个生成标记(单词或子单词)的对数概率,用于计算每个标记的分数。

以下是来自OpenAI API的示例结果:


{"id": "cmpl-6yE4TGqItUpYJ6xYcIzY6","object": "text_completion","created": 1623073722,"model": "davinci","choices": [{"text": " I'm good, thanks!","index": 0,"logprobs": {"tokens": [" I'm", " good", ",", " thanks", "!"],"token_logprobs": [-0.1, -0.05, -0.2, -0.3, -0.15],"top_logprobs": [{" I'm": -0.1," I am": -2.3," I": -3.1},{" good": -0.05," fine": -1.5," great": -2.0},{",": -0.2,".": -2.5,"!": -3.0},{" thanks": -0.3," thank you": -1.8," thank": -2.6},{"!": -0.15,".": -1.9,"?": -2.7}],"text_offset": [5, 9, 14, 15, 21]},"finish_reason": "length"}],"usage": {"prompt_tokens": 5,"completion_tokens": 5,"total_tokens": 10}}

在这个例子中,logprobs 参数的输出如下:

  • tokens: 生成标记的列表 [" I'm", " good", ",", " thanks", "!"]

  • token_logprobs: 每个生成标记的对数概率值 [-0.1, -0.05, -0.2, -0.3, -0.15]

  • top_logprobs: 每个生成标记的前几个候选项及其对数概率。例如,第一个标记 I'm 的前几个候选项为 {" I'm": -0.1, " I am": -2.3, " I": -3.1}

  • text_offset: 生成文本中每个标记的偏移量 [5, 9, 14, 15, 21]


在Self-RAG中,评估函数使用logprobs参数来计算IsRELIsSUPIsUSE反射标记的分数。

例如,如果输出包括标记[Fully supported],这意味着LLM计算了可能的标记如[Fully supported][Partially supported]等的概率,但最终选择了[Fully supported]

因此,在评估IsSUP分数时,评估是基于logprobs中这些标记的概率。

评估公式

在了解了 logprobs 参数之后,让我们来看一下 Self-RAG 的三个评估指标的计算公式。首先是 IsREL 的计算公式:

s(ISREL) = p(ISREL = RELEVANT) / (p(ISREL = RELEVANT) + p(ISREL = IRRELEVANT))

p(ISREL = RELEVANT): 模型预测 ISREL 为 Relevant 的概率。    

p(ISREL = IRRELEVANT): 模型预测 ISREL 为 Irrelevant 的概率。

接下来是 IsSUP 的计算公式:

s(ISSUP) = p(ISSUP = FULLY) / S + 0.5 * p(ISSUP = PARTIALLY) / S

p(ISSUP = FULLY): 模型预测 ISSUP 为 Fully Supported 的概率。

p(ISSUP = PARTIALLY): 模型预测 ISSUP 为 Partially Supported 的概率。

S: 三种可能值的概率之和:S = ∑t∈{FULLY,PARTIALLY,NO} p(ISSUP = t)

最后是 IsUSE 的计算公式:

s(ISUSE) = (∑i wi * p(ISUSE = i)) / S

wi: 分别对应每个级别的权重:{-1, -0.5, 0, 0.5, 1},分别对应 ISUSE={1, 2, 3, 4, 5}。

p(ISUSE = i): 模型预测 ISUSE 为级别 i 的概率。

S: 五个级别的概率之和:S = ∑t∈{1,2,3,4,5} p(ISUSE = t)

这些计算公式基于 logprobs 参数,可以更好地评估每个文档的生成结果,并选择得分最高的文档作为最终结果。

模型训练

Self-RAG 需要训练两种类型的模型:评论模型(Critic)和生成模型(Generator)。评论模型使用 GPT-4 生成的数据作为训练材料,而生成模型使用检索数据和评论模型生成的数据作为训练材料。两者都可以基于基础模型进行训练。

Self-RAG 研究团队基于 Llama2–7b 和 Llama2–13b 训练了模型。训练好的模型可以在 Huggingface 上找到。然而,官方模型没有明确区分评论和生成模型,这意味着这些模型可以用于评估和生成。

让我们来看看模型的训练数据,首先是评论模型的训练数据。以下是一个片段:


{"task": "retrieval","instruction": "当提供指示时,请评估是否从外部来源(例如网络,如维基百科)获取额外信息有助于产生更全面的回应。以 [Retrieval] 或 [No Retrieval] 回应。","input": "任务指示:评估以下网站设计。https://example.com\n","output": "[Retrieval]"}
  •  评论模型的每个训练数据条目都是一个任务,任务类型包括 retrievalgroundnessutilitymulti_retrieval

  • retrieval 任务训练生成 IsREL 评估指标。

  • groundness 任务训练生成 IsSUP 评估指标。

  • utility 任务训练生成 IsUSE 评估指标。

  • multi_retrieval 任务训练生成 Retrieve 类型的反思标记,即是否需要检索。


从训练数据中,我们可以看到评论模型主要训练如何评估这四种类型的任务,根据指示和输入数据输出正确的评估结果。

接下来,让我们来看生成模型的训练数据。以下是一个片段:


{"instruction": "问题:根据“游骑兵展示一些铁以扳平系列赛”编写文本\n文本:除了才华横溢、自信和高薪外,这些经验丰富的游骑兵还很体贴。\n\n问题:根据“联盟不会解除通用汽车加拿大总部的封锁”编写文本\n文本:尽管有可能将新车生产带到一家卡车工厂即将关闭的综合体,但加拿大汽车工人官员周五拒绝解除对通用汽车加拿大总部的封锁。\n\n问题:根据“六名阿塞拜疆反对派议会候选人宣布绝食”编写文本","output": "[No Retrieval] 六名阿塞拜疆反对派议会候选人周五宣布绝食,以向政府施压确保公平选举。[Utility:5]","input": "","id": "flan_v2_18667","dataset_name": "flan_v2"}


从训练数据中,我们可以看到生成模型主要训练如何使用反思标记生成全面的结果。

LlamaIndex Self-RAG包

目前,有一些开源的自助RAG实现,例如LlamaIndex上的自助RAG实现,在Llama Packs中可用。让我们看看如何使用LlamaIndex的自助RAG包。

Llama Packs是社区驱动的预打包模块或模板集合,用于快速构建基于LLM的应用程序。如果LlamaIndex就像VsCode,那么Llama Packs就像VsCode扩展。    

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅