大语言模型(LLMs)在处理自然语言处理任务时展现出了令人印象深刻的零样本和少样本学习能力,但它们在一些基础功能上表现不佳,例如算术运算或事实查找。这些局限性包括无法访问最新事件的信息、倾向于虚构事实、难以理解低资源语言、缺乏进行精确计算的数学技能,以及对时间进展的不敏感。
为了克服这些限制,一个简单的方法是让语言模型能够使用外部工具,如搜索引擎、计算器或日历。然而,现有的方法要么依赖大量人工注释,要么将工具使用限制在特定任务的设置中,这限制了工具在语言模型中的广泛应用。
于是Meta AI提出Toolformer,通过简单的API调用来教会自己使用外部工具。
项目地址:https://github.com/xrsrke/toolformer
1、方法介绍
Toolformer模型的核心方法论在于通过自监督学习教会语言模型(LMs)使用外部工具,主要通过以下步骤实现:
API调用的表示
首先是API调用表示的定义:将每个API调用表示为一个元组,其中
是API的名称,
是对应的输入。给定一个API调用c及其对应的结果r,分别表示不包括和包括其结果的API调用的线性化序列为:
其中,“ <API> ”、“ </API> ”和“→”是特殊标记。图1展示了一些插入到文本序列中的线性化API调用的示例。
训练数据集
给定一个纯文本数据集,将其转换为一个带有API调用的增强数据集
,具体步骤如下:
模型微调
- API调用采样:
对于每个API,设计一个提示(prompt)P(x),鼓励语言模型(LM)在给定的文本例子上注释API调用。例如,对于问答工具,提示会展示如何将问题插入到文本中,并用特定的格式(如"[QA(question)]")来表示API调用。
对于文本序列中的每个位置,计算模型在该位置开始API调用的概率
。然后给定一个采样阈值
,保留所有概率
的位置,并从中选取最多k个候选位置。
对于每个选定的位置 i,基于前缀和后缀</API>,从模型M最多获得m 个API调用
。
- API调用执行:
对所有由M生成的API调用进行实际执行,以获得相应的结果rir_iri。不同的API有不同的执行方式,例如调用另一个神经网络、运行Python脚本或使用检索系统搜索大型语料库。 - API调用过滤:
为了确定哪些API调用是有益的,Toolformer引入了一种自监督损失函数L来评估API调用的效果。
对于序列中的位置i上的API调用及其结果
,使用加权交叉熵损失函数
来衡量模型在给定前缀z时对后续Token的预测能力。具体来说,
表示在提供API调用及其结果的情况下的损失,
表示不提供任何API调用结果时的损失。通过比较提供API调用结果与否的损失差异来决定是否保留该API调用。
如果提供API调用结果能够显著降低模型的预测损失,即,那么这个API调用就被认为是有用的,并被保留下来。
- 最后,Toolformer利用经过上述步骤处理后的数据集
来微调原始的语言模型M。这里的数据集
包含了原始文本以及有用的API调用信息。这种方法确保了模型不会失去其通用性和语言建模能力的同时,还获得了使用外部工具的能力。
- 在微调后生成文本时,进行常规解码,直到模型生成“→”标记,表示它接下来期望获得API调用的结果。此时,中断解码过程,调用适当的API以获取响应,并在插入响应和 </API>标记后继续解码过程。
下面是所有的工具及使用示例:
2、实验
实验设置
- 数据集生成:使用CCNet的一个子集作为语言建模数据集C,并选择GPT-J作为语言模型M。另外,为了降低标注C时API调用的计算成本,为一些API定义了启发式规则,以便筛选出那些更可能从API调用中受益的文本子集。例如,对于计算器工具,只考虑包含至少三个数字的文本。
- 基线模型:实验比较了以下几种模型:
GPT-J:未经微调的标准GPT-J模型。
GPT-J+ CC:在CCNet子集上微调但不涉及任何API调用的GPT-J模型。
Toolformer:在带有API调用注释的CCNet子集C∗上微调的GPT-J模型。
Toolformer(disabled):与Toolformer相同,但在解码时禁用了API调用。
此外,还对比了两个更大规模的模型OPT (66B) 和 GPT-3 (175B),它们分别比其他基准模型大10倍和25倍左右。
LAMA
LAMA任务涉及完成一个缺少事实信息的简短陈述(例如,日期或地点)。这个任务包括SQuAD、GoogleRE和T-REx子集。Toolformer在这些子集上的性能优于基线模型,即使与更大的模型如GPT-3相比也具有竞争力。
Math Datasets
这个任务测试了模型的数学推理能力,包括ASDiv、SVAMP和MAWPS等数学基准测试。Toolformer在这些任务上的性能超过了基线模型,并且在允许API调用时性能得到进一步提升。这表明模型学会了在需要时调用计算器工具来辅助计算。
Question Answering
在问答任务中,Toolformer在Web Questions、Natural Questions和TriviaQA数据集上的表现超过了同样大小的基线模型。Toolformer主要依靠Wikipedia搜索API来找到相关信息,这表明它学会了如何利用搜索工具来增强其问答能力。
Toolformer仍然落后于更大的GPT-3(175B)模型,这可能是由于搜索引擎的简单性(在许多情况下,它返回的结果显然与给定查询不匹配)以及Toolformer无法交互使用,例如,如果结果没有帮助,重新制定其查询或浏览多个顶部结果。
Multilingual Question Answering
多语言问答任务(MLQA)评估了模型在处理多种语言输入时的能力。Toolformer在所有语言上使用API调用一致性地提高了性能,表明它学会了如何使用机器翻译工具来处理非英语问题。
Temporal Datasets
时间数据集任务评估了模型处理与时间相关的查询的能力。Toolformer在TEMPLAMA和DATESET数据集上超越了基线模型。尽管Toolformer并没有100%地利用日历工具,但它更多地使用了Wikipedia搜索来提高性能。
语言建模能力
Toolformer模型在经过API调用微调后,其语言建模性能几乎没有受到影响
规模法则
下面展示了模型规模如何影响模型的能力,从结果可以看到,只有当模型参数量达到大约775M时,模型利用提供的工具的能力才显现出来。一个例外是主要用于QA基准测试的Wikipedia搜索引擎;作者们推测这是因为该API相对容易使用。尽管随着模型规模的增长,模型在不使用API调用的情况下解决任务的能力增强,但它们利用提供的API的能力也同时提高。因此,即使对于最大的模型,使用和不使用API调用的预测之间仍然存在很大的差距。
3、总结
这篇文章构建了一个工具数据集,并用该数据集微调大模型得到Toolformer,增强了大模型调用工具的能力,但是没有加入与LLM的交互,如果能够获得LLM的思考与反思,通过与环境的交互可能会有更好的效果。也是比较早的一篇工作了,后来随着langchain和agent的出现,能够更容易地实现工具调用。