Corrective Retrieval Augmented Generation

一、动机

不完美的检索器,检索的结果会影响LLM的生成结果

RAG的基本架构:

可以看出来,生成器和检索器式紧密耦合的,这样系统的容错能力很弱。这个就是本文的核心关注问题。 

二、解决方法

针对检索器返回不准确结果的情景,提出了纠错检索增强生成,用于纠正检索器的结果。

设计一个轻量级的检索评估器,用来评估针对查询所检索文档的整体质量,评估器会输出一个置信度评分,基于这个评分,系统可以触发三种不同的知识检索操作:正确、错误、模糊。

对于错误:通过网页的搜索来拓展检索信息的广度

为了去除检索文档中那些冗余而无助于生成的上下文信息,设计了一个先分解在重组的算法,就是为了对检索信息进行优化提炼,强化关键要点的提取,最小化无关内容的干扰,以达到提升检索数据的有效利用。

三、模型推理概述

首先:给定的查询和来自任意检索器的检索文档

然后:构建一个检索评估器,用于评估检索文档与输入查询的相关性评分,相关性评分分为三个置信度等级,正确、错误、模糊

正确:检索到的文档将被精炼为更精确的知识条带。这一精炼操作包括知识分解、过滤和重组

错误:检索到的文档将被丢弃。相应地,系统会转向网页搜索,并将其视为补充的知识来源,用于纠正错误

模糊:结合前两者的优点

 1.检索评估器

T5-lage模型架构:

T5模型对Transformer进行了输入的改变,使其能够统一文本到文本的输入格式,通过加前缀的方式,之后就是针对不同的任务进行微调。 

对T5-large进行微调,微调的数据集使用的数据集来自Self-RAG检索后的数据集(Contriever检检索器获得的):PopQA。

在PopQA中一共包含14000个样本,其中1399个用于测试,剩余的用于微调。这个微调的目的就是让T5-large能够更好的判断检索文档与输入问题的相关性。

微调的过程中:样本分为正样本和负样本,正样本标签为1,负样本标签为-1,推理的时候,评估器为每个文档计算一个相关性得分,范围为-1,1,然后通过实验这顶置信度值,不同数据集不同。

正负样本的构成:正样本:通常是维基百科上与该问题相关的条目标题。这些条目可以看作是正样本的一个来源。

使用PopQA训练好的模型还迁移到了Bio、Pub、ARC数据集上。负样本的获取:这些负样本通过随机从检索结果中采样来获得。换句话说,检索系统可能返回了一些看起来很接近查询的问题或内容,但其实它们与输入的查询并无实质性联系。

对于每个问题,通常会检索到 10 篇文档。问题会与每个文档单独拼接作为输入,评估器会为每个问题-文档对单独预测相关性评分。

2.执行动作

1.正确

当至少一个检索文档的自信度得分高于上阈值时,检索的结果就被认为是正确的,这就意味着从检索的结果中获取知识应该更加可靠和准确,虽然找到了相关的文档,但是这些相关的文档里面包含着噪声片段,进行进一步知识精炼

2.错误

检索的文档的置信度得分都低于阈值的时候,就认为检索的文档是不相关的,这个时候就在网络上搜索一信息,进行补充。

3.模糊

当得分是一个中间值得时候,说明评估器没有信心判断是不是好的,这个时候就把正确和不正确的结合在一起。

模糊的设置可以减轻对检索评估器准确性的依赖

精炼:

方法就是分解-组合,进一步提取其中最关键的知识片段。先将检索的结果拆分较小的单元,这些小单元通常就包含一两句话,每个单元假设包含独立的新兴信息 ,在对这些单元进行检索评估,删掉不相关的单元,将相关的片段按顺序从新组合。

四、实验

我们的实验展示了CRAG对基于RAG方法的适应性,以及在短文本和长文本生成任务中的泛化能力。

1.任务

数据集:PopAQ(短文本生成)、Biography(长文本生成)、PubHealth(真假问题)、Arc-Challenge(多项选择题)

评估指标:PopQA、PubHealth、Arc-Challenge采用准确率

                  Biography采用FactScore

准确率:

Factscore:

2.基线

CRAG对比的方法:带检索的、不带检索的(标准RAG、高级RAG)

无检索的基准:评估了开源的LLaMA2-7B、13B、指令微调模型Alpaca-7B、CoVE65B、一些闭源的:LLaMA2-chat13B、chatgpt

标准 RAG:使用与我们实验相同的检索器检索的段落,进行生成输出,并采用了几种公共指令微调的 LLM,包括 LLaMA2-7B、13B、Alpaca-7B、13B,以及在 Self-RAG中指令微调的 LLaMA2-7B

高级RAG:

        SAIL:该方法在 Alpaca 指令微调数据上对语言模型进行了指令微调,并在指令前插入了检索到的文档

        Self-RAG:该方法对 LLaMA2 进行了指令微调,使用了包含多个反射标记集的数据,这些标记由 GPT-4(OpenAI,2023)标注

实验结果:

结果分析:

将C与标准的RAG结合,以及和self-RAG结合。显著提升了RAG和Self-RAG的性能, 

说明了CRAG的适应性强

 CRAG 就像一个不挑车的发动机,放在哪辆车上都能跑得不错。而 Self-RAG 是个定制发动机,必须装在专门设计的车上才能发挥最大效力。

 消融实验:

在PopQA上的消融实验:分别移除每个单一动作后的准确率对比分析。

在 PopQA 数据集上进行消融实验,分别移除每个知识利用操作后的准确率对比分析。 

这些消融实验,验证了触发动作在检索评估器中的有效性和对性能的贡献。 

检索评估器的实验结果:

 为了进一步验证所提方法对检索性能的鲁棒性,我们研究了在不同检索性能下生成性能的变化。为了模拟低质量的检索器,我们故意随机移除了部分准确的检索结果,并评估性能变化。

下图展示了在 PopQA 数据集上 Self-RAG 和 Self-CRAG 的性能变化。可以看到,随着检索性能的下降,Self-RAG 和 Self-CRAG 的生成性能也有所下降,这表明生成器在很大程度上依赖于检索器的质量。此外,随着检索性能的下降,Self-CRAG 的生成性能下降的幅度比 Self-RAG 略小。这些结果表明,Self-CRAG 在增强对检索性能鲁棒性方面优于 Self-RAG。

 

<think>好的,用户这次遇到了两个Puppet执行中的错误:一个是关于bash包的版本变更通知,另一个是无法删除用户sapub的错误。我需要先理解每个错误的原因,然后给出对应的解决方案。 首先看第一个Notice,这似乎是一个正常的包版本变更,从5.2.15-2+b7变成了netease的定制版本。这可能是因为系统配置了某个仓库源,导致Puppet检测到新版本并自动升级。用户可能需要注意这个变更是否预期,是否存在兼容性问题,但暂时没有错误,所以应该先处理第二个错误。 第二个错误是关键,用户尝试删除sapub用户时失败,因为该用户当前被进程1465使用。需要确定这个进程是什么,为什么会使用该用户,然后终止进程或解除占用后才能删除用户。常见的解决步骤包括查找进程、终止进程、再次尝试删除用户,并确保之后该用户不再被占用。 另外,用户可能是在自动化配置过程中遇到了这个问题,可能需要调整Puppet的执行顺序,比如先停止相关服务再删除用户,或者在Puppet配置中添加依赖关系,确保删除用户前没有进程运行。还可能要考虑是否真的需要删除该用户,或者是否有其他配置错误导致该用户被意外使用。 需要提醒用户检查进程1465的详细信息,确认是否可以安全终止,避免影响系统运行。同时,在Puppet配置中处理资源依赖关系,防止类似问题再次发生。可能还需要建议用户使用force选项强制删除用户,但需谨慎,确保数据安全。 总结下来,解决方案分步骤:终止进程、删除用户、调整Puppet配置。同时需要解释错误原因,确保用户理解每个步骤的作用和潜在影响。</think>以下是针对该问题的分步解决方案: **错误分解:** 1. **软件包更新通知**(非错误): - `bash`软件包从官方版本`5.2.15-2+b7`更新为网易定制版本`5.2.15-2+netease1` - 这属于正常的版本变更提示,无需处理 2. **用户删除失败**(核心错误): - 错误代码:`Execution of '/usr/sbin/userdel sapub' returned 8` - 直接原因:用户`sapub`被进程`1465`占用 - 系统保护机制:Linux不允许删除正在使用的用户账户 **验证步骤:** ```bash # 查看占用进程详情(替换实际PID) ps -fp 1465 # 检查用户关联进程(推荐方式) pgrep -u sapub | xargs ps -fp ``` **解决方案:** **阶段一:立即处理** ```bash # 1. 终止关联进程(强制模式) sudo pkill -9 -u sapub # 2. 验证进程终止 pgrep -u sapub || echo "无残留进程" # 3. 删除用户及其关联文件 sudo userdel -r sapub # -r参数同时删除家目录和邮箱 ``` **阶段二:长期修复(Puppet配置优化)** ```puppet # 在User资源声明前添加进程终止保障 exec { 'kill-sapub-processes': command => "pkill -9 -u sapub || true", # || true防止无进程时报错 path => ['/usr/bin','/bin'], onlyif => "pgrep -u sapub", before => User['sapub'], } user { 'sapub': ensure => absent, managehome => true, # 同时删除家目录 } ``` **特殊场景处理:** - **如果用户是系统服务账户**: ```bash # 先停用关联服务 sudo systemctl stop sapub_service sudo systemctl disable sapub_service ``` - **强制删除(慎用)**: ```bash # 使用--force参数(可能残留孤立文件) sudo userdel --force sapub ``` **错误预防建议:** 1. 在Puppet配置中增加前置检查: ```puppet # 使用onlyif条件判断 exec { 'pre-check-sapub': command => "test $(pgrep -u sapub | wc -l) -eq 0", path => ['/usr/bin','/bin'], } ``` 2. 配置资源依赖关系: ```puppet Exec['pre-check-sapub'] -> User['sapub'] ``` **状态验证:** ```bash # 确认用户已删除 getent passwd sapub || echo "用户不存在" # 检查残留文件 sudo find / -uid $(id -u sapub 2>/dev/null) 2>/dev/null ``` 该错误表明系统存在进程依赖锁定,通过合理的进程管理和资源声明顺序调整,既可立即解决问题,也能实现自动化环境下的稳定运维。建议优先使用`阶段二`的Puppet配置方案,可有效预防同类问题复发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值