Toolformer 论文阅读笔记
做笔记的目的
1、读完了论文,做一下笔记让自己别忘的那么快。
2、我觉得这篇论文写的真不错。
摘要
尽管通用语言模型在很多任务上表现出惊人的效果,但是在一些基础问题上表现的却不好,比如算数、事实查询。在这篇论文中,作者让语言模型自己学习如何使用API并不丢失语言模型的能力。作者提出的Toolformer模型,是一个被训练成自己知道在哪里需要调用API的模型。作者采用了自监督学习,因此不需要额外的资源,仅仅只是每个API的说明。在本文中涉及的API包括计算器、QA系统、搜索引擎、翻译系统、日历。
介绍
尽管语言模型在很多任务上表现出惊人的效果,但是也存在一些缺点,比如没有办法查阅最新的信息、翻译能力不好(低资源语言)、计算能力不好等等。为了克服这个困难,比较简单的方法是教语言模型使用外部工具,但是先有的方法都依赖于人工标注或者限制工具在特定的场景下使用(限制了使用场景)。因此作者提出了Toolformer,一个比较新奇的方法教模型学习使用API。Toolformer有以下特点
- 使用自学习,避免了大量的人工标注、同时也避免了人工主观所带来的偏差(比如人觉得需要调用API,实际上不需要)
- 模型不失去语言能力
Toolformer 的能力比较好,以6.7B的模型在某些方面达到了GPT-3模型的能力。
方法
首先定义API调用为一个元祖
c
=
(
a
c
,
i
c
)
c=(a_c,i_c)
c=(ac,ic),其中
a
i
a_i
ai是API的名字
i
c
i_c
ic是相关输入,因此就可以表述API返回结果和不返回结果的公示。
下面介绍整个算法的步骤
收集微调数据:论文非常好的创新点就是他收集数据的方法。
他给语言模型提示,然后让语言模型生成带有调用API的句子,也就是训练数据。
执行API调用:第一步得到的数据是上图中的Output,并没有调用API。同时需要注意模型自己生成的训练数据虽然数量庞大、成本低廉但是数据质量不高。因此需要对生成的训练数据进行一个筛选。论文中筛选的指标是看加入API调用后是否比没有加API调用更有利于模型推断后面的字符,所以就有这一步执行API调用。
筛选训练数据:
首先定义了带权交叉熵公式如下:
其中
L
i
(
z
)
L_i^{(z)}
Li(z)数值越大说明模型越难预测后面的字,因此越小越好。又定义了两个公式
第一个公式是调用API的带权交叉熵损失,第二个公式是不调用API或调用API但返回为空的带权交叉熵损失。
L
i
−
−
L
i
+
>
τ
f
L_i^- -L_i^+ > \tau_f
Li−−Li+>τf就说明调用API是有用的,那么就把训练数据留下来。其中
τ
f
\tau_f
τf 设置的是0.5、1.0、2.0 论文最后用的是1.0
微调:将筛选后的数据与一开始的训练数据合并后进行微调。
推理:遇到“->“时,停止解码,调用适当的API获得响应,并在插入响应和后继续进行解码过程。
工具
一共用了五个工具:Question Answering、Calculator、Wikipedia Search、Machine Translation System、Calendar
实验
实验设计
采用了2020年的CCNet数据作为训练预料C,以及2021年的GPT-J作为模型M。同时设置
τ
f
=
1
\tau_f=1
τf=1,将获得的
C
∗
C^*
C∗数据合并。模型进行微调详细信息如下:
下游任务
LAMA
Math Datasets
Question Answering
MLQA
Temporal Datasets
我就不截图了,实验论文里都有关系什么看什么。
分析
Decoding Strategy
增加k会模型调用更多次API如下图:
Data Quality
L i − − L i + > τ f L_i^- -L_i^+ > \tau_f Li−−Li+>τf这样衡量是否保留数据并不一定十分合理(但是已经很合理了)
限制
- One such limitation is the inability of Toolformer to use tools in a chain (i.e., using the output of one tool as an inputfor another tool).This is due to the fact that API calls for each tool are generated independently; as a consequence, there are no examples of chained tool use in the finetuning dataset
- Our current approach also does not allow the LM to use a tool in an interactive way.
- Depending on the tool, our method is also very sample-inefficient.
结论
We have introduced Toolformer, a language model that learns in a self-supervised way how to use different tools such as search engines, calculators,and translation systems via simple API calls. Thisis done by finetuning on a large number of sampled API calls that are filtered based on whether they reduce perplexity on future tokens. Toolformer considerably improves zero-shot performance of a
6.7B parameter GPT-J model, enabling it to even outperform a much larger GPT-3 model on a range of different downstream tasks.