Toolformer:语言模型如何自学使用工具
Toolformer 让模型自己决定调用哪个 API、传什么参数——计算器、问答、搜索、翻译、日历——只靠保留那些能降低下一词损失的采样调用,每个工具只需几条示范。
快速答案
Toolformer 是一个能自己决定调用哪个外部 API、何时调用、传什么参数的语言模型,可选工具有计算器、问答系统、两个搜索引擎、翻译系统和日历。训练是自监督的:每个 API 只需几条示范即可。关键在一道过滤器——只有当把某次调用的返回结果插回文本、能降低后续词元的损失时,才保留这次候选调用。最终它在多项下游任务上的零样本表现大幅提升,常常能与大得多的模型打平,同时不损伤基座模型本身的语言建模能力。
问题:大模型连加法都算不准
大语言模型在少样本任务上很强,却栽在一个袖珍计算器都能搞定的地方——算术、查当下事实、精确的日期推算。把模型做大并不能稳定解决:知识在训练时就被冻住,算术是统计学出来的而非真正算出来的。Toolformer 的前提是,模型不该试图去「成为」一个计算器,而该学会「调用」一个,再把答案读回自己的文本里。难点在于:如何不依赖一份庞大的人工标注数据,就让模型知道何时、如何调用每种工具。
自监督地生成 API 调用
训练数据由模型自己分三步造出来。第一步采样:借助几条上下文示例,模型在预训练语料的普通文本里,在大量位置上提出候选 API 调用——比如在计算百分比处插入一个像 [Calculator(400 / 1400)] 这样的调用。第二步执行这些调用,拿到各自的结果。第三步过滤,这一步才是全局的命门:对每个候选,把 API 返回的结果放在后续文本之前,看它是否比「不调用」(或调用但忽略结果)更能降低模型对接下来词元的损失。降损达到阈值的调用被保留,其余丢弃。
只留能降低损失的调用
这道过滤器就是全部的监督信号,值得细想它为何巧妙。没有任何人告诉模型「这句话需要计算器」。相反,「有用」被操作化地定义:一次工具调用恰好在它的输出让后文更易预测时才算好。计算器调用在它真正解开某段算术时才被留下;搜索调用在检索到的片段确实帮到后面几个词时才存活。经过过滤、内嵌在行内的标注被合并回语料,模型随后用普通的语言建模目标在这份增强文本上微调。由于 API 调用是穿插进正常文本的,模型学会把它们当作生成的自然一环吐出来,再把返回结果纳入后继续往下写。
关键结果
- 零样本全面提升。 Toolformer(基于 67 亿参数的 GPT-J)在一系列下游基准上大幅超过同一基座模型,且常常能与大得多的 GPT-3(1750 亿)打平,尽管它体量只有约后者的二十五分之一。
- 数学与事实问答提升最多,正是普通语言模型最弱的两块——增益由计算器和问答/搜索工具扛起,这恰是过滤器真在起作用时该有的样子。
- 核心语言能力被保住。 加入工具使用并未拉高模型底层的语言建模困惑度——这对任何在增强数据上微调的方法都是个真实隐患。
- 监督开销极小。 每个 API 只需几条人工示范来引导采样步,之后的一切都是模型自产。
为什么现在重要
Toolformer(2023 年 2 月)是后来整个领域都在追的那个想法最干净的早期表述:会调用工具的模型,胜过死记硬背的模型。它在概念上是今天函数调用与 agent API 的前身——区别在于,Toolformer 是从数据中学会「何时」调用,而不是靠推理时的提示或一份固定 schema。如果你想搞懂「工具使用」为何会从一个提示小技巧升格为一等能力,正是这篇论文把它界定成了模型能自学的东西。
局限与存疑
方法的优雅同时也是它的天花板。降损过滤器假定工具的价值会在下一词预测里局部地显现;那些收益分散或需多步才见效的工具,无法干净地通过它。Toolformer 无法把工具串成链——它不会拿一个 API 的输出去调另一个,因此真正组合式的推理超出了它的范围。它还对 API 调用的具体措辞敏感,而且每个工具都被独立对待,没有共享预算或成本意识。在大语料上采样候选调用计算开销很大,且方法会照单全收底层 API 返回的一切——一个错误的搜索结果会被忠实地信任。这些都没有动摇核心结论,但解释了为何后来的 agent 系统要在它之上叠加规划与多工具编排,而非直接拿来就用。
常见问题
Toolformer 怎么决定何时调用工具?
Toolformer 在大量文本位置采样候选 API 调用并执行,只有当把结果插入后能降低模型对后续词元的损失时才保留这次调用。这道降损测试是唯一的监督——没有人去标注哪句话需要工具。
Toolformer 能用哪些工具?
五种:计算器、问答系统、两个搜索引擎、机器翻译系统和日历。每种都只靠几条示范引导起步。
Toolformer 和 OpenAI 的函数调用是一回事吗?
不是。两者都让模型调用外部函数,但 Toolformer 是从数据中学会何时调用,再在结果上微调;而函数调用 API 是暴露一份固定 schema,在推理时靠提示让模型使用。Toolformer 是这一能力的研究前身。
Toolformer 能把多个工具串起来吗?
不能。Toolformer 独立调用每个 API,无法把一个工具的输出喂给另一个,因此多步组合式的工具使用是它明言的局限。
一句话:把「有用的工具调用」定义为能降低下一词损失,语言模型就能自学何时该去拿计算器。阅读 arXiv 原文。