解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

这篇具有很好参考价值的文章主要介绍了解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一章我们介绍了基于Prompt范式的工具调用方案,这一章介绍基于模型微调,支持任意多工具组合调用,复杂调用的方案。多工具调用核心需要解决3个问题,在哪个位置进行工具调用(where), 从众多工具中选择哪一个(Which), 工具的输入是什么(What)。Where + Which + What,我称之为3W原则,3H它兄弟哈哈哈哈~

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

其实如何教大模型使用工具,和教人类使用工具没啥区别。就像上周末我想给我妈买的可以防弹,超重的岩板餐桌按个滑轮需要使用电钻,那我学习使用电钻的途径无非有三种

  1. 基于历史经验:我之前都是手动的没用过电动的,我凭借自信直接上手结果拧歪了......对应到LLM其实就是本章要提到的工具微调,我们让模型先学习在在不同的场景使用什么工具,如何使用,再利用大模型的迁移泛化能力泛化到更多的场景。
  2. 从工具说明书中学习:我去翻了翻说明书,奈何写的太抽象没看懂......对应到LLM简单版的就是上一章的zero-shot prompt方案,告诉大模型工具的使用场景和用法;升级版就是之后会提到的优化方案,我们可以动态召回工具的完整说明书和使用范例作为上文输入模型
  3. 通过观察他人使用工具来学习:最终我打开小红书看短视频学习了下,一点就通,于是我拥有了可丝滑移动的防弹餐桌!对应到LLM简单版就是上一章介绍的few-shot prompt方案,我们让LLM看到在其他场景它是如何使用工具的;升级版就是之后会提到的动态few-shot prompt的方案。

下面我们看下通过微调为模型注入工具使用经验的两个方案:Toolformer和Gorilla

Toolformer

  • TALM: Tool Augmented Language Models
  • Toolformer: Language Models Can Teach Themselves to Use Tools
  • 填充式工具使用 + InContext制造自监督样本

Toolformer是工具调用领域的前辈,使用LM监督微调得到可以进行Inline工具调用的模型。解码时,模型会在恰当的位置生成API调用的请求,并中止解码,去调用API得到返回值,把返回值拼接到"->"字符之后,再继续模型解码,如下

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

Toolformer的创新主要在API调用的样本构造,因此我们先来看下样本构造的部分

样本

Toolformer单一API的样本构造主要包含以下3个步骤

  • Sampling API

以QA API为例,作者会先编写几个样本作为In-Context,得到以下的FewShot指令样本

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

然后针对新的长度为N的输入文本,作者会计算每个位置得到<API>前缀的条件解码概率,并保留超过阈值的TopK个最优可能出现<API>的位置。然后每个位置,基于上文,让模型随机解码m次生成m个候选的API调用请求。这样我们就得到了候选样本集,每一段文本,最多有K个可能进行工具调用的位置,且每个位置有至多m个候选请求{c1,...cm}。

  • Executing API Calls

执行以上得到的候选请求,每个请求得到一个对应的返回值{r1,....rm}。 可以是计算器的结果,维基百科的搜索返回等等

  • Filtering API Calls

最后是过滤筛选,原理是好的工具调用样本,应该会让工具调用位置后面的文本解码概率提高,Perplexity降低。因此作者计算了在工具调用位置之后,所有token的加权条件解码概率。

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

以上加权的权重计算如下,离工具调用位置越远权重越小

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

条件解码概率的条件Z,分别是[工具调用+返回值],[工具调用+无返回值],[无工具调用],这三者中Loss较小的一个,过滤方案是[工具调用+工具返回值]的Loss降幅超过阈值,则保留该样本

整体量级上,1个API生成了25K左右的样本用于微调,样本长度1024

微调

使用以上样本生成方案得到多API调用的样本集混合后得到增强训练样本。样本的构建方式是在原始文本中直接插入API调用的语句\(x_{1:i-1},e(c_i,r_i),x_{i:n}\),如下

The Nile has an approximate length of QA(What is the approximate length of the Nile?)->6,853 km 6,853 kilometers, the White Nile being its main source

这样通过微调,模型会学习到在什么位置使用什么样的工具,以及工具的请求输入。同时和解码的格式保持一致,后文会依赖API调用结果进行解码。微调使用了GPT-J模型,Batch=128, lr=1e-5,warmup=10%,训练了2K step,常规的LM Loss.

总结

Toolformer的创新主要在使用模型的Few-shot理解能力,使用少量的人工标注样本制造大量的自监督样本。这样Tooformer理论上可以支持任意的API工具。但Toolformer有一些局限性

  1. 工具独立:论文中每个API调用的样本是独立构造的,工具之间没有交互,且同一工具的多次调用之间也是独立,不依赖上文的调用返回。
  2. 常规解码:没有引入思维链推理,限制了最终效果

Gorilla

  • HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace
  • TaskMatrix.AI: Completing Tasks by Connecting Foundation Models with Millions of APIs
  • Gorilla:Large Language Model Connected with Massive APIs
  • https://github.com/ShishirPatil/gorilla

Gorilla在HuggingGPT,TaskMatrix.AI这两个API调用的前辈的基础上,加入了指令微调来提升API调用效果。Gorilla支持TorchHub,TensorflowHub,Huggingface总共1645个API,且可以泛化到新的API上。

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

样本

Gorilla使用Self-Instruct来构建指令样本,用的是GPT4模型。构建方案是以上3个API Hub, 每个Hub各人工编写6个指令样本。每一轮随机从6个样本中采样3个作为Few-Shot,并通过指令让GPT4随机生成10个真实世界的使用case,总共生成16450个指令样本,生成的指令样本如下

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

同时Gorilla加入了Retriever-Aware,也就是在以上的指令样本中,指令后面会拼接上API的使用说明:"Use this API documentation for reference: <retrieved_API_doc_JSON>"

这样在推理阶段,会先根据用户的指令召回最相关、最新的API使用说明。降低模型幻觉的同时,使得模型有更好的泛化性,可以适应全新的API接口,或者已有API接口的参数变化。

微调&推理

微调的部分比较常规就是在LLama-7B模型上,使用以下参数在8*A100(40G)进行指令微调。

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

在推理阶段会同样加入API Retriever根据用户的指令召回最相关的API使用说明,和用户输入拼接,喂进模型推理。召回方案作者尝试了BM25和GPT的Embedding,不过不同召回方案的效果和API本身相关,没有谁一定更好这一说。

效果上微调后7B的LLama模型使用GPT Embedding召回工具说明,在工具调用上的准确率可以显著超越GPT3.5使用Prompt方案的调用效果

解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla

总结

对比上一章基于Prompt的方案Self Ask,ReAct和这一章基于微调的方案Toolformer,Gorilla,指令微调的方案有以下优势

  1. planning效果更好:微调方案比Prompt方案在复杂问题规划上效果更好,尤其适合本身In-Context能力有限的小模型
  2. 工具调用准确率更高:针对复杂工具调用的准确率更高
  3. 不受模型迭代影响:GPT3.5->GPT4的升级,让不少基于Prompt指令的应用们需要集体进行prompt调整,因为模型指令变了.......以及不同模型之间的指令或有不同。但微调方案不受这一点影响,因为指令微调本身就是对齐的过程,因此更robust

缺点自然是没有开箱即用的Prompt方案灵活,所以不妨用prompt方案来进行前期测试,后期用微调来提升效果。

但其实不论是prompt方案还是微调方案,其实都是LLM Agent应用中的工具调用规划这一个子模块,要真正搭建可以落地的大模型应用,需要更系统的整体设计,这块我们放在下一章说~

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

到了这里,关于解密Prompt系列13. LLM Agent-指令微调方案: Toolformer & Gorilla的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 解密Prompt系列20. LLM Agent之再谈RAG的召回多样性优化

    几个月前我们就聊过RAG的经典方案解密Prompt系列14. LLM Agent之搜索应用设计。前几天刚看完openAI在DevDay闭门会议上介绍的RAG相关的经验,有些新的感悟,借此机会再梳理下RAG相关的优化方案。推荐直接看原视频(外网)A Survey of Techniques for Maximizing LLM Performance RAG最关键的一环其

    2024年02月05日
    浏览(39)
  • 解密Prompt系列22. LLM Agent之RAG的反思:放弃了压缩还是智能么?

    已经唠了三章的RAG,是时候回头反思一下,当前的RAG是解决幻觉的终点么?我给不出直接的答案,不过感觉当前把RAG当作传统搜索框架在大模型时代下的改良,这个思路的天花板高度有限~ 反思来源于对RAG下模型回答的直观感受,最初我们被ChatGPT的能力所震惊,并不是它能背

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

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

    2024年02月05日
    浏览(39)
  • 解密Prompt系列6. lora指令微调扣细节-请冷静,1个小时真不够~

    上一章介绍了如何基于APE+SELF自动化构建指令微调样本。这一章咱就把微调跑起来,主要介绍以Lora为首的低参数微调原理,环境配置,微调代码,以及大模型训练中显存和耗时优化的相关技术细节 标题这样写是因为上周突然收到了一周内上线一版chatbo的命令,原因无它领导们

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

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

    2024年02月08日
    浏览(28)
  • [NLP]LLM---大模型指令微调中的“Prompt”

    大家有没有分析过 prompt对模型训练或者推理的影响?之前推理的时候,发现不加训练的时候prompt,直接输入模型性能会变差的,这个倒是可以理解。假如不加prompt直接训练,是不是测试的时候不加prompt也可以?还有一个就是多轮prompt和单轮prompt怎么构造的问题?好多模型训练

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

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

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

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

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

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

    2024年02月08日
    浏览(32)
  • 解密prompt系列5. APE+SELF=自动化指令集构建代码实现

    上一章我们介绍了不同的指令微调方案, 这一章我们介绍如何降低指令数据集的人工标注成本!这样每个人都可以构建自己的专属指令集, 哈哈当然我也在造数据集进行时~ 介绍两种方案SELF Instruct和Automatic Prompt Engineer,前者是基于多样的种子指令,利用大模型的上下文和指令

    2023年04月10日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包