问题 (Problem)

大型语言模型(LLMs)虽然在文本生成和理解上表现出色,但存在一些固有的核心缺陷:

  • 知识过时与幻觉:LLMs的知识被冻结在训练数据的时间点,无法获取最新信息,并且有编造事实(幻觉)的倾向。
  • 缺乏精确计算能力:LLM不擅长进行精确的数学运算,容易在算术问题上犯错。
  • 时间感知能力弱:模型对当前日期和时间没有概念,无法回答与时间流逝相关的问题。
  • 低资源语言处理能力不足:在处理数据稀少的语言时表现不佳。

现有的解决方案通常依赖大量的人工标注来教模型如何使用工具,或者只能在特定任务的设定下使用工具,缺乏通用性。因此,本文旨在解决一个核心问题:如何让语言模型以一种自监督的、通用的方式,学会自己决定何时、如何以及使用何种外部工具来弥补自身缺陷?

方法 (Method)

Toolformer的核心思想是:一个有用的API调用,应该能帮助模型更好地预测未来的文本。基于此,作者提出了一种全新的、自监督的学习范式,让模型“教会自己”使用工具。该方法主要分为三个步骤,如下图2所示:
Figure2

  • 图例解读:上图以一个问答(QA)工具为例,展示了如何为一个句子 “Pittsburgh is also known as the Steel City.” 自动生成和筛选API调用。
    • 输入文本 (x): 分为上下文 x1:i1x_{1:i-1} (“Pittsburgh is also known as”) 和后续文本 xi:nx_{i:n} (“the Steel City”)。
    • 步骤1 (Sample API Calls): 在位置 i,模型可能会产生多个API调用候选,例如 ci1c_i^1(问匹兹堡的别名)和 ci2c_i^2(问匹兹堡在哪个国家)。
    • 步骤2 (Execute API Calls): 执行这些调用,得到结果 ri1r_i^1 (“Steel City”) 和 ri2r_i^2 (“United States”)。
    • 步骤3 (Filter API Calls): 通过一个损失函数(L)来判断哪个API调用是有用的。
      • 调用 ci1c_i^1 及其结果 ri1r_i^1 (“Steel City”) 显著降低了模型预测后续文本 “the Steel City” 的难度(损失减小),因此这个API调用被保留。
      • 调用 ci2c_i^2 及其结果 ri2r_i^2 (“United States”) 对于预测 “the Steel City” 毫无帮助(损失没有减小),因此被丢弃。
    • 最终输出 (x*): 将被保留的、有用的API调用及其结果整合回原始文本,形成一条新的、增强的训练数据。

方法详解

第一步:采样API调用 (Sampling API Calls)

  1. 构建Prompt:为每一种工具(如QA、计算器)人工撰写一个包含少量示例的Prompt。这个Prompt会引导模型在新的文本中生成类似的API调用。
  2. 生成候选:将 Prompt + 原始文本x 输入给LM。模型会在文本的每个位置 i 评估生成一个特殊token <API> 的概率。
  3. 选择位置和内容:选取概率超过阈值 τs\tau_s 的位置作为API调用的候选位置。在这些位置,让模型续写生成完整的API调用,例如 [QA("What other name is Pittsburgh known by?")]

第二步:执行API调用 (Executing API Calls)

这是一个简单的步骤,将上一步生成的API调用(如 Calculator(400/1400))发送给对应的外部工具(如Python解释器)并获取返回结果(如 0.29)。

第三步:过滤API调用 (Filtering API Calls)

这是整个方法的核心和精髓,通过一个自监督的损失函数来判断API调用的“有效性”。

  • 定义损失函数
    作者定义了一个加权的交叉熵损失 Li(z)L_i(z),用于衡量在给定前缀 z 的条件下,模型预测后续文本 xi,...,xnx_{i}, ..., x_{n} 的难度。

    Li(z)=j=inwjilogpM(xjz,x1:j1)L_{i}(z) = - \sum_{j=i}^{n} w_{j-i} \cdot \log p_{M}(x_{j} | \mathbf{z}, x_{1:j-1})

    其中,wjiw_{j-i} 是一个权重函数,它使得离API调用位置更近的token具有更高的权重。

  • 定义过滤标准
    对于一个在位置 i 的API调用 cic_i 及其返回结果 rir_i,模型会比较两种情况下的损失:

    1. Li+L_i^+: 提供了API调用及其完整结果时的损失。前缀 zz 是包含API调用和结果的序列 e(ci,ri)e(c_i, r_i)
    2. LiL_i^-: 不提供帮助提供不完整帮助时的最小损失。它取以下两种情况的较小值:
      • 完全不进行API调用时的损失(前缀 zz 为空序列 ϵ\epsilon)。
      • 进行了API调用但不提供其结果时的损失(前缀 zze(ci,ϵ)e(c_i, \epsilon))。

    一个API调用被认为是“有用的”,当且仅当它能显著降低模型的预测损失。其数学表达式为:

    LiLi+τfL_i^- - L_i^+ \ge \tau_f

    其中 τf\tau_f 是一个预先设定的过滤阈值。只有满足这个条件的API调用才会被保留。

最后一步:模型微调 (Model Finetuning)

将所有文本中经过筛选的有用的API调用及其结果,插入到原始文本中,形成一个增强的数据集 CC^*。然后,用这个新的数据集 CC^* 对原始的语言模型M进行标准的语言模型任务微调。

通过这个过程,模型学会了在什么上下文中、应该生成什么样的API调用来帮助自己更好地完成语言建模任务。

Baseline模型

为了验证Toolformer的性能,论文主要与以下几类模型进行了比较:

  • GPT-J (6.7B): 作为Toolformer的基础模型,未经任何微调。
  • GPT-J + CC: 在与Toolformer相同的CCNet子集上进行微调,但数据中不包含任何API调用。这是一个对照组,用来验证性能提升不仅仅来自于额外的微调。
  • Toolformer (disabled): 训练好的Toolformer模型,但在推理时不让它调用API。这用来检验模型自身的知识和能力是否因学习使用工具而得到提升。
  • 更大规模的模型: OPT (66B) 和 GPT-3 (175B),用来证明Toolformer作为一个小得多的模型,在工具的帮助下可以达到甚至超越这些巨型模型的性能。

数据集

  • 训练数据集:

    • 使用了一个庞大的网络文本数据集 CCNet 的子集作为基础训练语料。Toolformer的方法将这个纯文本数据集转换为了一个包含API调用的增强数据集。
  • 评测数据集 (下游任务):

    • 事实问答 (LAMA): 评测模型回忆事实知识的能力。
    • 数学推理 (ASDiv, SVAMP, MAWPS): 评测模型的数学计算和逻辑推理能力。
    • 开放域问答 (WebQS, NQ, TriviaQA): 评测模型利用外部知识回答问题的能力。
    • 多语言问答 (MLQA): 评测模型的跨语言理解能力。
    • 时间敏感问答 (TEMPLAMA, DATESET): 评测模型对时间变化的感知能力。
    • 语言建模能力 (WikiText, CCNet): 评测模型在加入API调用后,其核心的语言建模能力是否受损。

可复现性 (Reproducibility)

  • 代码: 论文没有明确提供开源代码,但详细描述了其实现方法。底座模型是公开的GPT-J,所使用的工具(如BM25检索、Atlas模型等)也大多是基于现有研究或开源工具构建的。
  • 算力: 论文中提到,微调过程使用了 8块 NVIDIA A100 40GB GPUs。这是一个相当大的算力需求,对于个人研究者或小型实验室来说有一定门槛,但对于企业或大型研究机构是可行的。
  • 超参数: 论文在附录中详细列出了采样阈值 τs\tau_s、过滤阈值 τf\tau_f、学习率、批量大小等关键超参数,为复现实验提供了重要参考。

可改进的几个点 (Limitations & Future Work)

论文作者坦诚地指出了当前方法的几个局限性,这些也构成了未来研究的潜在方向:

  1. 链式工具使用 (Chained Tool Use): 当前模型无法将一个工具的输出作为另一个工具的输入(例如,先用搜索工具找到信息,再把信息交给计算器处理)。这是因为API调用是独立生成的,训练数据中没有这种链式调用的样本。
  2. 与工具的交互性: 模型只能进行一次性的API调用,无法与工具进行多轮交互,例如根据初步搜索结果调整搜索关键词,或者浏览多个搜索结果页面。
  3. 对输入措辞的敏感性: 和其他LLM一样,Toolformer在决定是否调用API时,对输入的具体措辞非常敏感。微小的变化可能导致完全不同的行为。
  4. 样本效率问题: 对于某些工具(尤其是计算器),需要处理海量的文本数据才能筛选出少量有用的API调用样本,效率较低。
  5. 缺乏成本意识: 模型在调用API时,没有考虑现实世界中可能存在的计算成本、时间成本或金钱成本。

可以被引用的一些结论

  1. 自监督学习工具使用的可行性: 论文最有价值的结论是,语言模型完全可以通过一种自监督的方式,教会自己使用外部工具,而无需大量昂贵的人工标注。
  2. “有用性”的可量化: 将“API调用的有用性”定义为“对预测未来文本的损失降低程度”,是一个非常巧妙且有效的自监督信号。
  3. 小模型+工具 > 大模型: Toolformer (6.7B) 在多个需要事实、计算或实时信息的任务上,其性能显著超越了比它大10倍甚至25倍的OPT (66B)和GPT-3 (175B)。这证明了让模型学会使用工具是比单纯扩大模型规模更高效的提升能力的路径
  4. 工具使用是一种涌现能力: 如下图4所示,模型学习使用工具的能力与其规模正相关。在模型参数达到约775M(0.7B)之后,使用工具带来的性能提升才开始变得显著。这表明,有效利用工具本身也是大模型的一种“涌现能力”。
  5. 通用性与核心能力保持: Toolformer学习使用工具的过程不会损害其核心的语言建模能力(在标准LM benchmark上困惑度没有增加),并且它学会的是一种通用的、在推理时(zero-shot)自主决策的能力,而不是针对特定任务的死记硬背。