查看原文
其他

前沿重器[26] | 预训练模型的领域适配问题

机智的叉烧 CS的陋室 2024-04-24

前沿重器


栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有

近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布


往期回顾

这次来聊聊预训练模型的领域适配问题。

众所周知,预训练模型在预训练阶段,是学习了海量知识的,他们看过的文章和知识可以说比我们很多人看几辈子的还要多,在很多的实验中,我们也见识到预训练模型的效果卓越。然而,预训练模型的训练是集中在广泛的开放域里,因此他对开放域有较好的效果,换言之,对特定的领域可能适配情况并不好,尤其是离得比较远的,领域比较转的,例如医学、生物之类的,这些领域确实不让模型专项学,模型很难掌握,因此,如果我们要充分发挥预训练模型的红利,确实需要很多一些方法。

这个问题其实已经有一定的研究了,今天的文章主要是围绕一篇比较经典的论文来聊的:Don't Stop Pretraining: Adapt Language Models to Domains and Tasks,但是包括但不限于文章内容吧。这篇文章看下来,虽然是一些可能大家直观上就能感受到的结论,但是经过了实验的验证,对于这个提升幅度而言我们有了一些把握,毕竟多一步训练本身是一个成本就不低的是,我们可以对最终的提升量有一个预判。

目前已经有不少文章,这里列举一下,大家有兴趣也可以去阅读:

  • https://zhuanlan.zhihu.com/p/390423277
  • https://zhuanlan.zhihu.com/p/139346185
  • https://zhuanlan.zhihu.com/p/149210123

当然了,本文聊的是预训练模型中的领域适配问题,用了预训练模型效果不好的原因很多,不局限于此,有关这方面的归因,可以看看我的另一篇文章:心法利器[47] | 为什么我的BERT不行?

从微调到进一步预训练

我们都知道,要让预训练模型整体适配具体的任务,最直接的做法就是fine-tuning(后面简称ft了,偷个懒),就是直接用训练数据来对预训练模型进行一定的调整,这种方式相信大家都已经比较熟悉,而且,这种简单的方式就已经能在很多任务下吊打早不久前的一些任务下精心设计的模型了。但这真就是极限了吗?我们是不是可以有更多的一些手段能让这把宝剑打磨地更加适合特定的一些任务呢,答案是肯定的。

DAPT

领域适配的目标,其实就是让模型能够学到这个领域的东西,这个学,有两种思路,第一种目前已经被广泛使用的,就是finetuning,他所代表的,就是直接用我们希望使用的任务来进行训练,这种方式非常简单直接,就是一步到位,直接让模型去适配到这个任务,而另一种,就是用领域内的数据进行进一步训练,训练的方式其实和预训练类似,用类似NSP、MLM的预训练任务进行进一步预训练(说实话有点奇怪,我是没看到这篇论文里提用到的预训练任务有哪些),这些能让预训练模型学到很多领域内的知识,有了这些知识的加持,效果能有进一步的提升,这种方式在论文中被称为:domain-adaptive pretraining(DAPT)。

有关这块的实验,有论文已经进行了尝试:

这个图例里有这几个信息:

  • 毫无疑问,加入DAPT和不加入DAPT,效果的提升是明显的。
  • 进一步的研究可以知道,距离开放域越远,这个优化的幅度更加明显。

从这里可以知道,如果是锦上添花,用自己领域的数据再进一步做一些训练,是有不少收益的,平时自己可以试试。

TAPT

如果没有那么多领域相关的语料,其实训练数据经过整理,也是可以作为预训练的语料的,这个同样可以进行进一步的预训练,这里称为:Task-Adaptive Pretraining,即TAPT,那么效果如何呢,看看这里:

这里可以看到,TAPT的效果相比DAPT,整体来看会差一些,但是也不绝对,不过可以看到二十,基本上也能达到和DAPT比较接近的效果了,这也就说明,直接用领域的训练样本做进一步预训练就能够得到一定程度的效果提升,这种方式也被论文成为是一种“廉价”的提升,因为这种提升需要的数据较少,相比之下算是成本较低的,性价比比较高的选择。

进一步,无论是DAPT还是TAPT,两者基本上只要有一个,就能在相比原有的finetuning要好,而如果如果是想进一步提升,可以两者都用,即DAPT+TAPT,两者结合之后能再进一步提升效果,虽然从数据上看,其实提升没有那么大(两者将结合相比分别单独两者的较大值,其实并不大),所以如非资源充足,可以不考虑使用了。

任务适配带来的影响

从上面的一系列实验可知,TAPT能让模型对该任务的适配效果更加好,然而,当我们希望在特定领域下进行通用化的时候,其实我们希望的是这种适配能在领域上得到优化,而非仅仅领域本身,出于严谨,作者还尝试对同领域但是不能同任务进行了实验,结果在这:

可以看到,TAPT虽然对自己的任务提升比较大,但是这样训练完,预训练模型对别的任务其实效果会下降的比较明显,所以这里我们能看到,模型的遗忘还是比较明显的,这算是效果上的代价。

TAPT的数据增强

上面其实已经比较完整地对领域适配任务,尤其是TAPT方案的特点,优点缺点之类的,我们也可以看到他们对最终效果所带来的收益,但问题是训练所需的数据怎么来的会是个问题,也就是“任务相关的书”,到底该怎么来,怎么抽取。论文在最后的章节非常友好地带来了两个方案:

  • 人工。最终任务的训练一般是从海量的数据中抽取得到的,而未抽取的部分,其实是可以使用的,这部分数据理论上就和真正任务的数据会很接近,因此这块数据是我们可以使用的。
  • 自动化的数据抽取。说白了就是用小数据预训练一个轻量级词袋模型,然后对任务数据用词典模型进行表征,最后用knn的方式召回一些和任务有关的句子,这些句子是有利于训练的。

这两个方案表面上是增强,其实感觉更像是筛选,尤其是后者,希望能找出一些和任务相关领域的数据来,做进一步的训练,效果上也是可以看到有一定程度的提升。

个人的小结

这篇文章并不新,内容的深度上其实也不高,但是本文的工作本人感觉还是很有意义的,其意义在于对我们的一些直观理解,这些实验能为我们提供稳定的信息支持,包括但不限于下面几个点吧:

  • 用领域和适配的语料对任务进行训练,有一定的效果提升。一般地,和开放域差距越大,提升效果越明显。
  • 使用任务适配和领域适配的数据进行进一步的训练,效果都有提升,两者结合也会有小幅提升。
  • 用任务适配的数据来训练,效果有提升但是会牺牲其他任务的效果了。
  • 用于进一步训练的数据在一定数据量下,提升数据量能对最终预测效果有收益(可以说是非常严谨了)。
  • 文章还提供了一些获取用于进一步数据的方法。

当然了,回头看过来,我们也需要进一步考虑这些问题:

  • 开放域训练的模型,只是在综合领域上综合效果不错,如果能有一些领域或者是任务适配的数据进一步预训练,效果上还能够提升。
  • 接着上面这点,我们是不是可以认为,现行的一些任务的数据集可能没有给模型提供足够的学习信息,或者是学习方式不利于预训练模型学习,而这种进一步的预训练方式,其实从标注数据层面降低了一些特定知识的学习成本的。
  • 继续接着上面这点,我感觉有一定理由可以相信,如果标注数据之类的覆盖面能再广一些,可能提升的会更加直接,这种增加进一步预训练可能是一个权衡方案而已。
  • 这种适配是会会让预训练模型在开放域效果有所下降,可能和所谓预训练模型的“遗忘”问题有关。

最后还是想补充一下,我还是感觉,预训练模型是一头比较难驯服的龙,它能在很多领域很好也很快地解决问题,但他依旧不是一个万能的钥匙,还有很多问题需要解决(例如灾难性遗忘后面我也可能会尝试探索),而当他给我们的反馈效果不佳或者说没有达到我们的预期的时候,可能还是需要综合考虑分析多个问题点。这篇论文读下来,进一步预训练能很大程度解决信息提供不足的问题(可以看看我这篇文章的讨论:心法利器[45] | 模型需要的信息提供够了吗),且预训练模型是吃这套的,无疑是解决了一个大问题。

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存