[PLM专题] 十分钟了解文本分类通用训练技巧

前言

欢迎大家来到 预训练语言模型 的专题系列分享,本篇推送是该专题系列的第三篇。在前两篇推送[萌芽时代],[风起云涌]中,我们分享了该领域的奠基文章以及声名鹊起却生不逢时的ELMo模型,本期我们带来的文章将会让大家了解文本分类的一些通用技巧,希望大家看完后炼丹 技术都能更上一层楼!

同时感谢清华大学自然语言处理实验室整理的体系图,我们将 沿此脉络前行 ,探索预训练语言模型的前沿技术,本期的第一篇文章处于图中绿色框内,另一篇为课外阅读。红色框内的论文在前几期中介绍,大家有兴趣的可以前去一看。

Universal Language Model Fine-tuning for Text Classification (2018)

前几期介绍的大多是模型或结构,而这篇文章由 Jeremy Howard 和 Sebastian Ruder 发表于2018年,介绍的是文本分类中语言模型的 通用训练技巧 。其中的一些技巧,吴老师和我在kaggle 的jigsaw 文本分类比赛中也有应用,并在比赛中拿到了金牌。在未来的推送中,可能还会有详细介绍。

这篇文章认为,目前语言模型在finetune时经常会过拟合到小数据集上,而且容易导致灾难性遗忘。相比于CV模型,NLP模型层数较少,所以需要更多的训练技巧来使其表现更好。而他们在本文中提出了fine-tuning 语言模型的关键技术   ULMFiT ,可以大大地提高六个文本分类任务的效果,并且用更少的数据训练就可以达到相当的效果,加强了泛化能力。

首先介绍下ULMFiT的总体框架。之前的很多论文提出的都是预训练 + finetune 两个阶段的训练,而本文提出使用 三阶段训练

  • 第一个阶段,首先在一个很庞大的通用领域无关语料上,进行语言模型的训练,以捕捉语言的通用规律

  • 第二个阶段,在特定任务的领域相关语料上,进行语言模型的finetune,来学习任务数据的特定语言特征分布

  • 第三个阶段,进行目标任务分类器的总体学习,直接学习到任务的分类目标。

文章认为上述第二个阶段很有必要。因为无论通用的语料多样性多么好,都和你目标任务的数据分布有区别。而且在比较小的特定任务数据上finetune语言模型可以很快得到收敛,成本较低。同时,这样finetune以后,即使对比较小的数据集,语言模型也能变得比较鲁棒。

ULMFiT的总体框架(来自论文)

其次,在ELMo,GPT的介绍中我们都提到过,语言模型的不同层其实能够捕捉不同级别的语义特征,比如ELMo底层LSTM更多捕捉语法和词层面的特征,而上层LSTM更多捕捉整句话的语言的特征。既然是不同类型的信息,就应该区分地去进行参数的finetune,所以文章提出了 discriminative fine-tuning ,即对不同的层使用不同的学习率去学习。因为越靠近最下层Embedding层,模型参数就会含有更多通用信息,不应随任务目标发生很大变化。所以为了降低灾难性遗忘的可能,越下层,就会用更小的学习率来学习,而上层为了让模型能够更快地学习到目标任务的独有信息,会用相对大的学习率。一般层之间的学习率会等比地变化,在这篇文章里,这个比值为2.6, 即上一层参数学习率为下一层的2.6

再者,为了让语言模型能更好地学习到特定任务相关的特征,文章使用了 Slanted triangular learning rates (SLTR) ,让模型在训练初期快速收敛到一个合适的参数区域,接着再进行细致地优化。在现在看来这就是一种warmup策略。warmup已经在神经网络模型中被广泛应用了,huggingface的transformers也有现成的函数来对warmupscheduler进行控制。

SLTR示意图(来自论文)

最后,在目标任务的直接优化过程中,文章提出了几种辅助训练技巧,其中这些我认为比较简单通用。

  • 第一个是 Concat pooling ,一般文本分类的分类器会接在语言模型最后一层LSTM或transformer之后,但是其实很多信息蕴含在之前的层或时间步中。所以将几个时间步或者几层进行concat,再接上全连接层一般会获得更好的结果。这一点在BERT论文和 我们之前比赛 中也有验证,根据实验,将BERT的后四层concat起来再接上全连接层,会得到更好的效果。

  • 第二个是 Gradual unfreezing 。一下子把模型的全部层一起训练,通用信息容易丢失,从而增加灾难性遗忘的风险。所以文章提出,可以慢慢地从最后一层开始“解冻”,因为最后一层含有最少的 "general knowledge",让它先去拟合任务目标比较合适。具体做法是第一个epoch,“解冻”最后一层进行训练(只改变了最后一层参数)。接着“解冻”倒数第二层训练(改变了最后两层参数)。直到把所有层“解冻”为止。

文章接下来的篇幅从各方面比较了文中技巧对任务的提升,我们可以大致看一下。其中, full 是指优化整个模型,last指只优化最后一层,discr指discriminative fine-tuning, sltr指slanted triangular learning rates,cos指cosine annealing schedule。可以看到,文中提到的几个技术都对误差率的下降有 明显 的效果。

不同策略下验证错误率(来自论文)

这篇文章的贡献是 深远 的,它提出了预训练语言模型比较通用的训练方法和技术。这篇文章虽然早于GPT和BERT发表,但是它的框架完全可以在后来的强大模型中提供帮助,让我们NLP的炼丹之旅轻松又愉快!

How to Fine-Tune BERT for Text Classification(2019)

本篇文章是由复旦计算机系的多位作者发表的。讨论如何在文本分类任务中对 BERT模型 进行finetune。虽然这篇文章不在体系图,但与第一篇文章在内容上比较相关,而且我们在kaggle比赛中也应用到了,所以一起在这里介绍。我们长话短说,直接来总结一下这篇文章的几个贡献点和有用的技巧。

第一个贡献是,框架相比于上篇文章进行了微调。在通过任务相关数据进行语言模型finetune后,多加了一步可选的stage: 把BERT在领域内相关的其他任务上进行 多任务的训练 ,我认为这是对于ULMFiT的补充。

BERT finetune框架(来自论文)

第二个贡献是对 长文本的处理 ,我们在之后BERT文章中将会介绍,BERT模型能一次处理的最长文本长度为512,有时我们为了降低模型运行时间和占用空间,有可能将这个长度变得更短,这时候就可能要对文本进行截断。文章的结论就是最好的截断方式既不是截头,也不是截尾,应该头尾都截一部分保留最重要信息。

长文本不同处理方式的错误率 (来自论文

第三个贡献是在任务上详细分析了BERT的 不同层 对文本分类任务的效果 。具体做法是,在某一层后直接接分类器进行分类。单层中,以最后一层的效果最好,因为文本分类是更贴近语言层面的任务。而在文章尝试的其他几种选择中,把最后四层concat或者max pooling效果最好。

不同层向量用以分类的错误率 (来自论文

第四个贡献其实是借鉴discriminative fine-tuning,进行 层间学习率的下降 。越接近底层,含有的通用信息越多,越不应该随着特定任务进行大规模的参数改变,否则有灾难性遗忘风险。在他们的尝试中,学习率2e-5,层间学习率变化因数0.95对BERT来说比较合适的。

不同学习率设置的分类错误率 (来自论文

总之,这篇文章进行了很多完备的实验,来提出和验证了在文本分类任务上,BERT的较好的finetune策略及其效果。文章验证了 :  1) 对于文本分类,BERT的最高层的效果最好 2) 使用合适的层间学习率下降策略,BERT能够克服灾难性遗忘的问题 3) 任务相关或领域内相关数据的语言模型finetune可以大大提升效果 4) 相关的多任务学习也对特定任务有提升效果 5) BERT只需少量的特定数据就可以预训练以提升任务。文章对我们训练BERT模型有很好的指导意义,以后再也不用担心炸炉啦!

未完待续

本期的论文就给大家分享到这里,感谢大家的阅读和支持,下期我们会给大家带来预训练语言模型其他的论文阅读分享,敬请大家期待!

欢迎关注晴天1号,这里有很多最新最热的论文阅读分享,有问题或建议可以在公众号下留言。

参考资料

  1. Universal Language Model Fine-tuning for Text Classification (2018)

    https://www.aclweb.org/anthology/P18-1031.pdf

  2. How to Fine-Tune BERT for Text Classification(2019)

    https://arxiv.org/pdf/1905.05583.pdf

  3. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    https://arxiv.org/pdf/1810.04805.pdf

推荐阅读

推荐阅读

AINLP年度阅读收藏清单

谈谈文本匹配和多轮检索

2021 校招算法岗, 劝退还是继续

10万元奖金语音识别赛进行中 | 自动化所博士生讲解业界主流 KALDI 基线模型

抛开模型,探究文本自动摘要的本质——ACL2019 论文佳作研读系列

鼠年春节,用 GPT-2 自动写对联和对对联

用 GPT-2 自动写诗,从五言绝句开始

征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章