论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools
论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools
- 1. 文章简介
- 2. 文章概括
- 3 文章重点技术
- 3.1 Toolformer
- 3.2 APIs
- 4. 文章亮点
- 5. 原文传送门
1. 文章简介
- 标题:Toolformer: Language Models Can Teach Themselves to Use Tools
- 作者:Timo Schick, Jane Dwivedi-Yu, Roberto Dessì, Roberta Raileanu, Maria Lomeli, Luke Zettlemoyer, Nicola Cancedda, Thomas Scialom
- 日期:2023
- 期刊:arxiv preprint
2. 文章概括
文章给出了一种可以自动调用API的LLM方法“Toolformer”,该工具可以自行决定是否调用API,何时调用API以及调用什么API,从而达到通过API检索增强增加LLM回答的可靠性。
3 文章重点技术
3.1 Toolformer
给定语言模型 M M M,给定一系列可供调用的API接口 c = ( a c , i c ) c=(a_c, i_c) c=(ac,ic),其中 a c a_c ac为API的名称, i c i_c ic为API的输入,API会返回结果 r r r,记 e ( c , r ) = < A P I > a c ( i c ) → r < / A P I > ) e(c, r) = <API> a_c(i_c) \to r</API>) e(c,r)=<API>ac(ic)→r</API>),其中 < A P I > , < / A P I > , → <API>, </API>, \to <API>,</API>,→表示特殊token,用于区分API的输入和输出。给定数据集 C = { x 1 , … , x ∣ C ∣ } \mathcal{C} = \{x^1, \dots, x^{|\mathcal{C}|}\} C={x1,…,x∣C∣},其中 x i x^i xi表示输入的文本。则Toolformer按照如下的步骤进行训练、推理:
- Sampling API Calls:首先,对每个API接口,我们设计一个对应的prompt“ P ( x ) P(x) P(x)"让模型自动改写原始输入为调用API的输入。如下图所示,对一个原始输入文本 x x x,对任意位置 i ∈ { 1 , … , n } i\in\{1, \dots, n\} i∈{1,…,n},我们基于 x 1 , … , x i − 1 , P ( x ) x_1, \dots, x_{i-1}, P(x) x1,…,xi−1,P(x)预测下一个token是 < A P I > <API> <API>的概率 p i = p M ( < A P I > ∣ P ( x ) , x 1 : i − 1 ) p_i = p_M (<API>|P(x) , x_{1:i-1}) pi=pM(<API>∣P(x),x1:i−1),如果条件概率值高于给定阈值 τ s \tau_s τs,则认为模型应该在该位置调用API,如果存在高于 k k k个位置的概率值大于 τ s \tau_s τs,则只保留top k k k个位置。最终得到需要调用API的位置集合 I = { i ∣ p i > τ s } I=\{i|p_i > \tau_s\} I={i∣pi>τs}(不超过k个)。接下来,对每个 i ∈ I i\in I i∈I,我们基于 [ P ( x ) , x 1 , … , x i − 1 , < A P I > ] [P(x), x_1, \dots, x_{i-1}, <API>] [P(x),x1,…,xi−1,<API>]调用API接口得到接下来的预测结果。

- Executing API Calls: 接下来执行上述语言模型自动生成的API调用文本 c i c_i ci,得到对应的结果 r i r_i ri。
- Filtering API Calls:令 L i ( z ) = − ∑ j = i n w j − i log p M ( x j ∣ z , x 1 : j − 1 ) L i + = L i ( e ( c i , r i ) ) L i − = min ( L i ( ϵ ) , L i ( e ( c i , ϵ ) ) ) L_i(z) = -\sum_{j=i}^n w_{j-i} \log p_M(x_j | z, x_{1:j-1})\\L_i^+ = L_i(e(c_i, r_i))\\L_i^- = \min (L_i(\epsilon), L_i(e(c_i, \epsilon))) Li(z)=−j=i∑nwj−ilogpM(xj∣z,x1:j−1)Li+=Li(e(ci,ri))Li−=min(Li(ϵ),Li(e(ci,ϵ))),其中 ϵ \epsilon ϵ表示空序列。上述 L i + L_i^+ Li+实际表示给定 x 1 , … , x j − 1 x_1, \dots, x_{j-1} x1,…,xj−1和API返回结果 r i r_i ri,模型预测得到 x j x_j xj的加权概率的负数, L i − L_i^- Li−表示不进行API访问,或者只进行API访问但是不返回结果的情况下,模型得到 x j x_j xj的最小损失。如果 L i + L_i^+ Li+比 L i − L_i^- Li−小很多,则可以认为访问API确实带来了收益。从而我们可以通过设置阈值 τ f \tau_f τf,当 L i − − L i + ≥ τ f L_i^- - L_i^+ \ge \tau_f Li−−Li+≥τf时,认为模型应该在 i i i位置访问API。
- Model Finetuning:给定文本 x x x和位置 i i i处的API访问结果 ( c i , r i ) (c_i, r_i) (ci,ri),我们可重写输入文本为 x 1 : i − 1 , e ( c i , r i ) , x i : n x_{1:i-1}, e(c_i, r_i), x_{i:n} x1:i−1,e(ci,ri),xi:n,最后基于数据集 C \mathcal{C} C生成SFT数据集 C ∗ \mathcal{C}^* C∗。在 C ∗ \mathcal{C}^* C∗上对模型进行微调,得到我们的toolformer工具。
- Inference:推理阶段,我们进行正常的解码,直至模型生成 → \to →特殊token,此时我们将 < A P I > , → <API>, \to <API>,→之间的文本输入待调用的API,得到结果 r r r,然后我们将该结果拼接到模型的解码结果中,并插入 < / A P I > </API> </API>特殊token进行标记,然后继续解码直至结束。

3.2 APIs
我们选择了多种API对语言模型进行加强:
- 针对问答类型的文本,文章采用问答大模型Atlas作为API进行加强
- 针对数学计算,文章采用一个简单的python工具作为API进行加强
- 针对维基百科搜索,文章采用BM25作为API进行加强
- 针对多语言,文章采用fast-text进行语言检测,然后通过NLLB作为API统一翻译成英文进行加强
- 针对日期类问题,文章直接返回系统当前日期作为API进行加强
4. 文章亮点
文章提出了Toolformer工具,可通过对数据集进行采样、过滤生成SFT数据集,从而对LM进行微调,得到一个通过访问不同API来对LM能力进行加强对工具。实验表明,文章提出的Toolformer在多个API相关的下游任务上有明显提升,且ppl结果表示模型在自然语言生成任务上的能力并没有降级。
5. 原文传送门
Toolformer: Language Models Can Teach Themselves to Use Tools
相关文章:
论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools
论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools 1. 文章简介2. 文章概括3 文章重点技术3.1 Toolformer3.2 APIs 4. 文章亮点5. 原文传送门 1. 文章简介 标题:Toolformer: Language Models Can Teach Themselves to Use Tools作者&#…...
stm32实现0.96oled图片显示,菜单功能
stm32实现0.96oled图片显示,菜单功能 功能展示简介代码介绍oled.coled.holedfont.h(字库文件)main函数 代码思路讲解 本期内容,我们将学习0.96寸oled的进阶使用,展示图片,实现菜单切换等功能,关…...
sqlite外键约束 保证数据一致性
1. 外键约束 在SQLite中,可以通过使用外键(Foreign Key)约束和CASCADE选项来实现通过外键删除相关信息。 CASCADE选项是指在主键表中删除记录时,相应的外键表中的相关记录也将被自动删除。 -- 创建主键表 CREATE TABLE Persons…...
Vue轻松入门,附带学习笔记和相关案例
目录 案例 一Vue基础 什么是Vue? 补充:mvvm框架 mvvm的组成 详解 Vue的使用方法 1.直接下载并引入 2.通过 CDN 使用 Vue 3.通过npm安装 4.使用Vue CLI创建项目 二插值表达式 什么是插值表达式? 插值表达式的缺点 解决方法 …...
【青蛙跳台阶问题 —— (三种算法)】
青蛙跳台阶问题 —— (三种算法) 一.题目介绍1.1.题目1.2.图示 二.解题思路三.题解及其相关算法3.1.递归分治法3.2.动态规划算法(Dynamic Programming)3.3.斐波那契数列法 四.注意细节 一.题目介绍 1.1.题目 一只青蛙一次可以跳上1级台阶&am…...
联想yoga AMD处理器 转接头无法电量外接显示器
第一次买AMD的处理器,当时就是为了yogaAMD这款的接口要比英特尔的接口多,没想到AMD处理器真的问题多。经常蓝屏不说,偶尔还点不亮外接显示器。遇到这种问题,不是什么驱动问题,可能你按照网上各种方法打开设备管理器→显…...
OSG粒子系统与阴影 - 阴影shadow(7)
OSG阴影 在虚拟现实仿真中,为了真实地模拟自然效果,阴影效果是不可缺少的,它对一个场景的真实性是非常重要的。在游戏或仿真中,一个高效的阴影往往能够提供非常强悍的视觉真实感。 osgShadow库 在OSG中专门定义了一个名字空间osg…...
vue3项目中使用富文本编辑器
前言 适配 Vue3 的富文本插件不多,我看了很多插件官网,也有很多写的非常棒的,有UI非常优雅让人耳目一新的,也有功能非常全面的。 如: Quill,简单易用,功能全面。editorjs,UI极其优…...
Java EE 进程线程
JavaEE 进程&线程 文章目录 JavaEE 进程&线程1. 进程1.1 概念1.2 进程管理1.3 PCB (Process Control Block) 2. 线程2.1 概念2.1 线程与进程的区别2.3 创建线程 1. 进程 1.1 概念 什么是进程? 进程是操作系统对一个正在执行的程序的一种抽象 我们可以打开…...
GPT写SQL的模版
表:profit_loss_sum_m_snapshot 计算字段:成本cost_whole求和,收入income_whole求和,收入求和-成本求和,成本目标cost_target求和,收入求和-成本目标求和 条件:日期statis_date在2023-11-01&…...
蓝桥杯官网练习题(平均)
问题描述 有一个长度为 n 的数组( n 是 10 的倍数),每个数 ai 都是区间 [0,9] 中的整数。小明发现数组里每种数出现的次数不太平均,而更改第 i 个数的代价为 bi,他想更改若干个数的值使得这 10 种数出现的次数相等…...
【无标题】动手学深度学习_现代神经网络_未完
这里写目录标题 深度学习之前的网络 AlexNetAlexNet得到了竞赛冠军AlexNet架构Alex net更多细节数据增强 VGGNiN知识补充flop暂退法 drop_out 深度学习之前的网络 1、核方法 机器学习 SVM现在还是很广泛的使用,因为对调参的需求不那么大,对调参不太敏感…...
Java王者荣耀
GameFrame 图片 package 王者荣耀;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;import javax.soun…...
【理解ARM架构】操作寄存器实现UART | 段的概念 | IDE背后的命令
🐱作者:一只大喵咪1201 🐱专栏:《理解ARM架构》 🔥格言:你只管努力,剩下的交给时间! 目录 🍠操作寄存器实现UART🍟UART原理🍟编程 🍠…...
python 左值查找 右值查找
左值查找 在一组数据中查找出 数字x 在这组数据中第一次出现的索引并输出,没有找到则输出-1查找方式:二分查找 数据前提:一组数据要有序一组数据: arr [2, 3, 3, 3, 5, 7, 9, 11, 13, 15, 17]测试: 示例1ÿ…...
机器学习之自监督学习(四)MoCo系列翻译与总结(二)
MoCo中相关工作的对比分析 去噪自动编码器(Denoising Autoencoder)是一种用于学习数据表示的神经网络模型。它的主要目标是通过去除输入数据中的噪声,学习到输入数据的有用表示,从而提高模型对干净数据的鲁棒性。下面是对去噪自动…...
元宇宙企业3d数字展厅轻松低本搭建更全面、多元、趣味化的展览
对所有企业来说,拥有一个3D线上展厅是互联网营销必不可少的部分,但是3D线上展厅定制周期长费用高,让很多企业公司望而却步,web3d开发公司制作的3D线上企业展厅制作平台备导览地图、语音解说、交互热点、全景漫游、自主行走、链接跳…...
华为OD机试真题-开源项目热榜-2023年OD统一考试(C卷)
题目描述: 某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目,开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量,开源项目的热…...
深入探索Maven:优雅构建Java项目的新方式(一)
Maven高级 1,分模块开发1.1 分模块开发设计1.2 分模块开发实现 2,依赖管理2.1 依赖传递与冲突问题2.2 可选依赖和排除依赖方案一:可选依赖方案二:排除依赖 3,聚合和继承3.1 聚合步骤1:创建一个空的maven项目步骤2:将项目的打包方式改为pom步骤…...
Shopee如何入驻?如何防封?
Shopee作为东南亚领航电商平台,面向东南亚蓝海市场,近年来随着东南亚市场蒸蒸日上,虾皮也吸引了大批量的跨境商家入驻。那么接下来就给想要入驻的虾皮小白一个详细的安全入驻教程。 一、商家如何入驻 虾皮与LAZADA最大的区别就是商家即卖家&…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
