论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools

2023-11-30 23:01

本文主要是介绍论文笔记--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,,xC},其中 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,,xi1,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:i1),如果条件概率值高于给定阈值 τ 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={ipi>τs}(不超过k个)。接下来,对每个 i ∈ I i\in I iI,我们基于 [ P ( x ) , x 1 , … , x i − 1 , < A P I > ] [P(x), x_1, \dots, x_{i-1}, <API>] [P(x),x1,,xi1,<API>]调用API接口得到接下来的预测结果。
    pm
  • 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=inwjilogpM(xjz,x1:j1)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,,xj1和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 LiLi+τ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:i1,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进行标记,然后继续解码直至结束。
    toolformer步骤

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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/438863

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit