尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

解密Prompt系列37. RAG之前置决策何时联网的多种策略

解密Prompt系列37. RAG之前置决策何时联网的多种策略 前言之前我们分别讨论过RAG中的召回多样性召回信息质量和密度还有calibration的后处理型RAG。前置判断模型回答是否要走RAG的部分我们之前只提及了自我矛盾和自我拒绝者两个方案。这一章我们再补充几种RAG前置判断方案。每种方案我们会挑1篇论文并主要关注论文中检索决策相关的部分方案包括微调模型来决策基于模型回答置信度判断基于问题KNN判断以及使用小模型代理回答等方案。各类方案分类汇总在本文末尾~模型微调SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTIONWhen to Retrieve: Teaching LLMs to Utilize Information Retrieval EffectivelySELF-RAG是基于微调来动态判断下一个文本段是否需要进行RAG的方案。论文定义了如下4种和RAG相关的反思特殊字符这里我们核心关注的就是【Retrieve】字符负责决策下一句推理前是否要进行检索增强的。既然是微调方案那就核心说一下有【Retrieve】标签和检索内容的训练样本是如何构造的样本格式如下为了得到上面Interleave的样本 其实可以直接使用GPT4进行标注只不过论文考虑GPT4的推理成本太高因此基于GPT4标注的4K样本微调了Llama2-7B的模型然后使用7B的Critic模型标注了更大量级的20K样本用于训练Generator。我们来看下Interleave样本的标注流程以及【Retrieve】标签标注的相关Prompt基于原始数据输入输出对输出部分进行以下操作Critic先基于Input判断是否需要检索如果预测【RetrieveNO】则只判断Output【IsUse】GPT4的标注prompt如下如果Critic判断Input需要检索则输出【RetrieveYES】并插入到Ouput的句首再基于Input和Output进行内容检索得到检索内容后对Ouput进行分句每句话都基于输入前一句推理和最初的检索内容来联合判断本句话是否需要补充信息检索如果需要则在句首插入【RetrieveYES】否则插入【RetrieveNO】GPT4的标注prompt如下如果【RetrieveYES】则使用输入和前一句推理进行补充信息检索并对每一个检索到的内容分别预测【IsSUP】和【IsREL】保留分数最高的【IsRELRelevant】和【IsSUPFully Supported/Partially Supported】的检索内容并把该检索到内容作为段落插入到【Retrieve】后面最后在句尾判断推理内容的【IsUSE】基于以上标注样本直接训练Generator需要先把特殊字符扩充进模型词表然后在训练过程中计算损失函数时MASK掉检索内容。这样模型可以在推理过程中直接解码生成以上四种特殊字符并基于字符决定是否检索是否使用检索内容等等。模型回答置信度FLARE: Active Retrieval Augmented Generation这里的FLARE的全称是Forward-Looking Active REtrieval augmentation也就是在模型每推理完一句话让模型判断下一句话是否需要使用RAG如果需要则生成检索query搜索内容并基于前面已经推理出的内容用户提问和新检索到的内容进行继续推理。这里不细说这个动态按句子粒度进行RAG的框架而是关注每一步要如何判断是否使用RAG。论文尝试了两种方案Instruct和ToolFormer相似每推理完一句prompt指令会让模型生成新的Seach(query)命令。论文发现这种基于promptfew-shot指令的RAG决策方案效果并不好。Confidence每一句都让模型先直接进行推理然后基于模型推理的置信度来判断是否需要进行检索然后基于检索内容来对句子进行重新推理生成。这里推理置信度使用模型推理句子中每个token的生成概率是否都超过阈值如果都超过阈值则保留模型推理生成的句子否则去做检索生成。如果基于置信度判断模型对答案不确定需要进行检索的话。论文给出了两个生成搜索query的方案mask sentence直接把上面模型推理生成的句子中概率小于阈值的token删掉然后使用剩余的token作为query进行检索。对低阈值token进行掩码是为了避免错误回答影响检索质量。例如用户提问哪些国家发生过严重经济危机模型回答了“法国发生过经济危机”其中法国的概率低于阈值这时如果不删掉法国则检索重心会从经济危机而像法国偏离导致检索不到有效内容。但对于整体概率都很低的句子掩码方案可能导致最后没有有效token去进行检索。generate question除了掩码论文还提供了query生成方案把句子中概率小于阈值的每个span都通过大模型指令来生成检索query如下图论文对比了基于下一句推理置信度进行动态RAG的方案FLARE基于固定长度的历史token进行召回基于固定历史单句话进行召回FLARE的效果都要更好主要体现在两个部分使用历史句子不如使用模型下一句推理的句子更能反映模型意图动态RAG相比固定进行召回能更有效的利用内部和外部知识小模型代理回答Small Models, Big Insights: Leveraging Slim Proxy Models to Decide When and What to Retrieve for LLMs百川论文中采用了让小模型这里是Llama2-7B对用户提问进行回答(Heurisitic Answer)然后使用Judgement Model对问题和模型回答进行综合判断最终输出是否需要进行检索的标签。如果需要检索再走RAG流程让Llama-70B进行最终的问题回答。其中Judgement模型的输入如下那核心其实就在Judgement模型的训练数据构建这里论文在已有QA数据集上构建了样本数据集构成如下。这里论文只使用了真实答案较短的样本通过计算答案和小模型回答之间的匹配率来给样本打标匹配率高回答质量高为正否则为负然后使用该样本集来微调Judgement模型这里也是llama2-7B。论文并没有给出对Judgement模型更多的分析例如哪些回答会被判定为模型知道哪些回答会被判定为不知道。个人其实是有些困惑只基于模型回答学出来的JudgeMent Model究竟学到了哪些特征。但是使用更小的模型作为Proxy模型进行预推理的思路可以借鉴虽然可能存在大模型和小模型知识空间不同的问题但主观感受是小模型的知识空间更大可能是大模型的子集所以问题不会太大。问题最近邻判别SKR-KNN: Self-Knowledge Guided Retrieval Augmentation for Large Language Models论文尝试了多种判断模型是否知道该问题答案的方案包括直接问模型“你知道不”带上few-shot再问“你知道不”以及小模型二分类但是最后验证比较靠谱的还是基于问题的最近邻进行判别的KNN方案。哈哈放在最后压轴因为这是我个人偏好的方案的一部分具体实施包括两个步骤第一步构建KNN样本集论文使用了TabularQA和CommonsenseQA数据集每个问题分别让模型自己回答以及使用向量检索召回Wiki后保留Topk上文让模型基于上文进行回答。然后通过对比两个回答和真实答案的Exact Match的区别来判断对于该问题模型到底知道还是不知道这一步称之为收集SELF-KNOWLEDGE。这里QA问题其实是对真实场景的简化真实世界的问题多是开放问答没有正确唯一的答案这个时候要收集训练集判断模型究竟是基于内化知识回答更好还是加上RAG检索增强回答效果更好我想到的是可以借助RM或者一些JudgeLM的效果打分来实现。第二步就是基于样本集对新问题进行判别论文简单使用了SimCES等向量对新问题和样本集内的问题进行编码每个问题都检索醉相思的K个问题然后基于这K个问题的标签【知道 vs 不知道】来决定新问题要不要走RAG检索。论文只评估了KNN的效果会优于Bert分类大模型prompt等等但其实除了效果个人看好这个方案的原因是**KNN可以实时扩展可以持续基于线上问题的回答效果补充正负样本集进行增量更新。**不过KNN的一个问题在于部分问题的相关性无法通过通用的语义相似度来识别例如问题的复杂程度和通用语义是无关的这个我们下一章会提到。这里也顺便提一嘴论文还尝试了让大模型自己回答它是否知道该问题的这个方案论文尝试了以下几种prompt。毕竟个人认为是否走RAG的判断并非是单一策略而是多个策略组合基于大模型Prompt的方案也是其中之一可能不会像论文这样直接使用这样的推理成本太高但可以和用户的提问进行合并使用。这样能回答直接回答不能回答或者以上其他策略判断模型不知道再走RAG。总结最后让我们把两章提及RAG前置检索决策的方案做下简单的分类基于输入无监督分类基于历史问题使用KNN最近邻判有监督分类微调模型去判断什么时候需要检索Verbose基于指令让模型自己回答该问题否需要检索RLHF: 通过对齐让模型自我判断并拒绝基于输入和输出输出可以是完整回答也可以是下一句推理Verbose: 让模型先回答再用指令让模型基于问题和回答一起判断是否需要检索Contradicotry: 基于单模型多模型回答的矛盾来判断模型是否可能不知道Confidence 基于模型回答的熵值更多细节优化Decompose对原始提问进行角度拆分和分别判断也可以分句进行动态检索Proxy基于输入和输出的判断可以使用小模型作为代理模型来优化推理速度最后的最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表