解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

这篇具有很好参考价值的文章主要介绍了解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~

反思来源于对RAG下模型回答的直观感受,最初我们被ChatGPT的能力所震惊,并不是它能背诵知识,而是模型在知识压缩后表现出的“涌现能力”,更具体到RAG所属的问答领域,是模型能够精准的基于上文从压缩的参数中召回并整合相应的知识,甚至进行知识外推的能力。通俗点说它有可能生成我在任何地方都检索不到的答案!

但RAG当前的多数使用方法,采用只让模型基于检索到的内容进行回答的方案,其实限制了模型自身对知识压缩形成的智能,大模型似乎变成了文本抽取和总结润色的工具。体验上大模型直接回答的效果就像是学霸答题文采四溢,而RAG有时倒像是学渣开卷考试,答得小心翼翼一有不慎还会抄错答案......

既要保证事实性,又要保留模型智能,则需要最大化的使用模型已经内化压缩到参数中的信息,只在需要使用外部知识增强的时候再进行工具调用。看到过以下几种方案

  1. Detection:通过前置判断,决策模型何时需要使用外挂,在模型可以自行回答的时候,使用模型回答,当模型不能回答的时候走RAG检索生成
  • Realtime Data:需要获取动态世界的信息,部分场景可以通过意图进行决策,相对好解决
  • Incorrect or Incomplete:模型不知道,或者模型推理幻觉,如何知道模型可能不知道是更难解决的问题
  1. Calibration:通过后置处理,让模型先生成,再使用召回内容对模型回答进行修正校准和事实性检查
  2. 两种方案勾兑一下:高置信度判断模型可以自行完成直接回答,中置信度先生成再校验,低置信度直接走RAG检索生成,或者通过意图和场景进行决策

如何勾兑就不在这里说了,这里我们聊聊基础的前置判断和后置处理分别有哪些方案~

前置判断-Detection

检测模型回答存在幻觉可以通过检索外部知识进行校验,不过考虑生成式模型覆盖问题的广泛性,Self-Contradictory论文中评估chatgpt生成的回答中38.5%的内容无法通过Wiki等外部知识进行校验

因此这里我们先介绍一种完全基于模型自身,不依赖外部知识的幻觉判断方案自我矛盾。后介绍一种模型直接拒绝回答的方案,和RLHF里面的事实性原则类似,这里是基于SFT的模型自我拒绝方案,不过个人对拒识类的方案持一定的保留意见,但不妨碍学习新思路哈哈~~

自我矛盾

第一种发现模型幻觉的方案是基于模型多次回答的不一致性来判断模型是否在胡说八道。相似的概念在解密Prompt系列9. 模型复杂推理-思维链基础和进阶玩法里面聊Self-Consistency COT时就提到过,该论文是使用多路COT推理来投票出一个最合理的推理路径,从而提高思考的准确率。这里只不过改变了使用的形式,通过模型多次回答的不一致来判断模型是否出现了幻觉。有以下几种生成模型多次回答,并度量一致性的方案

单模型推理

  • SELFCHECKGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models
  • SELF-CONTRADICTORY HALLUCINATIONS OF LLMS: EVALUATION, DETECTION AND MITIGATION

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

对于如何度量模型随机生成的多个回答之间的不一致性,Self-Check尝试了包括Bert相似度计算在内的5种方法,其中效果最好的两种分别是传统NLI和基于大模型prompt的NLI,从推理性价比上传统NLI有优势,效果上LLM更好,以下是使用不同相似度计算方案来衡量模型多次随机解码的不一致性,并用该指标来计算模型回答是否符合事实性的AUC效果

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

传统NLI推理任务,是给定前提(premise)判断假设(hypothesis)是否成立或者矛盾。这里论文就是使用MNLI数据训练的Debarta-v3-Large来判断模型生成的回答r(hypothesis),是否和其他N个采样生成的回答(premise)相矛盾。论文分别尝试了句子级的判断和整个回答粒度的判断,句子级别的效果显著更好。

\[S_{NLI}(i) = \frac{1}{N}\sum_{n=1}^N P(contradict|r_i,S^n) \]

而基于大模型prompt,同样是NLI任务的思路,只不过改成了自然语言指令,以下context等同于以上的 \(S^n\), sentence就是 \(r_i\), 大模型推理返回的Yes/NO会被转化成0/1,并计算均值。

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

\[S_{prompt}(i) = \frac{1}{N}\sum_{n=1}^N x_i^n \,\, x \in {(0,1)} \]

SELF-Contradictory的思路很相似,方法更加复杂些,感兴趣的朋友自己去看论文吧~

多模型问答

  • DeepMind LM vs LM: Detecting Factual Errors via Cross Examination
  • Improving Factuality and Reasoning in Language Models through Multiagent Debate

同样是自我矛盾的思路,还可以通过多模型对话的方式来进行。LM VS LM采用了模型B多次反复提问模型A的方式来生成多个回答。类似的方式也用于问卷中问题的设计,出题人会用不同的方式把一个问题问好几遍,如果每次回答都不一样,说明做题人对类似问题的回答是不确定的。如下图

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

第一步模型A先生成回答(claim)。第二步模型B会针对cliam,从多个角度生成提问并让模型A再次进行回答。第三步模型B会基于A的原始回答,和对多个问题的回答来判断原始回答的正确性。以上B提问A回答的步骤,如果B判断需要进行补充提问的话,可能会重复多次。

这里涉及到的三个任务都是通过大模型指令来进行的,三个任务分别是:模型B基于A的cliam进行提问,模型B判断是否继续提问,模型B基于A的所有回答判断claim是否正确。对应的具体prompt如下

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

相比上面SELF-CHECK随机解码生成多个答案的方案,从多角度进行提问,个人感觉更有针对性,但两种方法都会有遗漏和误伤。推理成本上SELF-CHECK更低,LM vs LM更高。

自我拒绝

  • R-Tuning: Teaching Large Language Models to Refuse Unknown Questions

除了通过不一致性判断模型出现幻觉,另一种更干脆直接的方案,是让模型在碰到自己不确定的问题时,直接选择拒绝回答,和RLHF中的事实性原则的是一个思路。但我对这类方案最大的疑惑是拒识能力的泛化性。究竟模型是学到了对于自身parametric knowledge置信度较低,混淆度较高的问题进行拒绝回答,还是模型背下来了对某些知识和上文语义空间进行拒绝回答。这个我也还没想明白哈哈哈~

所以这里我们绕过这个问题,聊一种中间策略,毕竟西医好多疾病也没研究明白,但病还得治不是。R-Tunning提出指令微调可能放大了模型的回答幻觉。因为指令微调的数据集中所有问题都有答案,微调任务就是负责教会模型各种任务范式,以及在不同的任务中如何召回预训练中学习的知识并回答问题。但我们忽略了SFT中很多任务涉及到的知识在模型预训练中可能是没接触过的,但我们依旧选择让模型去进行回答。这种预训练和指令微调间的不一致性,可能会进一步放大模型幻觉。

R-Tunning给出的解决方案是在构建指令微调数据集时,加入模型是否对改答案表示肯定的描述,这样允许模型拒绝自己不确定的问题。分成2个步骤

  1. 找到模型不确定的问题,论文尝试了两种方案
  • R-Tuning:模型回答和标注答案不一致,适用于有标准答案的QA问题
  • R-Tuning-U:模型回答自我矛盾,这里论文计算模型回答包含的所有答案的熵值
  1. 构建允许模型拒绝的指令数据集,论文也尝试了以下两种prompt指令模板
  • R-Tuning:"Q:{Question},A:{Answer}.{Propmt}.",其中prompt是Are you sure you accurately answered the question based on your internal knowledge:对于上面模型确定的问题加上I am sure,不确定的问题加上I am not sure
  • R-Tuning-R: 对于确定给的问题使用"Q:{Question},A:{Answer}",对于不确定的问题用I am not sure 的各种相似表达来直接替换Answer

然后使用以上加入模型不确定性表达的数据集进行指令微调即可。在我们的使用场景中R-Tunning-R这种直接拒绝的方案更加合适,毕竟我倾向于指令微调的核心并不是知识注入,而是任务对齐,所以模型只要学习到对于自己不确定的问题选择拒绝回答即可。在论文验证的MMLU等数据集上这种拒绝微调方案有一定的领域外的泛化效果,不过这些数据集和我们的使用场景相差很大,具体效果要等测试后才知道了。

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

后处理:Calibration Method

和Detection相反,Calibration把重心放在模型回答的后处理上。也就是先不做判断直接使用模型生成回答,再调用工具对回答进行校验和修改。这里我们介绍谷歌和微软提出的几种方案。不同方案对于如何后处理,和调用哪些工具进行后处理存在差异,不过整体流程都和下图相似:模型生成 -> 召回相关知识 -> 对生成结果进行校验和修复

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

指令方案

  • RARR: Researching and Revising What Language Models Say, Using Language Models
  • CRITIC: LARGE LANGUAGE MODELS CAN SELFCORRECT WITH TOOL-INTERACTIVE CRITIQUING

基础方案是RARR提出的Research-then-revise框架,整个流程分为以下几个步骤

Generation Stage,先让LLM直接生成问题回答X

Research Stage,用于收集可以校验回答的事实性证据。针对X使用Few-shot-prompt, 生成用来校验X的多个搜索问题,每个问题分别进行谷歌搜索并召回Top5内容。这里论文没有使用搜索自带的snippet,而是对网页内容进行分块(每4个句子一块),并使用T5-Encoder计算每个chunk和query的相似度保留top-J个内容块。这里会得到一个(Q1,chunk1)(Q1,chunk2),(Q2,chunk1),.....的(问题,事实)列表

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

**Revise Stage,获取所有检索到的事实之后,进入校验阶段。**论文会遍历以上列表,针对每一个问题,分别先使用few-shot-cot判断每个事实和模型回答X之间是否是一致的(agreement model如下)。如果一致则遍历下一个,如果不一致则使用few-shot-prompt让大模型基于事实+问题对模型回答进行修改(revision model如下)。论文在修改回答时,会先定位原始回答X中哪个span和事实不符再进行修改,从而避免大幅修改原始回答

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

评估部分,后处理方案需要兼顾对模型原始回答的保留和事实性,这里RARR提出了两个指标:

  • Attribution Score计算归因得分,既给定所有事实,修改后回答Y中每个句子和所有事实的最大NLI打分的平均值,既整体回答能获得事实性支撑的平均概率
  • Preservation score计算保留率,由回答原始意图的保留概率 * 前后答案的未改变率(编辑距离度量)得到

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

RARR最大的问题在于效率,一部分是大模型的推理效率,一方面是最后的Revise部分采用了串行修改,这部分在后面的微调方案中会有改良

另一篇论文CRITIC提出的verify-then-correct和RARR非常相似,只不过在不同的任务上尝试使用了不同的外部工具进行校验。在开放问答上使用搜索,在代码问题就用代码解释器,并未涉及动态的工具选择,只是在不同数据集上固定选用不同的工具,这里就不展开说啦,感兴趣的盆友自己去看论文吧~

微调方案

  • PURR: Efficiently Editing Language Model Hallucinations by Denoising Language Model Corruptions
  • Check Your Facts and Try Again: Improving Large Language Models with External Knowledge and Automated Feedback
  • Fusion-in-decoder: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering

PURR针对RARR的效率问题进行了优化,使用的是大模型能力通过数据蒸馏到小模型的方案,也就是把上面最耗时的Revise部分使用T5-large模型来实现,query生成的部分也用T5-large来实现,并且把串行修改的方案优化为了所有事实进行一次性融合修改。

论文的核心就在于如何使用大模型来构建用于事实性修改的T5模型。论文使用了corrput的方案,也就是把正确的回答,人为进行破坏构造幻觉,再训练模型进行还原,具体包含以下几个步骤

  1. 生成正确的回答:整理了来自各个领域和话题的6000个种子问题,每个问题调用搜索引擎获取TopN网页,并进行chunking分段,使用和上面RARR相同的T5-Encoder计算每个段落和Q的相似度,阈值以上的为positive evidence(\(E^+\))这里限制最多4条,其余阈值以下的为negative evidence(\(E^-\))。然后使用zero-shot-prompt来让大模型基于\(E^+\)生成多文档总结,作为正确的回答Y。
  2. 对回答添加噪声:同样使用大模型基于2shot-cot-prompt,来对以上获得的正确答案进行破坏,指令要求大模型先生成修改方案,再对回答进行魔改。魔改包括但不限于魔改实体,魔改语义关系,魔改语法等等,这里论文使用了text-davinci-003,指令和效果如下图

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

  1. 训练T5:微调使用\(E^+\)的事实和添加噪声的回答作为输入,模型目标是把噪声回答修复成正确答案。这里如果\(E^+\)不足4条的会随机采样\(E^-\)这样可以提高模型对噪声事实的识别能力。值得说一下的是这里多个事实并非采用拼接的形式进行融合,而是使用Fusion-in-decoder的形式在encoder层编码后进行拼接,再进入Decoder。

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

效果上PURR对比RARR,对模型原始回答有更高的保有率(Pres),以及更高的平均归因率(Attr)。

解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

但整体上后处理相关的论文,和实际应用中模型回答的错误的五花八门相比,还是简化了太多。在实际应用中使用这类后处理的修复逻辑,感觉还有很多需要踩的坑。Anyway都是明年要解决的问题啦哈哈哈哈哈!新年快乐呀盆友们~

想看更全的大模型相关论文梳理·微调及预训练数据和框架·AIGC应用,移步Github >> DecryPrompt文章来源地址https://www.toymoban.com/news/detail-769973.html

到了这里,关于解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解密Prompt系列14. LLM Agent之搜索应用设计:WebGPT & WebGLM & WebCPM

    前两章,我们分别介绍了基于微调和prompt的工具调用方案,核心都是如何让大模型和工具进行交互,包括生成工具调用语句和处理工具调用请求。不过在实际应用中,想要设计一个可以落地的LLM Agent,需要更全面整体的系统设计。本章我们以搜索工具为例,介绍如何更好和搜

    2024年02月10日
    浏览(48)
  • 解密Prompt系列19. LLM Agent之数据分析领域的应用:Data-Copilot & InsightPilot

    在之前的 LLM Agent+DB 的章节我们已经谈论过如何使用大模型接入数据库并获取数据,这一章我们聊聊大模型代理在数据分析领域的应用。数据分析主要是指在获取数据之后的 数据清洗 , 数据处理 , 数据建模 , 数据洞察 和 数据可视化 的步骤。可以为经常和数据打交道,但

    2024年02月05日
    浏览(52)
  • Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架)

    大语言模型 (Large Language Models, LLMs) 在不同领域都表现出了优异的性能。然而,对于非AI专家来说,制定高质量的提示来引导 LLMs 是目前AI应用领域的一项重要挑战。现有的提示工程研究已经提出了一些零散的优化原则,也有些研究设计了基于经验的提示优化器。然而,这些研

    2024年03月11日
    浏览(114)
  • 解密prompt系列27. LLM对齐经验之如何降低通用能力损失

    前面我们已经聊过众多指令微调的方案,这一章我们重点讨论下如何注入某一类任务或能力的同时,尽可能不损失模型原有的通用指令理解能力。因为在下游或垂直领域应用中,我们设计的推理任务风格或形式,往往很难通过prompt来稳定实现。这种情况下就会依赖微调来注入

    2024年04月13日
    浏览(37)
  • 解密Prompt系列16. LLM对齐经验之数据越少越好?LTD & LIMA & AlpaGasus

    LLM Agent中间插个队,总结下指令微调、对齐数据相关的方案,已经凑够7篇论文可以召唤神龙啦!论文都是以优化指令样本为核心,Data-Centric的观点比较一致: 指令微调也就是对齐阶段的数据质量数量,少量+多样+高质量的对齐数据,就能让你快速拥有效果杠杠的模型 。注意

    2024年02月08日
    浏览(47)
  • 解密Prompt系列17. LLM对齐方案再升级 WizardLM & BackTranslation & SELF-ALIGN

    话接上文的指令微调的样本优化方案,上一章是通过多样性筛选和质量过滤,对样本量进行缩减,主打经济实惠。这一章是通过扩写,改写,以及回译等半监督样本挖掘方案对种子样本进行扩充,提高种子指令样本的多样性和复杂度,这里我们分别介绍Microsoft,Meta和IBM提出的

    2024年02月08日
    浏览(39)
  • 解密Prompt系列8. 无需训练让LLM支持超长输入:知识库 & unlimiformer & PCW & NBCE

    这一章我们聊聊有哪些方案可以不用微调直接让大模型支持超长文本输入,注意这里主要针对无限输入场景。之前在BERT系列中我们就介绍过稀疏注意力和片段递归的一些长文本建模方案长文本建模 BigBird Longformer Reformer Performer,不过以上方案无一例外都需要在训练阶段引入。

    2024年02月08日
    浏览(41)
  • 解密Prompt系列10. 思维链COT原理探究

    前一章思维链基础和进阶玩法我们介绍了如何写Chain-of-thought Prompt来激活生成逐步推理,并提高模型解决复杂问题的能力,这一章我们追本溯源,讨论下COT的哪些元素是提升模型表现的核心? 要进行因果分析,需要把思维链中的不同元素拆解开来,然后通过控制变量实验,来

    2024年02月11日
    浏览(45)
  • 【LLM系列之指令微调】长话短说大模型指令微调的“Prompt”

    1 指令微调数据集形式“花样”太多 大家有没有分析过 prompt对模型训练或者推理的影响?之前推理的时候,发现不加训练的时候prompt,直接输入模型性能会变差的,这个倒是可以理解。假如不加prompt直接训练,是不是测试的时候不加prompt也可以?还有一个就是多轮prompt和单轮

    2024年02月14日
    浏览(47)
  • 解密prompt系列26. 人类思考vs模型思考:抽象和发散思维

    在Chain of Thought出来后,出现过许多的优化方案例如Tree of thought, Graph of Thought, Algorithm of Thought等等,不过这些优化的出发点都更加\\\"Machine Like\\\",而非\\\"Human Like\\\", 哈哈不是说机器化不好,仅仅是对AGI的一些个人偏好而已。 所以如果我们从人类思考的角度出发,能否把当前模型的思

    2024年03月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包