论文 #
-
论文地址 Toolformer: Language Models Can Teach Themselves to Use Tools
-
开源地址 Implementation of Toolformer git
Toolformer[1] #
- 🔑关键词和摘要
- Keywords: Large-scale PLMs, Tool Learning
- xxx
- 驱动语言模型去使用简单的模型来调用外部的工具
- Toolformer通过语言模型的方法去决定去调用哪些API,传入哪些参数
- Tooformer是在自监督层面执行的,只需要对每个API的语言描述
- ⚙️研究设计和结论
- 方法
- Toolformer调用示例:xxx
- 关键要素:
- 模型对工具的使用应该是自监督的,这样可以省去很大的标注开销
- 模型应该自行地去决定在何时间,用何方法来调用工具
- 方法概要:
- 受到in-context learning的启发,给定少量的人写的关于API的描述,让模型去自行生成潜在API调用的语言建模数据
- 构建一个自监督的Loss函数,让模型来决定哪些API的调用有助于它的语言建模的预测
- 方法细节:
- xxx
- 给定一个纯文本数据集,构建出一个带有API调用的数据集,然后在此数据集上做微调
- 第一步:使用in-context learning来生成大量的潜在可能的API调用
- 第二步:执行这些API,返回得到结果
- 第三步:检查返回的结果是否有助于语言模型的预测,过滤掉其他的API
- API调用采样
- 给每一个API来撰写提示来鼓励模型使用这些API,例如QA的提示是 xxx
- 对于文本的每一个位置,如果这个位置是
(即API调用的开始)的概率大于一个阈值,则将此位置保留到一个集合I中 - 对于集合I中的每一个位置,通过模型生成最多m个API调用,并且以结尾(如果生成的调用没有以结尾,直接舍去)
- API执行
- 去执行所有的API调用,返回文本序列
- API过滤
- 构建自监督的语言模型的loss函数
- 第一个的含义:进行API的调用,并且使用API结果的Loss
- 第二个的含义:空字符串的Loss和调用API但不返回结果Loss的最小值
- 这时我们希望模型使用API并且返回结果对语言建模有帮助,且帮助很明显->前者的loss显著比后者小
- 微调和推理
- 在经过如上操作后,就可以得到带有API调用的数据集,然后将模型在上面进行微调
- 当模型在解码阶段输出"->“符号时,意味着需要调用API了,调用得到返回结果然后拼接上去
- xxx
- 实验
- 模型:GPT-J (67亿参数)
- 原始数据:CCNet
- 知识探测任务LAMA
- Toolformer可以大幅超过之前的方法,甚至是GPT-3等大模型
- 数学数据集
- 问答
- 这里即使是Toolformer也无法超越GPT-3,可见预训练规模可以囊括更多知识
- 模型规模的影响
- 模型的参数量到一定规模后才拥有使用工具的能力
- 方法
- 📚论文贡献
- 优点
- 将语言模型使用外部工具的进行很自然的结合
- 不需要标注大量数据,使用自监督的方法进行学习
- 缺点
- 工具无法交互,也无法链式使用(每个API调用都是独立的)
- 定义的工具尚且有限,扩展工具则需要用模型标注新的数据
- 随着基础模型zero-shot能力的增强,这种需要构建数据并且fine-tune的做法可能会比较麻烦
- 优点
- OpenBMB BMTools: https://github.com/OpenBMB/BMTools