PTM|乘风破浪的 PTM,深度解读预训练模型的进展( 十 )


这就是传统两阶段模式中的第一阶段。这个阶段不仅仅追求效果好,也追求领域通用性。它的优化目标是:在尽可能多的下游任务场景中,效果都尽可能好,但不单独考虑某个特殊领域的效果如何。这个阶段,目前看总的发展趋势是:在数据质量有保证的前提下,增加数据数量,以及数据的多样性,同时提升模型复杂度,这样可以提供普遍有效的模型增强能力。很明显,这个阶段,一般只有土豪公司才能做得起,而且从趋势看,会越来越如此。将来的发展模式可能是,超级土豪公司不断优化这个模型,然后放出来供大家用,有能力做这个事情的人,应该会越来越少。
第二个阶段:领域预训练
在第一阶段训练好的通用预训练模型基础上,利用不同领域的自由文本,构建多个、不同领域的领域预训练模型。比如我们可以分别收集计算机领域、生物领域、电商领域… 等等,多个不同领域的无标注自由文本数据。在第一阶段通用模型基础上,分别用各个领域数据,再分别做一次预训练,这样我们就得到了适合解决各个不同领域的预训练模型:计算机领域、生物领域、电商领域….. 等等多个不同的预训练模型。下游任务可以根据自己任务的领域,选择适配性好的领域预训练模型来使用。
这个阶段的预训练模型,在训练的时候,有个独特的问题需要解决:灾难遗忘问题。所谓"灾难遗忘",就是说,当你用领域数据进行预训练的时候,因为会调整第一阶段预训练模型的参数,这种偏向领域性的参数调整,可能会导致第一阶段模型学好的参数被改写,这意味着:经过第二阶段预训练,第一阶段预训练模型里学会的很多通用语言知识,可能会被冲掉。灾难遗忘就是这个意思。灾难遗忘问题,对于预训练模型,尤其是领域预训练模型来说,是个很关键也很重要的问题,目前也有一些解决方案,限于篇幅,这里就不展开了。
这个阶段的预训练,因为数据量相比第一阶段会小很多,所以其实中农公司甚至贫农公司也能做得起,不存在土豪门槛,大家应该都能做。当然,一般我们只做跟自己手头任务相关的领域的预训练模型。如果你想做很多领域的预训练模型,那估计也要备足银行卡。估计后续也会有土豪公司做好很多不同领域的预训练模型,供大家个性化适配使用,虽说目前还没有,但是推断起来,这是个大概率会发生的事件。
第三个阶段:任务预训练
在前两个预训练模型基础上,比如从第二个阶段里面的多个不同的领域预训练模型中,选择和手头任务适配的那个领域预训练模型,在这个模型基础上,用手头数据,抛掉数据标签,再做一次预训练,无论手上任务数据有多少。比如手上任务是计算机领域的,那么从第二阶段的多个领域模型里面,选择计算机领域适配过的预训练模型,在这个模型基础上进行一次任务级别的预训练。这样应该能明显提升任务效果。
第四阶段:任务 Fine-tuning
这是传统两阶段的第二阶段,做法一样,没什么好讲的。
当然,如果你手上的任务没有那么强的领域性,可以跳过第二阶段,也就是那个领域预训练模型阶段,走剩余的三阶段模式即可,无论如何,任务预训练都是值得做的一个事情。
聚沙成塔:如何建造强大的预训练模型
上文从不同角度或维度,总结了预训练模型某个方面的一些结论,我们综合起来看一下。不论出于什么目的,打榜也好,把手头应用做得更出色也好,如果我们综合各个维度的现有信息,那么,在当前技术水准下,如何构造强大的预训练模型,貌似是可以得出相对明晰结论的。因为 NLP 里面既有语言理解类任务,也有语言生成类任务,两者差异较大,所以我们分头来看。
 PTM|乘风破浪的 PTM,深度解读预训练模型的进展
文章图片
对于语言理解类任务,我假设你的任务不是领域性特别强那种类型的,建议采取如下技术方案:使用三阶段模型:通用预训练 + 任务预训练 + 任务 Fine-tuning。在做完第一阶段预训练后,用手头任务数据,抛掉标签,再做一次任务预训练,然后任务 Fine-tuning。
模型结构建议采取 Encoder+Decoder 结构,或者 Encoder-AE 结构;预训练任务配置两个:独立生成 Span 类语言模型及 SOP 句子任务;在质量优先的前提下,增加预训练数据的数量;比较关键的一点是,一定要增加模型容量:可以纵向增加 Transformer Block 层深,或者横向调大 Transformer 相应位置可配置参数大小。当然,如果你不差钱,两个可以一起上。另外,要使得模型得到充分训练,就是说增大训练过程中的 Batch Size 和训练步长。
对于语言生成类任务,建议采取如下技术方案:
使用两阶段模型:通用预训练 + 任务 Fine-tuning。模型结构建议采取 Encoder+Decoder 结构,或者 Decoder-AR 结构;预训练任务采用独立生成 Span 类语言模型;在质量优先的前提下,增加预训练数据的数量;同样,比较关键的一点是,一定要增加模型容量:可以纵向增加 Transformer Block 层深,或者横向调大 Transformer 相应位置可配置参数大小。当然,如果你不差钱,两个可以一起上。另外,也要使得模型得到充分训练,就是说增大训练过程中的 Batch Size 和训练步长。
相信采取上述技术方案,你能在打榜过程中获得很好的名次,或者在实际工作中能比较快地完成自己的 KPI 或 OKR。当然,如果是走落地应用的路子,关于知识蒸馏等一系列如何将模型做小这方面,记得要多花点功夫。


推荐阅读