ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

解密Prompt系列14. LLM Agent之搜索应用设计:WebGPT  WebGLM  WebCPM 前言前两章我们分别介绍了基于微调和prompt的工具调用方案核心都是如何让大模型和工具进行交互包括生成工具调用语句和处理工具调用请求。不过在实际应用中想要设计一个可以落地的LLM Agent需要更全面整体的系统设计。本章我们以搜索工具为例介绍如何更好和搜索引擎进行交互的LLM Agent。搜索Agent方案为啥需要整体方案直接调用搜索接口取Top1返回不成嘛要是果真如此SimpleNaiveNew Bing岂不是很容易复刻-.-我们先来看个例子前一阵火爆全网的常温超导技术如果想回答LK99哪些板块会涨你会得到以下搜索答案从以上的搜索结果不难发现Top1答案并不能回答问题在和搜索引擎交互中几个可能的问题有Query用户的query不适配搜索引擎导致搜索不到有效内容或者问题需要通过类似Self Ask的思维链拆解通过多轮搜索来解决Ranking细看langchain的搜索Wrapper会发现它默认只使用搜索的Top1返回但是除了传统百科问题这类问题因为做过优化Top1往往是最优答案。但其他场景例如当前问题第三个内容显然更合适。当前传统搜索引擎并非为大模型使用设计因此需要后接一些优化排序模块例如REPLUG论文Snippet: Bing的网页标题下面会默认展示150字左右根据query定位的正文摘要内容也是langchain等框架使用的网页结果。但是不难发现snippet太短或者定位不准会导致snippet缺乏有效信息为了解决上述提到的3个主要问题我们会基于WebGPTWebGLMWebCPM的3篇论文详述如何更有效的和搜索引擎进行交互来解决长文本开放问答LFQA问题。和搜索引擎的交互主要分成以下4个模块Search生成搜索请求query或基于结果进行query改写请求搜索API。类似self-Ask里面的Thought只不过selfask强调问题拆解而这里的search还有query改写追问等功能Retrieve从搜索返回的大段内容中定位可以回答query的支撑性事实进行抽取式摘要、生成式摘要。类似React里面的LookUp行为只不过更加复杂不是简单的定位文字。Synthesis: 对多个内容进行组装输入模型进行推理得到答案Action: 针对需要和搜索引擎进行自动化多轮交互的场景需要预测下一步的行为是继续搜索抽取摘要还是停止搜索组装内容进行推理等等对应LLM Agent中的规划模块。其实就是丰富了React/SelfAsk里面的Action加入了更多和搜索引擎交互的行为例如继续浏览翻页等等虽然论文的发布顺序是webcpmwebglmwebgpt但考虑webcpm开源了很全面的中文数据哈哈手动点赞我会以webcpm作为基准详细介绍再分别介绍webglm和webgpt的异同点。webcpmpaperWEBCPM: Interactive Web Search for Chinese Long-form Question Answeringgithub:https://github.com/thunlp/WebCPMWebCPM其实是这三篇论文中最新的一篇所以集成了webgpt和webglm的一些方案。构建了通过和搜索引擎进行多轮交互来完成长文本开放问答(LFQA)的整体方案。它使用的搜索API是Bing。23名标注人员通过和搜索进行多轮交互来获取回答问题所需的支撑性事实。webCPM的问题来自Reddit上的英文QA转成中文。之所以使用Reddit而非知乎百度知道是因为后两者的答案往往经过很好的处理直接搜索一轮就能获得很好的答案降低了多轮搜索的交互难度。人工标注的搜索数据微调10B的CPM模型并在LFQA任务拿到了不错的效果。WebCPM的整体框架就是上面提到的4个模块下面我们来分别介绍。强烈建议和源码结合起来看论文本身写的略简单哈哈给读者留下了充分的想象空间。Action行为规划首先是行为规划也就是让模型学习人和搜索引擎交互生成的行为链路。webcpm针对交互式搜索问题定义了包括搜索页面加载页面下滑等以下10个行为。不过个人感觉如果只从解决长文本问答出发以下行为中的Scrollload page等操作其实可能可以被优化掉因为内容的遍历可以通过引入排序模块和以上的摘要模块来筛选相关和不相关的内容并不一定要通过Action来实现。这样可能可以进一步简化Action空间提升效果。针对行为序列的建模被抽象为文本分类问题。把当前状态转化为文本表述预测下一步Action是以上10分类中的哪一个。当前状态的描述包括以下内容最初的问题question当前的搜索querytitle历史Action序列拼接last_few_actions消融实验中证明历史Action序列是最重要的哈哈所以可能可以简化成个HMM历史全部摘要内容拼接quotes上一步的搜索界面past_view, 上一步页面中展示所有内容的标题和摘要拼接的文本当前搜索界面text, 当前页面中展示所有内容的标题和摘要拼接的文本剩余Action步骤actions_left以下为指令样本的构建代码就是把以上的状态拼接作为input把下一步Action作为Outputdefmake_input(self,info_dict,typeaction):context_idsdefconvert_nothing(info):return无iflen(info)0elseinfo context_ids问题\ninfo_dict[question]\ncontext_ids摘要\nconvert_nothing(info_dict[quotes])\nlast_few_actionsforpast_actionininfo_dict[past_actions]:ifpast_action![]:last_few_actionspast_action context_ids当前搜索\nconvert_nothing(info_dict[title])\ncontext_ids上回界面\nconvert_nothing(info_dict[past_view])\ncontext_ids当前界面\nconvert_nothing(info_dict[text])\ncontext_ids剩余操作步数str(info_dict[actions_left])\niftypeaction:context_ids可选操作foridx,kinenumerate(self.action2idx):context_idsself.action2idx[k]ifidx!len(self.action2idx)-1:context_idscontext_ids\ncontext_ids历史操作convert_nothing(last_few_actions)\niftypeaction:context_ids下一步操作eliftypequery:context_ids请生成新的合适的查询语句eliftypeabstract:context_ids请对当前界面内容摘取和问题相关的内容next_actioninfo_dict[next_action]returncontext_ids,next_action具体分类模型的微调就没啥好说的了。不过这里需要提一下源码中其实给出了两种webcpm的实现方案。两种方案均开源了数据。Interactive方案对应当前的行为建模每一步执行什么行为会由Action模型预测得到同时以下query改写摘要等模块也会获得之前所有执行步骤已有的上文输出进行条件文本生成任务pipeline方案整体行为链路固定依次是query改写 - 所有改写query搜索得到Top-K内容 - 针对每个页面进行摘要抽取 - 整合所有内容回答问题。 因此Pipeline方案并不需要Action模型同时以下的摘要改写等模块也会简化为不依赖上文的文本生成任务这么说有些抽象让我们用Query改写来看下以上两种方案的差异假设用户提问网页布局都有哪种一般都用什么布局Interactive第一个改写query网页布局种类, 然后搜索摘要获得网页布局总结性的概述后第二个query在已有摘要内容的基础上改写query网页布局最佳实践, 这样综合两个query的内容就可以回答上述问题pipeline在最初就调用query改写模型生成一堆改写query例如网页布局种类网页布局技巧网页布局模式网页布局优势。然后全部去调用搜索引擎再对所有返回结果进行整合。虽然看上去Interactive似乎能得到更优解但其实只对明显串行的搜索任务有边际增益整体没有pipeline模式更加简洁优雅。因为pipeline模型的无条件生成使得每一步都可以并发处理更容易落地。并且每个模块可以独立优化可以相互解耦。因此以下三个模块的介绍我们都以pipeline方案来进行介绍Searchquery改写query改写模型是一个seq2seq的文本生成模型。其实和Self-Ask通过自我提问来对问题进行拆解的本质相似。改写核心是为了解决两个问题Decompose用户的问题由多个并联、串联的内容组合而成因此需要对问题进行拆解得到子query。例如Self-Ask那一章的例子提问涨幅最高的板块成交量如何需要拆解成涨幅最高的板块XX板块成交量Rephrase用户的问题本身不适配搜索引擎需要改写成更加简洁关键词更明确的搜素query。例如微软的new bing上线了使用体验如何“可以改写为new bing使用体验”以下为webcpm微调得到的query生成模型的效果webcpm提供了这部分训练数据包括一个query和改写得到的多个queryRetriever摘要抽取Retriever负责从网页正文中抽取和Query相关的内容也就是一个阅读理解/抽取式摘要问题。这样就不需要依赖搜索API直接提供的snippet摘要可以针对你的场景来设计抽取的长度以及是整段抽取还是抽取多个段落组合。为了降低推理延时webcpm通过decoder实现了类似span抽取的方案解码器只解码应当抽取的段落的第一个字和最后一个字。例如Query 麦田怪圈是什么Content 麦田怪圈Crop Circle是指在麦田或其它田地上通过某种未知力量大多数怪圈是人类所为把农作物压平而产生出来的几何图案。这个神秘现象有时被人们称之为“Crop Formation”。麦田怪圈的出现给了对支持外星人存在论的人们多种看法。假设应该抽取段落中的第一句话Fact麦田怪圈Crop Circle是指在麦田或其它田地上通过某种未知力量大多数怪圈是人类所为把农作物压平而产生出来的几何图案则模型的解码器输出的结果是起始字符麦-结束字符案如果首尾两字能匹配到多端文本则取最长能匹配到的文本段落。刨了刨代码发现pipeline和interactive在摘要部分的样本构建方式不同只有以下互动式的样本构建中采用了以上类span抽取的方案abstract起始字符self.tokenizer.decode(decoded_abstract[:num_start_end_tokens])-结束字符self.tokenizer.decode(decoded_abstract[-num_start_end_tokens:])Synthesis信息聚合Synthesis负责整合以上searchRetriever得到的多个Fact拼接作为上文通过人工标注的答案来让模型学习如何基于多段事实生成一致流畅基于上文内容的长回答。为了解决模型本身在自动检索过程中会收集到无关信息而[1]中提到无关的上文输入会影响推理结果的问题。Webcpm在构建基于多段上文的QA问答指令集时在人工收集的每个query对应的多个摘要fact的基础上会从其他样本中随机采样同等量级的无关上文和原始的事实进行shuffle之后拼接作为输入来进行Querycontent - Answer的模型微调。让模型学会区分相关事实和无关事实并在推理时不去关注无关的信息输入。同时论文对比了加入无关Fact和只使用相关Fact微调后的模型效果差异如下。只使用相关内容的Baseline模型的偏好率18%显著低于加入随机无关内容微调后的43.7%。因此加入无关上文训练确实可以提升模型对噪声上文的判别能力。WebGPTpaper: WebGPTBrowser-assisted question-answering with human feedbackDemo: https://openaipublic.blob.core.windows.net/webgpt-answer-viewer/index.htmlwebgpt的论文发表最早但论文本身写的比较高山仰止可能先读完webcpm再来读webgpt会更容易理解些只看收集交互式搜索数据使用的界面就会发现二者非常相似。webgpt的问题以ELI5为主混合了少量TriviaQAAI2手写问题等其他问题。搜索引擎也是使用了Bing API。和webcpm相同为了避免直接找到答案简化搜索流程webgpt过滤了Redditquora等类知乎的站点信息提高任务难度。多数细节和webcpm比较类似最大的不同是webgpt除了使用指令微调还加入了强化学习/拒绝采样的偏好打分方案。数据收集webgpt的数据收集分成两部分Demonstrations:和webcpm的全流程搜索数据类似从键入query搜索摘要到问题回答收集人类的交互数据这里不再细说Comparison: 同一个query模型生成的两个回答的偏好数据用于训练偏好模型。webgpt开源了这部分的数据以下我们细说下Comparison的数据集构建。为了降低偏好标注的噪音和人类偏好主观性的影响webgpt只使用引用源来判断模型回答的优劣具体标注步骤如下Flags剔除不合理争议性问题Trustworthiness先对模型引用的数据源进行标注分为TrustworthyNetural, Suspicious三挡区分不同网页的权威性和真实性Annotations选定模型回答的每一个观点高亮根据该观点是否有引用支持以及支持该观点的引用在以上的权威性分类中属于哪一档来综合评价每个观点。也分为三挡strong support, weak support, no support。同时需要标注每个观点对于回答最终提问的重要性有core,side,irrelevant三挡。Ratings分别对模型采样生成的AB两个答案标注完以上3步之后才到对比打分的环节。webgpt给出了很详细的如何综合每个观点的重要性和是否有支撑对AB答案进行觉得打分再对比两个打分得到相对打分此处有无数人工智能中智能的人工…详见论文中的标注文档链接~训练对应上面的数据收集webgpt的训练过程和InstructGPT基本是一致的。先使用Demonstration数据进行指令微调论文称之为Behaviour Cloning顾名思义模仿人类的搜索过程(BC)。再基于BC模型使用Comparison对比数据训练偏好模型(RM)。最后基于偏好模型使用PPO算法微调BC模型得到强化微调后的模型(RL)。训练细节可以直接参考InstructGPT。在解密Prompt7. 偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析中我们讨论过强化学习的本质之一其实就是拒绝采样论文也对比了使用BC/RL模型为基座加入拒绝采样随机采样4/16/64个模型回答从中选取偏好模型打分最高的回答作为结果的方案。论文中效果最好的方案是BCBest of 64拒绝采样。RL模型相比BC略有提升但提升幅度没有拒绝采样来的高。评估方案论文把webgpt生成的结果和Eli5数据集的原始结果Reddit上的高赞答案以及Demonstration中人工标注的答案进行偏好对比让标注同学选择更偏好的答案。效果上175B的微调模型在64个回答中采样RM打分最高的答案效果上是可以显著超越人工回答的。WebGLMpaper: WebGLM: Towards An Efficient Web-Enhanced Question Answering System with Human Preferencesgithub https://github.com/THUDM/WebGLMwebglm介于二者中间是用google search api, 英文数据做的项目。整个项目数据集构建过程自动化程度更高人工标注依赖更少性价比更高一些。这里主要介绍数据集构建上的一些差异架构和前两者差不多。Retriever和webcpm使用抽取的方案来定位网页内容中和qurery相关的部分不同webglm采取了先对网页进行分段然后每个段落和query计算相似度通过相似度来筛选相关内容的方案。作者选取了基于对比学习的Contriever预训练模型不过评估准确率只有不到70%。因此这里使用大模型的阅读理解能力来补充构建了query*reference样本对。论文使用GPT-3 1-shot 。也就是给一个相关段落抽取的case让大模型来从众多段落中筛选和query相关的。并对模型构建的样本集过滤query-reference相关度较低大概率是模型发挥的低质量样本。然后基于大模型构造的样本使用query和reference embedding的内积作为相似度打分微调目标是拟合相似度打分的MSE Loss。synthesissysnthesis也就是基于引用内容大模型进行QA问答的部分webglm使用davinci-003来进行样本生成, 这里主要包含四个步骤大模型生成指令这里作者使用了APE的方案不熟悉的同学看这里# APESELF自动化指令集构建代码实现。输入是QuestionRefernce输出是Answer, 问大模型什么样的指令可以更好描述这类LFQA任务。大模型给出的指令是Read the Refernces Provided and answer the corresponding questionfew-shot构造样本基于生成的instruction人工编写几个few-shot样本给大模型更多的queryReference让davinci-003来构建推理样本引用校准论文发现模型生成结果存在引用内容正确但是引用序号错误的情况这里作者用Rouge-1进行相似度判断校准引用的Reference。样本过滤再强的大模型也是模型davinci-003造的样本质量参差不齐部分模型会自己发挥。因此加入了质量过滤模块主要过滤引用占比较低引用太少以及以上引用需要错误率较高的。通过以上的生成过滤最终从模型生成的83K样本过滤得到45K质量更高的LFQA样本用于推理部分的模型微调RM模型webglm没有像webgpt一样使用人工标注对比偏好数据而是使用线上QA论坛的点赞数据作为偏好数据高赞的是正样本。并通过过滤掉回答较少的问题对长文本进行截断以及使用点赞数差异较大的回答构建对比样本对等数据预处理逻辑得到质量相对较高偏好差异较大长度相对无偏的偏好样本。整体量级是93K个问题249K个样本对。其实现在大模型的样本构建往往有两种方案一个是高质量小样本另一个就是中低质量大样本前者直接告诉模型如何做后者是在质量参差不齐的样本中不断求同存异中让模型抽取共性特征。webglm是后者而webgpt是前者。其次RL的初始模型对标以上webgpt的BC模型。在之前RL的博客中我们有提到过初始模型需要是有能力生成人类偏好答案的对齐后的模型。这里webglm直接使用Reddit的摘要数据通过指令微调得到也没有使用人工标注数据考虑摘要任务也属于阅读理解的子任务。最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。四、AI大模型商业化落地方案五、面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
返回列表