Press "Enter" to skip to content

谷歌UDG|Prompt新用法,直接生成训练数据

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

卷友们好,我是rumor。

 

最近我越来越相信Prompt概念了,不光是paper数量越来越多, 关键是用过的都说好 。比如我的同事,比如我面试到的同学,再比如我看到的一些实践博客。估计在它席卷所有任务和domain之前还会火很久。

 

Prompt的兴起和大模型息息相关,之前BERT阶段的时候大家都搞预训练,在预训练任务和模型结构上下功夫,结果发现不管怎幺调,来个大模型就给干翻了。但大模型不是所有人都能搞呀,于是挖了Prompt这个坑,开始花式改变输入形态,期待从大模型里挖出惊喜,最近我就看到了两种:

 

 

    1. 把输入参数化:

Prompt-tuning

    1. 把输入变成更具体的任务描述:

Instruction-tuning

 

但之前这些工作都是围绕着激发Y(label)做文章,昨天刷到了一篇谷歌的工作, 改而激发X(text),输入任务描述、文本样例和Y,直接输出X,作为训练语料再去精调模型 。如果把该方法用做数据增强,可以在SuperGLUE上提升近1个点:

效果还是很硬的。有意思的是,这篇文章的方法在去年年底(2020.12.20)就有了,当时是第一个在SuperGLUE上超越人类的方法,但不知为什幺最近(2021.9.19)才发出来(可能圣诞节去休假了?)。

 

题目:Towards Zero-Label Language Learning
地址:https://arxiv.org/abs/2109.09193

原理

 

作者的motivation主要是把大模型生成和预测解耦。虽然完形填空or语言模型的预测方式已经被证明有效,但 作者认为Prompt的效果主要是因为X和Y再训练语料中有共现,而且在真实语料里,Y经常在X前面,所以Prompt的预测模版会导致训练和生成的不一致,是次优解 。

 

所以作者采用Y->X的方式,把大模型的知识拿到之后再去训练下游模型。

 

这篇文章的方法还是挺优雅的,输入由三部分构成:

 

 

    1. 任务描述:很短的一句话,比如「Yelp Review」

 

    1. 文本样例:这个样例也是没有label的,比如分类任务,就输入一些待分类的文本,论文里是32个。而文本对任务就输入一些文本对,不给标签或者说unknown

 

    1. Label:也是文字描述,用来指导模型的输出

 

 

举个简单的例子,比如你是一个模型,我和你说:咱们来做一个情感分类任务,输入的句子可以是「这家店的火锅真香」、「昨天分手了,想哭」,请问还有什幺表达高兴的句子?

比较有意思的是输入样例这个点,完全没有标签,却能指导模型,说明模型里真是有不少东西。而且输入样例个数K对效果的影响还挺大:

效果

 

真正用到下游精调的时候,作者还是稍微清洗了下数据,采用NLA(Noisy Label Annealing)方法,把精调模型预测结果和label差距太大的删掉。效果提升了0.2-0.8左右。

 

最终在T5-XXL单模型上超越了BERT系列的模型:

而且比Prompt-tuning的效果也更好,下图是Prompt-tuning的效果截图(不过ensemble后难分伯仲):

总结

 

这篇文章的主要贡献是验证了 在完全无监督的情况下,用大模型生成训练语料的可行性 。这样的好处是有了训练语料后,对大模型的依赖就停止了,我可以再训练一个更小的模型保证线上速度。同时这又跟蒸馏有点像,只不过之前的蒸馏都是学习teacher的隐层分布,而UDG直接把知识拿出来再去学习, 可解释性和可控性更强 。

 

卷到现在,大模型的应用方式越来越可控且多样了,可以直接用它做下游任务,也可以把它的知识拿出来学习。

 

那我们再进一步想,是不是通过Prompt、Instruction得到的Y和输入X也可以作为训练数据?而且Instruction的结果可能更加准确(做判别比做生成容易),兜兜转转又回到了知识蒸馏上?

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注