欢迎大家来到预训练语言模型的专题系列分享,本篇推送是该专题系列的第三篇。在前两篇推送[萌芽时代],[风起云涌]中,我们分享了该领域的奠基文章以及声名鹊起却生不逢时的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. 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

推荐阅读

  • 从文本分类来看图卷积神经网络

  • Kaggle宠物收养比赛亚军复盘

  • Kaggle TensorFlow 2.0 Question Answering 16名复盘

  • [预训练语言模型的前世今生] 风起云涌

  • 问答机器人2.0!文档问答产品大PK

[预训练语言模型专题] 十分钟了解文本分类通用训练技巧相关推荐

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

    前言 欢迎大家来到预训练语言模型的专题系列分享,本篇推送是该专题系列的第三篇.在前两篇推送[萌芽时代],[风起云涌]中,我们分享了该领域的奠基文章以及声名鹊起却生不逢时的ELMo模型,本期我们带来的文 ...

  2. [预训练语言模型专题] 银色独角兽GPT家族

    本文为预训练语言模型专题系列第四篇 前期回顾:[萌芽时代].[风起云涌].[文本分类通用训练技巧] 感谢清华大学自然语言处理实验室对预训练语言模型架构的梳理,我们将沿此脉络前行,探索预训练语言模型的前 ...

  3. 训练dnn_[预训练语言模型专题] MT-DNN(KD) : 预训练、多任务、知识蒸馏的结合

    本文为预训练语言模型专题系列第八篇 快速传送门 1-4:[萌芽时代].[风起云涌].[文本分类通用技巧].[GPT家族] 5-7:[BERT来临].[浅析BERT代码].[ERNIE合集] 感谢清华大 ...

  4. 训练dnn_[预训练语言模型专题] MTDNN(KD) : 预训练、多任务、知识蒸馏的结合

    本文为预训练语言模型专题系列第八篇 快速传送门  1-4:[萌芽时代].[风起云涌].[文本分类通用技巧] . [GPT家族]5-7:[BERT来临].[浅析BERT代码].[ERNIE合集]感谢清华 ...

  5. [预训练语言模型专题] MT-DNN(KD) : 预训练、多任务、知识蒸馏的结合

    本文为预训练语言模型专题系列第八篇 快速传送门   1-4:[萌芽时代].[风起云涌].[文本分类通用技巧] . [GPT家族] 5-7:[BERT来临].[浅析BERT代码].[ERNIE合集] 感 ...

  6. 【文本分类】基于预训练语言模型的BERT-CNN多层级专利分类研究

    ·阅读摘要:   本文利用BERT的预训练数据,结合CNN,应用于专利分类.由于专利的特性,本文还提出使用多层级方法来增强模型.(文章发表在<中文信息学报>,核心期刊) ·参考文献:    ...

  7. 用迁移学习创造的通用语言模型ULMFiT,达到了文本分类的最佳水平

    https://www.jqr.com/article/000225 这篇文章的目的是帮助新手和外行人更好地了解我们新论文,我们的论文展示了如何用更少的数据自动将文本分类,同时精确度还比原来的方法高. ...

  8. 系统学习NLP(十九)--文本分类之FastText

    转自:https://blog.csdn.net/sinat_26917383/article/details/54850933 FastText是Facebook开发的一款快速文本分类器,提供简单而 ...

  9. NLP-分类模型-2016-文本分类:FastText【使用CBOW的模型结构;作用:①文本分类、②训练词向量、③词向量模型迁移(直接拿FastText官方已训练好的词向量来使用)】【基于子词训练】

    <原始论文:Bag of Tricks for Efficient Text Classification> <原始论文:Enriching Word Vectors with Su ...

最新文章

  1. 测试打桩_DNF:CEO实测旭旭宝宝红眼,打桩高达2494E,伤害超越狂人剑魂
  2. 【李开复】从优秀到卓越 (二)
  3. 单机mysql能支撑起10w的qps_高并发redis - 读写分离支撑qps10w+
  4. python小车行驶路线图_基于opencv-Python小车循线学习笔记
  5. 电脑数据存储工具----光盘驱动器
  6. ffmpeg h265编码_基于ffmpeg库mp4编码记录。
  7. Java研发知识图谱
  8. Netty端口被占用问题
  9. CS安装卸载测试总结
  10. android usb挂载分析---vold处理内核消息
  11. 中信银行Java笔试题库,手撕面试官
  12. ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  13. AVI文件在opencore框架下的解析
  14. 12级计算机动画制作专业,计算机专业技术12级是什么意思?
  15. 12306崩了,90%的人都用过这三款抢票工具
  16. 三星970PRO用于高速采集存储系统
  17. 如何压缩mp4视频大小
  18. Android学习方向
  19. 思维导图SimpleMind mac版
  20. 面试知识点梳理二:常见范数最小二乘

热门文章

  1. windows7安装minikube
  2. 滚动到界面,元素缓慢滑出(jquery / css)
  3. android 动画多次使用,Android动画使用(二)——补间(View)动画
  4. matlab app designer夫琅禾费单缝衍射、光栅衍射仿真
  5. app用html传数据,使用HTML5开发App(三)
  6. 解析中国电子学会:全国青少年软件编程(Scratch)一级2019考试试卷!
  7. 风险平价组合(risk parity)理论与实践
  8. 怎么把文字转换成语音?文字转语音操作技巧分享
  9. Three.js基础入门系列(九)--导入3D模型
  10. 游戏开发中的人工智能(十三):不确定状态下的决策:贝叶斯技术