诸神缄默不语-个人CSDN博文目录
诸神缄默不语的论文阅读笔记和分类
论文全名:Toolformer: Language Models Can Teach Themselves to Use Tools
论文下载地址:https://arxiv.org/abs/2302.04761
这篇文章是介绍tool learning的,大概来说就是训练模型实现这个功能:根据query判断是否需要通过调用工具(传参进API)来获取一些特定信息(比如天气、实时汇率等,还有计算器、问答系统、搜索引擎、翻译系统、日历)。结合工具返回的结果,LLM输出最终结果。
这种做法在现在LLM里用的也蛮多的了,现在应该已经可以实现在一句话里多次调用、链式调用API了?(虽然据说可能会出现死锁,所以必须要DAG捏)
很多细节懒得写了,大家看原文吧。
文章目录
- 1. 思路
- 2. Toolformer
- 用字符串表示一个API调用
- API
- 3. 实验
- 1. 数据集构建
- 2. 主实验结果
- 3. 模型分析
- 1. Scaling Laws
- 2. 解码策略
- 3. 数据质量
1. 思路
Toolformer主要致力于解决一些LLM反而解决不了的基础问题(比如算术,比如获取最新信息(LLM缺失最新信息也使其倾向于产生幻觉,这块我的理解是这就是很直觉的因为LLM不知道所以就瞎编)),解决方案就是让LLM去调用外部工具。
现存的解决方案要么需要人工标注1,要么外部工具类型单一2 3,而Toolformer就可以实现:
- 自监督学习使用工具,不需要大规模人工标注。
- 工具可选范围广泛
2. Toolformer
训练过程实现方法:
- 用LLM自监督标注出API调用训练集(可以视为是bootstrapping方法)
大致来说就是根据query抽样API调用位置和命令,执行命令,从返回的结果中选出不会降低接下来token的语言模型损失函数的样本中损失函数最低的样本。
(设计评估API的损失函数这里有很多太细节的东西我就懒得写了,总之这里有一点比较tricky就是拿API召回结果当前缀……)
最后将返回结果嵌入LLM回答中。
以QA工具为例,抽样时采用的prompt模版(全部模版见Appendix A.2):
整体流程:
- 微调LLM
推理过程:在出现→
token时调用API
用字符串表示一个API调用
一个API调用是一个元组 c = ( a c , i c ) c=(a_c,i_c) c=(ac,ic), a c a_c ac是API名称(函数), i c i_c ic是API输入(参数)。
r r r是API返回结果,我们定义序列化的API调用(指用字符串表示的一个API调用),带不带返回结果的如下两种情况:
<API></API>→
是特殊字符,在实际实验中用词表中存在的token[]->
来替代,如Figure 1所示:
API
具体选了哪些API之类的,我懒得写了。总之在这里粘一下正文图表:
API及其输入输出示例:
3. 实验
1. 数据集构建
↓ 这个是调用API的位置和“调用API有用”的位置之间的threshold和API量,就是权重低于这个阈值才会选择调用(把这个样本放进数据集)。threshold是API-specific的。细节见原文及Appendix A。
2. 主实验结果
LAMA:评估标准略,总之LM是应用于left-to-right模式,以及对多token场景评估准确率用的不是完全匹配。
求解数学题:用模型生成的结果中的第一个数字
QA:(本文提及希望与搜索内容互动。啊这个思路感觉很多新模型已经实现了……)
跨语言QA:
带时间信息的数据集:
LM:
3. 模型分析
1. Scaling Laws
用GPT-2系列来分析模型具不具有scaling laws:
2. 解码策略
top-k里的那个k:
3. 数据质量
检验API返回结果的有效性:
(2022 ACL) Internet-Augmented Dialogue Generation
(2022 谷歌) Re69:读论文 LaMDA: Language Models for Dialog Applications ↩︎PAL: Program-aided Language Models ↩︎
TALM: Tool Augmented Language Models
Internet-augmented language models through few-shot prompting for open-domain question answering ↩︎