作者 | 周俊贤

整理 | 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

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定要备注信息才能通过)

END -

GPT Plus Money!B O O M

2021-10-09

召回 粗排 精排,如何各司其职?

2021-10-06

博士延期的我,女友已经是副教授了

2021-10-02

Awesome Efficient PLM Papers

2021-09-29

Don't stop pretraining,继续预训练!相关推荐

  1. TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究

    TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究 0.摘要 1.概述 2.相关工作 2.1.空中场景识别 2 ...

  2. <<多模态预训练—泛读>>2022:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Unders

    目录 问题与方案: 一.Introduction 二.Related Work 2.1.Vision-language Pre-training 2.2.Knowledge Distillation ...

  3. 【预训练视觉-语言模型文献阅读】VL-BERT: PRE-TRAINING OF GENERIC VISUAL- LINGUISTIC REPRESENTATIONS(ICLR 2020)

    [预训练视觉-语言模型文献阅读]VL-BERT: PRE-TRAINING OF GENERIC VISUAL- LINGUISTIC REPRESENTATIONS(ICLR 2020) 文章目录 ...

  4. 面向单目深度估计的基于几何的预训练方式 -- Geometric Pretraining for Monocular Depth Estimation

    一些前提知识 Monocular Depth Estimation:单目深度估计,从单张图片中去预测每个像素点具体的深度,相当于从二维图像推测出三维空间. ImageNet-Pretraining:基 ...

  5. <<多模态预训练>>2022:CoCa: Contrastive Captioners are Image-Text Foundation Models

    目录 Abstract 1.Introduction 2.Related Work 3.Approach 3.1.Natural Language Supervision 3.2.Contrastiv ...

  6. MedicalGPT:基于LLaMA-13B的中英医疗问答模型(LoRA)、实现包括二次预训练、有监督微调、奖励建模、强化学习训练[LLM:含Ziya-LLaMA]。

    项目设计集合(人工智能方向):助力新人快速实战掌握技能.自主完成项目设计升级,提升自身的硬实力(不仅限NLP.知识图谱.计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户 ...

  7. Cross-modal Pretraining in BERT(跨模态预训练)

    BERT以及BERT后时代在NLP各项任务上都是强势刷榜,多模态领域也不遑多让-仅在2019 年就有8+篇的跨模态预训练的论文挂到了arxiv上-上图是多篇跨模态论文中比较稍迟的VL-BERT论文中的 ...

  8. 笔记:文澜:桥接视觉和语言的大规模多模态预训练 WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training

    笔记:WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training 笔记:文澜:桥接视觉和语言的大规模的多模 ...

  9. 论文笔记 | code pretraining(代码预训练系列)

    文章目录 Pre-trained contextual embedding of source code CodeBERT: A Pre-trained model for programming a ...

最新文章

  1. 【青少年编程】黄羽恒:我要背单词
  2. windows下运行多个tomcat的配置
  3. windows下安装RabbitMQ消息服务器 + 读写队列
  4. SpringBoot RabbitMQ 集成 七 延迟队列
  5. Android下ListView的分页(9.6)
  6. xml语言与html,XML与HTML的分析处理
  7. Arduino录音时间延长_如何规划好自己的时间让它产生更大价值?
  8. struts2.1笔记02:servlet简介
  9. postgresql interval 字段拼接
  10. 灵活的Zend Framework之使用自定义的Frontcontroller
  11. TYVJ P1022 进制转换 Label:坑
  12. js三元运算符 js运算符优先级
  13. 第16章 起舞不落幕——与纹理映射的华丽邂逅
  14. oracle发生20001,Oracle10g重建EM 报ORA-20001: SYSMAN already exists
  15. 死神来了~~~~~~~~
  16. tampermonkey脚本php,Tampermonkey挂机脚本常用代码片段
  17. PS制作六边形蜂窝状banner人物海报
  18. 图片翻译成中文其实很简单,只需这几步
  19. 聚类算法K-Means K-Medoids GMM Spectral clustering,Ncut
  20. 速卖通重点国家市场俄罗斯市场分析平台热销产品推荐

热门文章

  1. SAP License:请教一个SD和FM基金预算集成的问题
  2. Gzip,BZip2,Lzo,Snappy比较
  3. Kaldi nnet3的fastlstm与标准LSTM
  4. [BJOI2017]树的难题 点分治,线段树合并
  5. JAVA导入导出Excel
  6. JDK动态代理的实现原理
  7. OC中给我们提供的一个技术:谓词(NSPredicate).note
  8. preg_replace的一些细节
  9. 伟大骡子的一生和性能测试
  10. 简便无刷新文件上传系统