URL
TL;DR
- 大模型并不是全能的,大模型 + 工具可以更好地解决问题,本文提出一种新的训练方法,让大模型可以自我学习使用如何工具。
- 本文的主要贡献是提出了一种新的训练方法,包括通过大模型构造工具调用数据集、清洗数据集、使用工具调用数据集微调大模型。
Algorithm
ToolFormer 的意义
- 众所周知,大模型在很多任务上表现出色,但它们并不是全能的,比如去数 “strawberry” 这个单词中有多少个 “r”。
- 工具可以帮助大模型更好地解决问题,比如计算器、日历、知识库等。
- 一种常见的大模型和工具结合的方式是:通过
Agent
多角色(user / llm / function)多轮对话 形式调用,简单来说就是:- 大模型在需要调用工具的时候,输出一段特定格式的文本
- 外部程序解析这段文本,调用相应的工具,调用得到结果
- 新的结果作为
Function
角色的输入,继续和大模型对话
- 而
ToolFormer
采用的方式和Agent
有相似之处,也有不同的地方:- 相似点:
- 都需要大模型输出一段特定格式的文本来调用工具
- 都需要一段
endless loop
程序来解析大模型的输出,调用工具
- 不同点:
ToolFormer
不是通过 多角色多轮对话 的方式调用工具,而是通过 单角色单轮对话 的方式调用工具ToolFormer
需要对大模型进行 微调,而Agent
不需要
- 相似点:
ToolFormer
可以将存在确定答案的 专用 任务转化为工具调用任务(例如:计算、翻译、问答等),让大模型可以更专注在 通用 任务上(例如:上下文理解、常识知识运用等)。
ToolFormer 的工作方式
ToolFormer
是经过工具调用微调的大模型,知道有哪些工具可以调用,也知道如何调用这些工具。- 假设模型输入的问题是:
1
Pittsburgh is also known as
- 这个时候,模型会意识到这个问题可以通过调用
Question Answering
工具来解决,于是模型会续写:1
Pittsburgh is also known as <API>QA(Pittsburgh is also known as)</API>
- 输出
</API>
之后,推理进程会暂停推理模型,等待外部监听程序的调用结束。 - 外部监听程序会解析模型输出文本中的工具调用指令(通过
<API> </API>
格式),然后调用Question Answering
工具,得到结果:1
the Steel City
- 推理程序将工具调用结果和模型的历史输出(去掉调用相关信息)拼接起来,继续推理模型:
1
Pittsburgh is also known as the Steel City.
应该怎么得到 ToolFormer
- 假设上面提到的
ToolFormer
工作方式是一个愿景,那么接下来就是考虑应该如何得到一个这样的模型。 - 显然,直接拿一个预训练或经过微调的大模型来使用是行不通的,因为它并不知道哪些工具可以用,以及如何调用。
- 那么需要做的事就是:通过微调,让大模型自己学习如何使用工具
- 最困难的部分就是:如何构造工具调用数据集,因为不存在现成的工具调用数据集,需要自己构造。
- 这篇论文花了很大的篇幅就在讲一件事:如何用大模型来构造工具调用数据集
如何构造工具调用数据集
上面这张图展示了如何用大模型来构造工具调用数据集的流程。
- 首先,还是用预训练数据做为基础,假设一条预训练数据是:
1
Pittsburgh is also known as the Steel City.
- 然后,使用大模型(例如:GPT-3)来在数据中找到可以调用工具的位置和工具类型,并给出调用工具的参数,例如:
1
Pittsburgh is also known as <API>QA(What other name is Pittsburgh known by?) -> Steel City</API> the Steel City.
1
Pittsburgh is also known as <API>QA(Which country is Pittsburgh in?) -> United States</API> the Steel City.
- 计算调用工具带来的损失收益,剔除负收益的数据,保留正收益的数据。
- 损失的计算方式(离调用工具位置越远,损失权重 越小):
- 调用工具的损失:
- 不调用工具 / 调用工具没有返回的损失:
- 只保留调用工具损失收益大于阈值的样本:
- 用筛选后的数据来微调大模型,得到
ToolFormer
。
- 上图展示了
ToolFormer
支持的五种工具类型:Question Answering
:问答工具Wikipedia Search
:维基百科搜索工具Calculator
:计算器工具Calendar
:日历工具Machine Translation
:机器翻译工具
Thoughts
ToolFormer
这种通过大模型自我学习使用工具的方式感觉挺好的,但似乎在实际使用中没有得到大范围推广,目前主流外挂工具的方式基本还是Agent
的多角色多轮对话方式。- 可能是因为
ToolFormer
的方式需要对大模型进行微调,而Agent
的方式不需要微调,直接使用预训练模型就可以。