卷友们好,我是rumor。
最近我越来越相信Prompt概念了,不光是paper数量越来越多,关键是用过的都说好。比如我的同事,比如我面试到的同学,再比如我看到的一些实践博客。估计在它席卷所有任务和domain之前还会火很久。
Prompt的兴起和大模型息息相关,之前BERT阶段的时候大家都搞预训练,在预训练任务和模型结构上下功夫,结果发现不管怎么调,来个大模型就给干翻了。但大模型不是所有人都能搞呀,于是挖了Prompt这个坑,开始花式改变输入形态,期待从大模型里挖出惊喜,最近我就看到了两种:
把输入参数化:Prompt-tuning
把输入变成更具体的任务描述:Instruction-tuning
但之前这些工作都是围绕着激发Y(label)做文章,昨天刷到了一篇谷歌的工作,改而激发X(text),输入任务描述、文本样例和Y,直接输出X,作为训练语料再去精调模型。如果把该方法用做数据增强,可以在SuperGLUE上提升近1个点:
![4bf1537bcb22218b399692a5e55cffe4.png](https://i-blog.csdnimg.cn/blog_migrate/1b6a5c51e9d0946cc71c8d2a964649d7.png)
效果还是很硬的。有意思的是,这篇文章的方法在去年年底(2020.12.20)就有了,当时是第一个在SuperGLUE上超越人类的方法,但不知为什么最近(2021.9.19)才发出来(可能圣诞节去休假了?)。
题目:Towards Zero-Label Language Learning
地址:https://arxiv.org/abs/2109.09193
![b2a7aef37fccd96dd5f9a8cde14be92d.png](https://i-blog.csdnimg.cn/blog_migrate/8967a7364ee11536c137742d42f98dd6.png)
原理
作者的motivation主要是把大模型生成和预测解耦。虽然完形填空or语言模型的预测方式已经被证明有效,但作者认为Prompt的效果主要是因为X和Y再训练语料中有共现,而且在真实语料里,Y经常在X前面,所以Prompt的预测模版会导致训练和生成的不一致,是次优解。
所以作者采用Y->X的方式,把大模型的知识拿到之后再去训练下游模型。
这篇文章的方法还是挺优雅的,输入由三部分构成:
任务描述:很短的一句话,比如「Yelp Review」
文本样例:这个样例也是没有label的,比如分类任务,就输入一些待分类的文本,论文里是32个。而文本对任务就输入一些文本对,不给标签或者说unknown
Label:也是文字描述,用来指导模型的输出
举个简单的例子,比如你是一个模型,我和你说:咱们来做一个情感分类任务,输入的句子可以是「这家店的火锅真香」、「昨天分手了,想哭」,请问还有什么表达高兴的句子?
![34d8af21fd455348b536819c2dc22190.png](https://i-blog.csdnimg.cn/blog_migrate/7ded655977f0b3407b21f921ee5c2ac1.png)
比较有意思的是输入样例这个点,完全没有标签,却能指导模型,说明模型里真是有不少东西。而且输入样例个数K对效果的影响还挺大:
![86f3604e492f36f35b0d051e216948eb.png](https://i-blog.csdnimg.cn/blog_migrate/05179805ab43012300a73eece3601d81.png)
效果
真正用到下游精调的时候,作者还是稍微清洗了下数据,采用NLA(Noisy Label Annealing)方法,把精调模型预测结果和label差距太大的删掉。效果提升了0.2-0.8左右。
最终在T5-XXL单模型上超越了BERT系列的模型:
![556a0eae39e6b91f61d49a46485d4cc0.png](https://i-blog.csdnimg.cn/blog_migrate/6c9b78342d39c1d45c18192293114bfc.png)
而且比Prompt-tuning的效果也更好,下图是Prompt-tuning的效果截图(不过ensemble后难分伯仲):
![6952b54eb6330c70cdb5d7e40c26021e.png](https://i-blog.csdnimg.cn/blog_migrate/1bf2985cab2b0575872a226bf4d08331.png)
总结
这篇文章的主要贡献是验证了在完全无监督的情况下,用大模型生成训练语料的可行性。这样的好处是有了训练语料后,对大模型的依赖就停止了,我可以再训练一个更小的模型保证线上速度。同时这又跟蒸馏有点像,只不过之前的蒸馏都是学习teacher的隐层分布,而UDG直接把知识拿出来再去学习,可解释性和可控性更强。
卷到现在,大模型的应用方式越来越可控且多样了,可以直接用它做下游任务,也可以把它的知识拿出来学习。
那我们再进一步想,是不是通过Prompt、Instruction得到的Y和输入X也可以作为训练数据?而且Instruction的结果可能更加准确(做判别比做生成容易),兜兜转转又回到了知识蒸馏上?
![bca26223504d9a434f2e504c6f1deebc.png](https://i-blog.csdnimg.cn/blog_migrate/a4fda5a6e775ab62e654676bca64b625.png)
大家好我是rumor
一个热爱技术,有一点点幽默的妹子
欢迎关注我
带你学习带你肝
一起在人工智能时代旋转跳跃眨巴眼
「最近Paper超多,着急」