[论文阅读]Gist-token:将instruction压缩到虚拟token

论文链接: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长度,是冗余的
  • Finetuning/Distillation(之前小模型的路子)
    • 每个t设置一个任务,很多单任务模型,学习的是P(y,x)
    • 优点是 不需要学习prompt
  • 新提出的Gisting
    • 上面两种的tradeoff,引入gist-token将prompt压缩,缩短prompt的长度(可以压缩到到1个token上 ),学习的是P(y|g(t),x)
    • 泛化性:在seen上可以与prompt持平,在unseen上有25%左右胜率;

做法

  • prompt的学习方式

    1
    2
    Q: Translate French: The cat. 
    A: Le Chat
  • gist的输入方式:

    1
    2
    Q: 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的信息

参考

赏杯咖啡!