前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Don't stop pretraining,继续预训练!

Don't stop pretraining,继续预训练!

作者头像
NewBeeNLP
发布2021-10-20 10:00:25
1.5K0
发布2021-10-20 10:00:25
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | 周俊贤 整理 | NewBeeNLP

大家在用BERT等预训练模型的时候,是否有根据具体的下游任务,再进行领域的预训练?可能很多朋友是直接进行fine tuning的,毕竟增加多预训练这一步略显麻烦。

今天分享的这篇论文,用更多的实验,来论证,

  • 适应领域的预训练(DAP),无论在低资源和高资源的情况下,都能提高模型在相应领域具体任务的性能;
  • 适应任务的预训练(TAP),虽然语料较少,但缺能十分「高效」地提高模型在具体任务的性能,应该尽可能找更多任务相关的语料继续进行预训练;
  • 提高一种从领域语料采样任务语料的方法;
  • 先进行DAP,再进行TAP能极大地提高模型在具体任务的性能。

  • 论文全称及链接:《Don't Stop Pretraining: Adapt Language Models to Domains and Tasks》
  • 项目地址:https://github.com/allenai/dont-stop-pretraining

具体的,作者选择了四个领域,包括生物医学(BIOMED)、计算机科学(CS)、新闻(NEWS)和评论(REVIEWS)。

每个领域各选择了两个分类任务。如下图所示

适应领域的预训练(DAP)

怎么定义领域语料?

举个例子,假如我们在做一个提取蛋白质和化学物质的实体抽取任务,那可以定义相关领域为医学,则医学相关的语料都是该领域的语料。

实验中,作者采用的是「RoBERTa模型继续针对4个领域语料继续进行预训练,得到4个领域的预训练模型」

首先,怎么衡量这四个领域语料和原生RoBERTa的预训练语料有多大差别,作者采用了研究不同领域语料的前10K个高频单词,如下图所示

从图可以,看到RoBERTa的预训练语料和NEWS、REVIEWS语料重合度比较高,和CS和BIOMED的重合度比较低。

实验很简单,就是各任务用各领域的语料再继续预训练一定步数后,再进行fine tuning,实验结果如下图所示,DAPT就是用RoBERTa在各个领域的语料继续预训练后,再针对该领域的具体任务进行fine tuning,可以看到DAPT的结果都要比直接用RoBERTa进行fine tuning效果要好。而且当RoBERTa的训练语料和领域的语料分布越大的时候,DAPT带来的提升更加的明显。

为了论证,「效果的提升并非是单单预训练模型时用了更多的数据」,作者还做多了一种实验,即用「非该任务的预训练模型进行fine tuning」,如对CS领域继续进行预训练,再应用于NEWS领域的下游任务,可以看到这样做,比原生的RoBERTa直接进行fine funing效果多要差。

因此,作者的结论是,「适应领域的预训练能提高下游任务的性能,千万不能用与任务领域无关的语料!」

任务领域的预训练(TAP)

通常来说,具体的下游任务相对于领域,是更细的分类,如论文里面的 CHEMPROT任务 是提取化学物质和蛋白质的关系,很明显,是属于生物医学领域里面的细分领域。

很自然的想法,「用任务相关的语料继续进行预训练,相对于用领域的语料继续预训练,能更直接地提升模型的效果」

具体的,实验直接用任务的有标注样本进行TAP,通常情况下,任务语料比领域语料要少得多,例如一个分类比赛,可能任务领域的数据就是公布的训练集和测试机的几千条样本。

实验结果如下图所示,TAPA都能增强模型在具体任务中的性能。DAPT+TAPT指先对领域语料继续预训练,再对任务语料继续预训练,是效果最佳的。

除此之外,作者还做了Transfer-TAPT的实验,即对同一领域不同任务的语料继续预训练,如下图左上,RCT和CHEMPROT都是BIOMED领域的任务,模型对RCT语料进行TAPA,再应用到CHEMPROT中,效果比对CHEMPROT进行TAPA,再直接应用到CHEMPROT任务中,效果足足下降了2.2个点。因此也论证了,继续对任务语料进行预训练十分重要。

从领域语料中挑选更多的任务语料

Human Curated-TAPA

有时候,我们能得到有标注的任务数据,还能得到无标注的大量任务数据。如上图的HYPERPARITISAN和IMDB除了有标注labeled的训练数据外,还有无标注unlabeled的训练数据,无论是否有标注,在预训练阶段,都成为任务语料,称作Curated-TAPA。

很明显的,越多的任务语料进行任务领域的预训练,应用到下游任务的效果越好,具体可看Curated-TAPA都比TAPA效果要好,因为Curated-TAPA比TAPA的任务语料要更多。

Automated Data Selection for TAPT

通常领域语料是很大的,例如论文里的四个领域语料,都超过10G的大小。而任务语料要小得多。「而使用任务的预训练比适应任务的预训练提升效果要直接得多,就是性价比更高」,例如在具体任务中需要提高性能5个点,可能需要领域语料20G,而任务语料达到同样的提升,可能只要几百M的任务语料。

所以一个自然的想法是,「能否从领域语料中挑选任务语料」

具体的,论文提出了一种词袋模型的最近邻算法,思想非常简单,对于任务领域的每条样本,用词袋模型向量化表示,找领域语料中与其距离最近的k个样本,也纳进任务领域的预训练中,如下图所示

实验结果如下,

  • RAND-TAPA就是随机从领域语料中采样出任务语料;
  • 50NN-TAPA就是用k-邻近算法,且k取为50,即一条任务样本,从领域语料中挑选与它最接近的50个样本作为新加入的任务样本。
计算效率

任务领域的预训练相对于适应领域的预训练,「性价比更高」

如下图,DAPT+TAPT的f1值达到83.0,但足足用了47G的语料,而Curated-TAPA只用了27MB的语料,就能超过DAPT+TAPT。

当然,有时候我们无法得到足够的任务语料,这时候,我们可以采用下面的k-最近邻的算法,从领域语料中采用任务语料,不失为性价比高的方法。

最后总结,论文里总结实验用过的方法

个人实验

这里拿疫情期间网民情绪识别这个比赛的数据来进行实验

  • 比赛链接:https://www.datafountain.cn/competitions/423
  • 比赛任务:根据疫情期间,微博网民发表的微博内容,判断该条内容是负面、中立、正面。

比赛数据:训练集一共有100K条标注数据,还有900K条非标注数据,明显的,这1000K条数据属于任务领域的数据,这里的100K就是TAPA数据,100K+900K=1000K就是Curated-TAPA数据。

用哈工大和科大讯飞发表的rbt3作为基础模型,用1000K条样本继续进行Curated-TAPA。具体的训练方法,可以参考这个教程https://github.com/zhusleep/pytorch_chinese_lm_pretrain以及huggingface transformers的example。

完成任务领域的预训练后,把100K有标注数据分成80K条训练数据、10K条验证数据、10K条测试数据。引入早停策略,假如模型在验证集连续两个epoch的f1值都没有下降,就停止训练,用最佳模型对测试集进行测试。挑选五个随机种子,实验结果如图所示,可以看到,效果能有少量的提升。

随机种子1

随机种子2

随机种子3

随机种子4

随机种子5

平均

rbt3

0.7486

0.7493

0.7487

0.7529

0.7425

0.7484

Curated-TAPA

0.7502

0.7525

0.7562

0.7503

0.7522

0.75228

- END -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者 | 周俊贤 整理 | NewBeeNLP
  • 适应领域的预训练(DAP)
  • 任务领域的预训练(TAP)
  • 从领域语料中挑选更多的任务语料
    • Human Curated-TAPA
      • Automated Data Selection for TAPT
        • 计算效率
        • 个人实验
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档