阅读论文:NLP From Scratch Without Large-Scale Pretraining: A Simple and Efficient Framework,所做笔记,仅供参考。
论文题目:NLP From Scratch Without Large-Scale Pretraining: A Simple and Efficient Framework
论文地址:https://arxiv.org/abs/2111.04130
1. 主要内容
当前自然语言处理领域中使用模型主要走的还是 “预训练 + 微调” 路线:绝大多数使用者们拿到的都是别人预训练好的、带参数的语言模型,然后在各种任务上使用这些预训练模型,针对不同的任务做相应的微调。一个大型语言模型的预训练过程需要大量训练语料和算力,其成本消耗是巨大的,只有少数机构可以做到。本文提出了一种可以大幅度降低预训练成本、且从零开始预训练模型的方法,这为大部分研究者提供了对大型语言模型的架构、损失函数、算法等进行进一步研究的机会。
关于 “预训练 + 微调” 的进一步理解可参考:从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史
个人认为写的非常好,小白也读得懂,并理解得会更透彻。
2. NLP中提高预训练效率的方法
- 基于彩票假设和神经网络结构搜索,尝试确定语言模型预训练的有效神经网络结构。这是从修改神经网络结构角度出发,可以减少50%-70%的计算费用。
○ Earlybert: Efficient bert training via early-bird lottery tickets. 2021
○ Primer: Searching for efficient transformers for language modeling. 2021 - 将人工设计的机制引入语言模型的预训练过程,如对抗性训练、内容和位置的解表示(将内容和位置的表示分开)。这是从人工因素角度出发,可以减少50%-75%的计算费用。
○ Electra: Pretraining text encoders as discriminators rather than generators. 2020
○ Deberta: Decoding-enhanced bert with disentangled attention. 2020 - 本文提出的 TLM(Task-driven Language Modeling) 从减少冗余的训练数据角度考虑,提高预训练效率。
○ 启发来源:人类可以以有限的时间和精力高效掌握某种技能,这整个过程并不需要掌握所有可能的知识和信息,而是只需要对核心的部分有针对性地学习。比如高中学生考历史的时候,并不需要太多生物学科的知识,同理,语言模型在做新闻分类时,可能也不太需要文献学科分类和自然语言推理等任务的知识。
3. 本文方法
3.1 TLM: Task-Driven Language Modeling
Task-Driven Language Modeling:任务驱动的语言模型。
传统方法(左图):在大型通用语料库上使用预训练任务训练语言模型;然后把模型的编码器拿到目标任务上使用。
本文方法(右图):分为两个部分
- 数据召回:使用任务数据(task data)作为查询从通用语料库检索相似数据。
○ T:内部资料。即在 task data 中的数据样本。
○ D:通用语料库。
○ 对于每一个T中的数据 xi,在D中选取前K个最相似的文件,组成小数据集 Si。
○ S:外部资料。即所有 Si 的并集。
○ 召回算法:BM25。BM25 是基于稀疏特征的召回算法,密集召回算法可能更好,但是计算成本和时间消耗大,此处应该根据需要加以平衡。
○ 对于长文本任务,先提取关键字,再使用关键字作为queries进行召回。而不是使用整个长文本作为query。
- 联合训练:整体损失函数如上式所述,Lmlm(x) 是 BERT 中 MLM 预训练任务的 loss。Ltask(f(x),y) 是特定任务的 loss。包括两个阶段。
○ 在第一阶段,使用全部内部数据与ρ1批外部数据组成一个batch进行小批量随机梯度下降,其中ρ1、ρ2设为整数,分别表示使用ρ1个batch的外部数据和ρ2个batch的内部数据计算MLM预训练任务的Loss。
○ 在第二阶段,将ρ1和ρ2都设置为0,仅使用内部数据针对任务目标进行微调模型。
3.2 TLM 和 PLM 的比较
TLM:Task-Driven Language Modeling,任务驱动的语言模型。
PLM:Pretrained language models,传统的预训练语言模型。
3.3 TLM 的特点
- 民主化:大型语言模型的预训练阶段成本太高,只有少数机构可以做到,其他研究者只能在后续的微调阶段下功夫。TLM 大幅度降低了预训练语言模型的成本,更多机构可以从头训练模型,使得更多研究者对大型语言模型的架构、损失函数、算法等进行进一步研究成为可能。
- 高效性:TLM的每个任务上的FLOPs消耗显著少于PLM。TLM和PLM分别适用不同情况——当面临少数目标任务或者领域特定的稀有任务(例如,NLP科研工作开展过程对少数数据集进行实验和研究;工业界面临极其特殊领域问题的解决),TLM是非常高效的选择;当需要一次性解决大量相似且常见任务时(例如,公司需要构建统一平台为多方提供相似服务),PLM的可重复利用使其仍然具备优势。
- 灵活性:由于TLM是任务驱动的,所以有很大程度的灵活性。研究人员可以使用自定义策略进行标记化、序列长度、数据表示、超参数调优等,这可能会提高性能或效率。
- 通用性:PLM学习任务无关的一般性表示,即强调通用性,而TLM通过学习任务相关的表示一定程度牺牲通用性换取更高的效率。当然,也可以将PLM和TLM结合从而实现通用性和效率之间更好的权衡。
4. 实验
4.1 预训练方法对比
实验结果相差不多,但训练集数据量和训练花费的计算量均比原来的模型减少1~2个数量级。
4.2 消融分析
4.2.1 是否使用召回算法对结果的影响
random表示随机从通用语料库中抽取相同数量的训练语料。此处对内部数据资源充足的任务(如IMDB)影响不大。
4.2.2 选取前K个相似文档对结果的影响
对于内部数据资源充足的任务(如AGNews),K值不需要太大。选取外部数据只是为了训练MLM效果,如果内部已经有足够的数据训练,也可以用于训练MLM,自然不需要太多外部数据。对于内部数据资源不是很多的任务(如SciERC和ChemProt),外部数据自然多点更好,因为此时仅用不充足的内部数据不足以训练出一个好的MLM模型。
4.2.3 超参数ρ1对结果的影响
ρ1表示使用ρ1个batch的外部数据计算MLM任务的Loss。对于内部数据资源充足的任务(如Helpfulness),ρ1不用太大,即不需要太多外部数据帮助训练MLM,因为内部数据已经足够。如果使用内部数据已经可以得到一个差不多的MLM,则再使用少量外部数据进一步优化就可以了,如果此时还使用大量外部数据的话,可能会增强MLM模型的泛化性能,但对于特定任务并没有额外的好处,因为得到的预训练模型之后是要在特定任务的语料上使用的,训练时使用更多的内部数据更有助于提高后续模型在特定任务上的embedding效果。而对于内部数据资源不够多的任务(如SciERC和ChemProt),其内部数据还不能训练出一个好的MLM模型,此时就要增大ρ1,也就是使用更多的外部数据去训练出一个更好的MLM模型,以提高模型在特定语料上的embedding效果。
4.2.4 超参数ρ2对结果的影响
4.2.5 第二个阶段:只针对特定任务进行预训练对结果的影响
没有第二个阶段的话,预训练出来的模型结果是有所下降的,此处说明了既然最后模型是要使用在特定任务上的,那预训练过程还是有必要使用特定任务预训练一下。