知识边界、工具调用
基于prompt的方法
Verify-and-Edit
post-hoc
使用self-consistency用来判断确定度。
prompt带来的额外信息量
Critic
相比于VE(verify-and-edit)来说,显式地说出了两个评价的关键词"Plausibility"和"Truthfulness",不过我感觉没什么区别。
其中Plausibility用到了大模型能够self-evaluatez这个性质
总体来说感觉不太有意思
- 不涉及复杂工具使用,不涉及工具参数生成
- 也没说外部知识怎么融合比较好,就是用prompt按顺序融合
ToolLLM
有点笨重,不令人兴奋,主要还是toolbench。
基于finetune的方法
ToolkenGPT
待补充
Toolformer
method
- 数据集构造 自己根据ICL 给生成api call和参数
- 模型自己标注api的好处:自生成,配合后面的数据筛选可以过滤掉一些自己生成的错误的信息,微调后改变分布
- 坏处:可能能力没有GPT4标的可靠
- 数据集筛选 选择那些在生成阶段对后面的token生成 weighted cross entropy显著下降的
- 用ppl作为指标微调
experiment
一些发现
- searchQA这种 效果没有比GPT3好,可能是因为api返回的东西太杂
- decoding strategy top10效果会更好一些
其他
QA的api call实际上是后面接了一个用natural instruction训过的小模型,QA任务上表现很好。
我的想法
- 这里这个筛选非常重要,实际上感觉是给了三条路径供选择,开个脑洞,其实等于开了第二三条路经然后比较一下相对的reward 只是这里的reward直接用了一个loss来代替了。
- 对于一个模型来说,什么样的预测是好的预测? 比如说,如果这句话的ppl低,就是好的预测,或者说这句话的loss低就是好的预测。可是这中间有一个gap 就是,模型自己觉得好的,并不一定是对的(?);不过模型多次输出一致的,应该是对的。所以这个地方可以改进一下
- 过滤,这一步非常关键。因为实际上改变了原来模型的生成分布。模型本来是会生成一些乱起八糟的提问,但是经过这个过滤,被训练得会更靠近那种有意义的。
模型是否知道自己的知识边界
目前的观点应该是可以的,即模型可以self-evaluate。
一个比较有名的研究是Language Models (Mostly) Know What They Know。我理解大概是可以训出这样一个special token,这个token直接作为一个知道或不知道的指示。
另外许多工作中实际上已经用到了这一点,比如critic,里面就有让模型自己判断自己的回答对或不对(Plausibility)
还有另外一种通过识别logits的一些pattern,也能够识别出模型正在撒谎状态。这个可以考虑接个MLP做预测也是可以反映出模型回答在知识边界内还是外。
idea:
从模型生成的50个答案中编辑出一个正确的答案。verbal-edit 不过还差点意思 能说明什么新奇的发现?
离散化 让大模型做连续打分好像是一件难事。
其他
今天对toolformer有点自己的看法的时候,非常开心。这些大概就是bonus吧,生活中点缀着的这些小惊奇,就足够让我喜悦。
参考:
https://anote-ai.medium.com/language-models-mostly-know-what-they-know-6c7a1404a020
toolformer: https://medium.com/towards-data-science/toolformer-guiding-ai-models-to-use-external-tools-37e4227996f1
critic: https://arxiv.org/abs/2305.11738