Don't stop pretraining,继续预训练!
作者 | 周俊贤
整理 | 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,继续预训练!相关推荐
- TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究
TGRS2022/遥感:An Empirical Study of Remote Sensing Pretraining遥感预训练的实证研究 0.摘要 1.概述 2.相关工作 2.1.空中场景识别 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 ...
- 【预训练视觉-语言模型文献阅读】VL-BERT: PRE-TRAINING OF GENERIC VISUAL- LINGUISTIC REPRESENTATIONS(ICLR 2020)
[预训练视觉-语言模型文献阅读]VL-BERT: PRE-TRAINING OF GENERIC VISUAL- LINGUISTIC REPRESENTATIONS(ICLR 2020) 文章目录 ...
- 面向单目深度估计的基于几何的预训练方式 -- Geometric Pretraining for Monocular Depth Estimation
一些前提知识 Monocular Depth Estimation:单目深度估计,从单张图片中去预测每个像素点具体的深度,相当于从二维图像推测出三维空间. ImageNet-Pretraining:基 ...
- <<多模态预训练>>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 ...
- MedicalGPT:基于LLaMA-13B的中英医疗问答模型(LoRA)、实现包括二次预训练、有监督微调、奖励建模、强化学习训练[LLM:含Ziya-LLaMA]。
项目设计集合(人工智能方向):助力新人快速实战掌握技能.自主完成项目设计升级,提升自身的硬实力(不仅限NLP.知识图谱.计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户 ...
- Cross-modal Pretraining in BERT(跨模态预训练)
BERT以及BERT后时代在NLP各项任务上都是强势刷榜,多模态领域也不遑多让-仅在2019 年就有8+篇的跨模态预训练的论文挂到了arxiv上-上图是多篇跨模态论文中比较稍迟的VL-BERT论文中的 ...
- 笔记:文澜:桥接视觉和语言的大规模多模态预训练 WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training
笔记:WenLan: Bridging Vision and Language by Large-Scale Multi-Modal Pre-Training 笔记:文澜:桥接视觉和语言的大规模的多模 ...
- 论文笔记 | code pretraining(代码预训练系列)
文章目录 Pre-trained contextual embedding of source code CodeBERT: A Pre-trained model for programming a ...
最新文章
- 【青少年编程】黄羽恒:我要背单词
- windows下运行多个tomcat的配置
- windows下安装RabbitMQ消息服务器 + 读写队列
- SpringBoot RabbitMQ 集成 七 延迟队列
- Android下ListView的分页(9.6)
- xml语言与html,XML与HTML的分析处理
- Arduino录音时间延长_如何规划好自己的时间让它产生更大价值?
- struts2.1笔记02:servlet简介
- postgresql interval 字段拼接
- 灵活的Zend Framework之使用自定义的Frontcontroller
- TYVJ P1022 进制转换 Label:坑
- js三元运算符 js运算符优先级
- 第16章 起舞不落幕——与纹理映射的华丽邂逅
- oracle发生20001,Oracle10g重建EM 报ORA-20001: SYSMAN already exists
- 死神来了~~~~~~~~
- tampermonkey脚本php,Tampermonkey挂机脚本常用代码片段
- PS制作六边形蜂窝状banner人物海报
- 图片翻译成中文其实很简单,只需这几步
- 聚类算法K-Means K-Medoids GMM Spectral clustering,Ncut
- 速卖通重点国家市场俄罗斯市场分析平台热销产品推荐