论文链接:https://arxiv.org/pdf/2304.08467v1.pdf
压缩instruction部分的token长度
主要做什么事情
LLM的指令微调数据输入的格式是(instruction,query,answer)格式,分别使用t,x,y指代,在这种格式下目前的训练策略
- prompting-finetune(大模型目前主流方式)
- 将instruction和query拼在一起,来自回归的学习answer,学习的是
P(y|t,x)
- 优点是:可以做到多任务的学习
- 缺点是:要学习prompt,如果prompt较长,这部分会占据模型的输入token长度,是冗余的
- 将instruction和query拼在一起,来自回归的学习answer,学习的是
- Finetuning/Distillation(之前小模型的路子)
- 每个t设置一个任务,很多单任务模型,学习的是
P(y,x)
- 优点是 不需要学习prompt
- 每个t设置一个任务,很多单任务模型,学习的是
- 新提出的Gisting
- 上面两种的tradeoff,引入gist-token将prompt压缩,缩短prompt的长度(可以压缩到到1个token上 ),学习的是
P(y|g(t),x)
- 泛化性:在seen上可以与prompt持平,在unseen上有25%左右胜率;
- 上面两种的tradeoff,引入gist-token将prompt压缩,缩短prompt的长度(可以压缩到到1个token上 ),学习的是
做法
prompt的学习方式
1
2Q: Translate French: The cat.
A: Le Chatgist的输入方式:
1
2Q: Translate French: G1, G2,...Gn The cat.
A: Le Chat
此外,x部分无法看到Gist之前的token,也就是说上面的例子上’The’只能向左看见到G1,再前面部分看不到。
这样可以实现的目的:由于x看不到原始的instruction,只能看到Gist token,那么就强制让模型将原始的instruction信息压缩到Gist token中,要不然x无法生成指定的y。
使用mask来实现,就是将gist之前的token mask掉
关键结论和效果
- 平均instruction token数为26的数据集上测试,模型对gist-token数量多少不敏感,1个gist-token并没有造成过多的损失,过多的token对性能有损,这意味着26倍的压缩率
泛化性
- gist token的表现介于阳性对照模型和阴性对照模型之间(没理解这俩对照模型啥意思)
- llama的结构好于t5结构
什么时候 gist 模型与对照组持平
- 对于已见过任务(但是未见过的输入),gist 模型几乎有一半的时间与对照组不相上下。
- 对于未见过的任务,这一数字下降到了 20-25%。
- 对于 OOD Human 任务,这一数字又下降到 10%
启发和应用
- prompt比较短的时候,论文中的26,拿到的收益并不大,并且unseen差攻下会指标下降
- 在垂类场景下,如果prompt相对固定或者比较长,这种方案是否可行?例如在nl2sql的场景下,如果查询范围相对固定,就是有数的几个表,prompt固定且长,压缩到n个gist-token中,这几个 token专门用来存prompt的信息