解读Toolformer
【引子】读论文Toolformer: Language Models Can Teach Themselves to Use Tools,https://arxiv.org/pdf/2302.04761.pdf,再阅读了几篇关于Toolformer的网络热文,于是“无知者无畏”,开始自不量力地试图解读Toolformer。
大语言模型(LLM)在利用有限的文本数据解决新任务方面表现出令人难以置信的优势。然而,尽管如此,它们在其他方面也有局限性,例如:
无法访问最新信息
幻想事实的倾向
低资源语言的困难
缺乏精确计算的数学技能
对时间进程的不了解
如何使用大模型解决更多的问题呢?在《解读TaskMatrix.AI》一文中,TaskMatrix.AI是 Toolformer 和 chatGPT 的结合,将基础模型与数百万个 API 连接起来以完成任务。那么,什么是 Toolformer 呢?
Toolformer 是 Meta 开源的新模型,能够解决需要利用 API 的问题,如计算器、维基百科搜索、字典查找等。Toolformer 能够认识到它必须使用一个工具,能够确定使用哪个工具,以及如何使用该工具。Toolformers 的用例可能是无穷无尽的,从提供任何问题的即时搜索结果,到情景信息,比如城里最好的餐馆。
1. 什么是Toolformer?
什么是 Toolformer 呢?简而言之,Toolformer 是一个可以自学使用工具的语言模型。
Toolformer 基于一个预先训练的 GPT-J 模型,包含 67 亿个参数,使用自监督学习方法进行训练。这种方法包括采样和过滤 API 调用,以增加现有的文本数据集。
Toolformer 希望通过以下两个要求来完成 LLM 自学如何使用工具的任务:
工具的使用应该通过自我监督的方式来学习,而不需要大量的人工注释。
LM 不应丧失其一般性,应该能够自行决定何时以及如何使用哪种工具。
下图显示了 Toolformer 的预测(例如,在数据样本中嵌入的 API 调用):
2. Toolformer 的架构和实现方法
ChatGPT 中的一个核心特性是基于上下文的学习(In-Context Learning),指的是一种机器学习方法,其中模型从特定上下文或环境中呈现的示例中学习。上下文学习的目标是提高模型理解和生成适合给定上下文或情况的语言的能力。在自然语言处理(NLP)任务中,可以训练语言模型来生成对特定提示或问题的响应。那么,Toolformer 如何利用 In-Context Learning 呢?
Toolformer 是一个大型语言模型,它能够通过 API 调用使用不同的工具。每个 API 调用的输入和输出需要格式化为文本/对话序列,以便在会话中自然流动。
从上面的图片中可以看到的,Toolformer 首先利用模型的上下文学习能力来对大量潜在的 API 调用进行采样。
执行这些 API 调用,并检查获得的响应是否有助于将来预测 token,并被用作筛选条件。经过过滤之后,对不同工具的 API 调用被嵌入到原始数据样本中,从而产生增强的数据集,而模型就是在这个数据集上进行微调的。
具体地,上图显示了使用问答工具完成此任务的模型:
LM 数据集包含示例文本: 为“Pittsburgh is also known as”输入提示“Pittsburgh is also known as The Steel City”。
为了找到正确的答案,模型需要进行一个 API 调用并正确地进行调用。
对一些 API 调用进行了抽样,特别是“ What other name is Pittsburgh known by?”和“ Which country is Pittsburgh in?”。
相应的答案是“Steel City”和“United States”。因为第一个答案更好,所以它被包含到一个新的 LM 数据集中,并带有 API 调用: “Pittsburgh is also known as [QA(”What other name is Pittsburgh known by?”) -> Steel City] the Steel City”。
这包含预期的 API 调用和应答。重复此步骤以使用各种工具(即 API 调用)生成新的 LM 数据集。
因此,LM 使用嵌入在文本中的 API 调用来注释大量数据,然后使用这些 API 调用对 LM 进行微调,以进行有用的 API 调用。这就是自监督训练的方式,这种方法的好处包括:
更少需要人工注释。
将 API 调用嵌入到文本中允许 LM 使用多个外部工具来添加更多内容。
Toolformer 然后学会预测每个任务将使用哪个工具。
2.1 API 调用的采样
下图显示了给定用户输入的情况下,Toolformer使用和来表示API调用的开始和结束。为每个API编写一个提示符,鼓励Toolformer使用相关的API调用对示例进行注释。
Toolformer为每个token分配一个概率,作为给定序列的一个可能的延续。该方法通过计算ToolFormer分配给在序列中每个位置启动API调用的概率,对API调用的最多k个候选位置进行采样。保持概率大于给定阈值的位置,对于每个位置,通过使用以API调用为前缀、以序列结束标记为后缀的序列从Toolformer采样,最多可获得m个API调用。
2.2 API调用的执行
API调用的执行完全取决于正在执行调用的客户端。客户端可以是不同类型的应用程序,从另一个神经网络、Python脚本,到在大型语料库中搜索的检索系统。需要注意的是,当客户端发出调用时,API会返回一个单一的文本序列响应。此响应包含有关调用的详细信息,包括调用的成功或失败状态、执行时间等。
因此,为了获得准确的结果,客户端应该确保提供正确的输入参数。如果输入参数不正确,API可能会返回错误的结果,这对于用户来说可能是不可接受的。另外,客户端还应该确保与API的连接是稳定的,以避免在调用期间发生连接中断或其他网络问题。
2.3 过滤API调用
在过滤过程中,Toolformer通过API调用后的token计算Toolformer的加权交叉熵损失。
然后,比较两种不同的损失计算:
(i)一种是API调用,其结果作为输入给Toolformer
(ii)一种是没有API调用或者API调用但没有返回结果。
如果为API调用提供输入和输出,使得Toolformer更容易预测未来的token,那么API调用就被认为是有用的。应用过滤阈值仅保留两个损失之间的差值大于或等于阈值的API调用。
2.4 模型微调
最后,Toolformer将剩余的API调用与原始输入合并,并创建一个新的API调用来增强的数据集。换句话说,增强的数据集包含与原始数据集相同的文本,只插入了API调用。
然后,使用新的数据集使用标准语言建模目标对ToolFormer进行微调。这样可以确保在增强的数据集上微调模型会暴露给与在原始数据集上微调相同的内容。通过在准确的位置插入API调用,并使用帮助模型预测未来token的输入,对增强数据的微调使语言模型能够了解何时以及如何根据自己的反馈使用API调用。
2.5 推理
在推理过程中,当语言模型产生“→”token时,解码过程被中断,这表明 API 调用的下一个预期响应。然后,调用适当的 API 来获取响应,并在插入响应和token之后继续解码。
此时,我们需要确保获取的响应与上一个token所期望的响应相匹配。如果不匹配,我们需要调整 API 调用以获得正确的响应。在继续解码之前,我们还需要执行一些数据处理来准备下一步的推理过程。这些数据处理包括对响应的分析、对上下文的理解以及对推理路径的选择。因此,在推理过程中,不仅需要调用 API 来获取响应,还需要进行一系列的数据处理和分析,以确保推理过程的正确性和连贯性。
2.6 API工具
Toolformer 中每个可以使用的API工具都要满足以下两个条件:
输入/输出都需要表示为文本序列。
有可用的演示表达如何使用这些工具。
Toolformer 的初始实现中支持了五个API工具:
问答回答:这是另一个LM,可以回答简单的事实问题。
计算器:目前只支持4个基本的算术运算,并四舍五入到小数点后两位。
Wiki搜索:返回从维基百科剪切下来的短文本的搜索引擎。
机器翻译系统:一个可以将任何语言的短语翻译成英语的LM。
日历:对日历的API调用,该调用返回当前日期而不接受任何输入。
下图显示了使用的所有API的输入和输出示例:
3. 应用示例
Toolformer在LAMA、数学数据集、问题解答和时间数据集等任务中的性能优于基线模型和GPT-3,但在多语言问答中表现不如其他模型。Toolformer使用API调用来完成任务,例如LAMA API、Calculator API和Wikipedia搜索工具API。
3.1 LAMA
任务是完成一个缺少事实的陈述语句。Toolformer 的性能优于基线模型,甚至更大的模型,如 GPT-3。下表展示了通过 LAMA API 调用获得的结果:
3.2 数学数据集
任务是评估 Toolformer 的数学推理能力来对比各种基线模型。Toolformer 的性能优于其他模型,可能是因为它对 API 调用示例进行了微调。允许模型进行 API 调用可以显著提高所有任务的性能,并优于 OPT 和 GPT-3等更大的模型。在几乎所有情况下,模型都决定向计算器工具寻求帮助。
下表展示了通过 Calculator API 调用获得的结果:
3.3 问题解答
任务是回答问题,Toolformer 的性能优于同样大小的基线模型,但是优于 GPT-3(175B)。Toolformer 利用 Wikipedia 的搜索工具来完成这项任务中的大多数示例。下表展示了通过 Wikipedia 搜索工具 API 调用获得的结果:
3.4 多语言问答
问答数据集被用于多语言问答基准测试 MLQA,其中包含英语上下文段落和阿拉伯语、德语、西班牙语、印地语、越南语或简体中文的问题。Toolformer 在这里并不是最强大的表现者,这可能是由于 CCNet 在所有语言上都缺乏调优。
下表展示了通过 Wikipedia 搜索工具 API 调用获得的结果:
3.5 时间数据集
任务是了解当前日期对于回答问题至关重要的位置。Toolformer 能够超越基线,但是,显然它没有100% 地利用日历工具。相反,它使用的是维基百科的搜索。下表展示了通过 Wikipedia 搜索工具 API 调用获得的结果:
4. ToolFormer 的局限
Toolformer 仍然存在一些局限性,例如无法同时使用多个工具、无法处理返回结果过多的工具、对输入措辞敏感导致效率低下、未考虑使用成本可能导致高计算成本等问题。具体如下:
由于每个工具的 API 调用都是独立生成的,因此 Toolformer 无法在一个流程中使用多个工具。
特别是对于可能返回数百个不同结果的工具(如搜索引擎),Toolformer 不能以交互方式使用。
使用 Toolformer 进行训练的模型对输入的确切措辞非常敏感,这种方法对于某些工具来说效率很低,需要大量的文档以生成少量有用的 API 调用。
在决定使用每个工具时,没有考虑使用它的成本,这可能会导致较高的计算成本。
5. 小结
Toolformer 是一个大型语言模型,通过使用 In-Context Learning 来提高模型理解和生成适合给定上下文或情况的语言能力。它使用 API 调用来注释大量数据,然后使用这些 API 调用对模型进行微调,以进行有用的 API 调用。Toolformer 学会预测每个任务将使用哪个工具。然而,Toolformer 仍然存在一些局限性,如无法在一个流程中使用多个工具,对于可能返回数百个不同结果的工具不能以交互方式使用等。
【参考资料与关联阅读】
Toolformer: Language Models Can Teach Themselves to Use Tools,https://arxiv.org/pdf/2302.04761.pdf
Meta's Toolformer Uses APIs to Outperform GPT-3 on Zero-Shot NLP Tasks,https://www.infoq.com/news/2023/04/meta-toolformer/
Toolformer: Language Models Can Teach Themselves to Use Tools (2023),https://kikaben.com/toolformer-2023/
Breaking Down Toolformer,https://www.shaped.ai/blog/breaking-down-toolformer
Toolformer: Meta Re-enters the ChatGPT Race With a New Model Using Wikipedia,https://thechainsaw.com/business/meta-toolformer-ai/
Toolformer language model uses external tools on its own,https://the-decoder.com/toolformer-language-model-uses-external-tools-on-its-own/
一文读懂“语言模型”
解读TaskMatrix.AI
知识图谱的5G追溯
图计算的学习与思考
AI系统中的偏差与偏见
面向AI 的数据生态系统
机器学习与微分方程的浅析
神经网络中常见的激活函数
老码农眼中的大模型(LLM)
《深入浅出Embedding》随笔
机器学习系统架构的10个要素
清单管理?面向机器学习中的数据集
DuerOS 应用实战示例——机器狗DIY
《基于混合方法的自然语言处理》译者序
相关文章:
解读Toolformer
【引子】读论文Toolformer: Language Models Can Teach Themselves to Use Tools,https://arxiv.org/pdf/2302.04761.pdf,再阅读了几篇关于Toolformer的网络热文,于是“无知者无畏”,开始自不量力地试图解读Toolformer。 大语言模…...
FCOS3D Fully Convolutional One-Stage Monocular 3D Object Detection 论文学习
论文地址:Fully Convolutional One-Stage Monocular 3D Object Detection Github地址:Fully Convolutional One-Stage Monocular 3D Object Detection 1. 解决了什么问题? 单目 3D 目标检测由于成本很低,对于自动驾驶任务非常重…...
Xpath学习笔记
Xpath原理:先将HTML文档转为XML文档,再用xpath查找HTML节点或元素 什么是xml? 1、xml指可扩展标记语言 2、xml是一种标记原因,类似于html 3、xml的设计宗旨是传输数据,而非显示数据 4、xml标签需要我们自己自定义 5、x…...
网络编程之 Socket 套接字(使用数据报套接字和流套接字分别实现一个小程序(附源码))
文章目录 1. 什么是网络编程2. 网络编程中的基本概念1)发送端和接收端2)请求和响应3)客户端和服务端4)常见的客户端服务端模型 3. Socket 套接字1)Socket 的分类2)Java 数据报套接字通信模型3)J…...
What Are Docker Image Layers?
Docker images consist of multiple layers that collectively provide the content you see in your containers. But what actually is a layer, and how does it differ from a complete image? In this article you’ll learn how to distinguish these two concepts and…...
范数详解-torch.linalg.norm计算实例
文章目录 二范数F范数核范数无穷范数L1范数L2范数 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 范数是一种数学概念,可以将向量或矩阵映射到非负实数上,通常被…...
postgresdb备份脚本
以下是一个简单的postgresdb备份脚本示例: 复制 #!/bin/bash # 设置备份目录和文件名 BACKUP_DIR/path/to/backup BACKUP_FILEdb_backup_$(date %F_%H-%M-%S).sql # 设置数据库连接参数 DB_HOSTlocalhost DB_PORT5432 DB_NAMEmydatabase DB_USERmyusername DB_PA…...
MATLAB程序员投简历的技巧解析,如何写出有亮点的简历
如果你想在简历中展示你的项目经验,一定要有亮点。一个导出的 Excel 文件过大导致浏览器卡顿的例子就是一个很好的亮点。你可以在简历中写明这个例子。如果面试官问起,可以用浏览器的原理来解释。浏览器内核可以简单地分为以下 5 个线程:GUI …...
颜色空间转换RGB-YCbCr
颜色空间 颜色空间(Color Space)是描述颜色的一种方式,它是一个由数学模型表示的三维空间,通常用于将数字表示的颜色转换成可见的颜色。颜色空间的不同取决于所选的坐标轴和原点,以及用于表示颜色的色彩模型。在计算机…...
年薪40万程序员辞职炒股,把一年工资亏光了,得了抑郁症,太惨了
年薪40万的程序员辞职全职炒股 把一年的工资亏光了 得了抑郁症 刚才在网上看了一篇文章 是一位北京的一位在互联网 大厂上班的程序员 在去年就是股市行情比较好的时候 他买了30多万股票 结果连续三个月都赚钱 然后呢 他是就把每天就996这种工作就辞掉了 然后在家全是炒股 感觉炒…...
10分钟如何轻松掌握JMeter使用方法?
目录 引言 安装jmeter HTTP信息头管理器 JMeter断言 HTTP请求默认值来代替所有的域名与端口 JSON提取器来替换变量 结语 引言 想要了解网站或应用程序的性能极限,JMeter是一个不可或缺的工具。但是,对于初学者来说,该如何上手使用JMe…...
[NLP]如何训练自己的大型语言模型
简介 大型语言模型,如OpenAI的GPT-4或Google的PaLM,已经席卷了人工智能领域。然而,大多数公司目前没有能力训练这些模型,并且完全依赖于只有少数几家大型科技公司提供技术支持。 在Replit,我们投入了大量资源来建立从…...
LeetCode1047. 删除字符串中的所有相邻重复项
1047. 删除字符串中的所有相邻重复项 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一…...
3。数据结构(3)
嵌入式软件开发第三部分,各类常用的数据结构及扩展,良好的数据结构选择是保证程序稳定运行的关键,(1)部分包括数组,链表,栈,队列。(2)部分包括树,…...
QT停靠窗口QDockWidget类
QT停靠窗口QDockWidget类 QDockWidget类简介函数和方法讲解 QDockWidget类简介 QDockWidget 类提供了一个部件,它可以停靠在 QMainWindow 内或作为桌面上的顶级窗口浮动。 QDockWidget 提供了停靠窗口部件的概念,也称为工具面板或实用程序窗口。 停靠窗…...
【LeetCode】139. 单词拆分
139. 单词拆分(中等) 思路 首先将大问题分解成小问题: 前 i 个字符的子串,能否分解成单词;剩余子串,是否为单个单词; 动态规划的四个步骤: 确定 dp 数组以及下标的含义 dp[i] 表示 s…...
【三维重建】NeRF原理+代码讲解
文章目录 一、技术原理1.概览2.基于神经辐射场(Neural Radiance Field)的体素渲染算法3.体素渲染算法4.位置信息编码(Positional encoding)5.多层级体素采样 二、代码讲解1.数据读入2.创建nerf1.计算焦距focal与其他设置2.get_emb…...
IntelliJ IDEA 社区版2021.3配置SpringBoot项目详细教程及错误解决方法
目录 一、SpringBoot的定义 二、Spring Boot 优点 三、创建一个springboot的项目 四、使用IDEA创建SpringBoot失败案例 一、SpringBoot的定义 Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。 Spring Boot 翻…...
Qt中QDebug的使用
QDebug类为调试信息(debugging information)提供输出流。它的声明在<QDebug>中,实现在Core模块中。将调试或跟踪信息(debugging or tracing information)写出到device, file, string or console时都会使用QDebug。 此类的成员函数参考:https://doc…...
vue使用路由的query配置项时如何清除地址栏的参数
写vue项目时,如果想通过路由的query配置项把参数从一个组件传到另一个组件,但是又不希望?idxxx显示在地址栏(如:http://localhost:8080/test?idxxx的?idxxx),该怎么做: 举一个案例࿱…...
Redis-列表(List)
Redis列表(List) 介绍 单键多值Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)它的底层实际是个双向链表,对两端的操作性能很高,通过索…...
ripro主题修改教程-首页搜索框美化教程
先看效果图: 我们来看怎么实现: 1、找到wp-content/themes/ripro/assets/css/diy.css并将下面的内容整体复制进去并保存 /*首页搜索框*/ .bgcolor-fff {background-color: #fff; } .row,.navbar .menu-item-mega>.sub-menu{margin-left:-10px;margin-right:-10px;} .home…...
写作业用白光还是暖光?盘点色温4000K的护眼台灯
台灯的白光或者暖光指的是台灯的色温,低色温的光线看起来发黄发红,高色温的光线发白发蓝。 如果灯光的光源是高品质光源,本身没有蓝光问题,那么色温的选择对护眼的影响是比较少的,更多的是对人学习工作状态,…...
Java时间类(一)-- SimpleDateFormat类
目录 1. SimpleDateFormat的构造方法: 时间模式字母: 2. SimpleDateFormat的常用方法: “工欲善其事,必先利其器”。学习时间类之前,需要先学习SimpleDateFormat类。 java.text.SimpleDateFormat类是以与语言环境有关的方式来格式...
07 Kubernetes 网络与服务管理
课件 Kubernetes Service是一个抽象层,用于定义一组Pod的访问方式和访问策略,其作用是将一组Pod封装成一个服务,提供一个稳定的虚拟IP地址和端口号,以便于其他应用程序或服务进行访问。 以下是Kubernetes Service YAML配置文件的…...
并发编程之Atomic原子操作类
基本类型:AtomicInteger、AtomicBoolean、AtomicLong 引用类型:AtomicReference、AtomicMarkableReference、AtomicStampedReference 数组类型:AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray 对象属性原子修改器:…...
管家婆辉煌Ⅱ 13.32版安装方法
因管家婆辉煌版已经长期不更新,现已经出现蓝屏的问题,故此新开此贴,慢慢更新安装方法。 首先管家婆下载地址:http://www.grasp.com.cn/download.aspx?id116 先安装sql server 2008 下载后,运行安装,请注…...
常见的接口优化技巧思路
一、背景 针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 二、接口优化方案总结 1.批处理 批量思想:批量操作数据…...
【Java EE】-使用Fiddler抓包以及HTTP的报文格式
作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 在满园弥漫的沉静的光芒之前,一个人更容易看到时间,并看到自己的身影。——史铁生《我与地坛》 主要内容:使用FIddler抓包的…...
Java异步编程
Java异步编程 1、什么是java异步编程2、异步编程有什么作用3、异步编程常用于哪些业务4、异步编程的方式5、Async异步调用Async简介 1、什么是java异步编程 Java异步编程是一种处理并发问题的技术,它可以在执行耗时操作的同时,不阻塞主线程,…...
做临床研究在哪个网站注册/网络营销成功案例ppt免费
大家应该都被这个问题给困扰过,打开电脑,电脑上全部都是广告弹窗,或者在办公、追剧的时候,电脑突然就弹出了一条烦人的广告,今天就教大家4个方法,永久关闭这些广告弹窗。方法一1、按下组合键【winr】打开运…...
wordpress是指什么系统/广告公司经营范围
数据库运行客户端发送的sql查询语句,并将最后的查询结果反馈给客户端。一、基本的查询语句SELECT <列名1>,<列名2>,... ... FROM <表名>; -- 字段顺序=列名顺序 -- *:代表所有列 --为列设定别名 as SELECT 姓名 AS s_name,…...
wordpress 博客 知名/网络营销策划书ppt
1.import 项目,sdk目录:sdk\samples\android-21\legacy\ApiDemos,import时一直下一步就ok了。2.Error:Error: The file name must end with .xml,重命名添加.xml3.Run app,这时可能碰到3个问题:此问题需要导入supportv…...
wordpress图片pin按钮/赵阳竞价培训
网络安全的定义: 网络安全(Cyber Security)是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,[网络服务](https://baike.bai…...
做外销网站/长沙排名优化公司
要在 Android 中构建一个应用程序,使其能自动将文件发送给微信上的联系人,您需要使用微信的开放平台 API。您可以使用微信的 SDK 来实现这一目的。首先需要注册一个开发者账号, 然后在开发者后台申请权限和获取 API 密钥。接下来可以使用 SDK 提供的 API…...
电子商务网站建设的规划/网站推广宣传语
1. 为什么将 View 从别处粘贴进另一个View后无法添加约束? 在 Size 面板中将 Layout 属性改为 Inferred(Constraints)。此外,当一个 view 下面没有 Constraints 时,无法将别的 view 拖进这个 view。你可以从 Library 中随便拖一个控件到这个…...