导读:今天为大家解读一篇复旦大学邱锡鹏老师课题组的研究论文《How to Fine-Tune BERT for Text Classification?》。这篇论文的主要目的在于在文本分类任务上探索不同的BERT微调方法并提供一种通用的BERT微调解决方法。这篇论文从三种路线进行了探索:(1) BERT自身的微调策略,包括长文本处理、学习率、不同层的选择等方法;(2) 目标任务内、领域内及跨领域的进一步预训练BERT;(3) 多任务学习。微调后的BERT在七个英文数据集及搜狗中文数据集上取得了当前最优的结果。作者们发布了实现代码,有兴趣的朋友也可以跑一跑实验。

点评:这篇论文从实战上为大家提供了宝贵的BERT微调经验及方法论,当需要应用BERT到具体的现实任务上时,可以参照这篇论文提供的调参路线进行优化。推荐大家读一读这篇论文。

研究背景及目的

大量任务表明在大规模语料库上预训练的模型对于文本分类及其他NLP任务的性能提升非常有帮助。其中一种预训练模型是词向量,如word2vec、GloVe等静态词向量以及CoVe、ELMo等语境化词向量。另一种预训练模型是句子级别上的向量化表示,如ULMFiT。其他的还有OpenAI GPT及BERT。

虽然BERT在许多自然语言理解任务上取得了惊人的成绩,但是它的潜力还尚未被完全探索出来。很少有研究来进一步改进BERT在目标任务上的性能。这篇论文的主要目的就是通过探索多种方式最大化地利用BERT来增强其在文本分类任务上的性能。

这篇论文的主要贡献在于:

  • 提出了一种通用的微调预训练BERT模型的解决方法,有三个步骤:(1)进一步在任务内训练集或领域内数据集上预训练BERT;(2)在有多个相关任务的情况下用多任务学习方法微调BERT;(3)在目标任务上微调BERT
  • 探索了在目标任务上BERT的微调方法:长文本预处理,BERT层选择,分层学习率,灾难性遗忘,low-shot学习问题
  • 在一个中文新闻分类数据集上及7个英文分类数据集上取得了当前最优的结果

研究内容、方法及结果分析

这篇论文主要按照以下三种方式对BERT进行了微调,路线如下图所示:

微调策略

采用多种方式在目标任务上微调BERT显然是非常有必要的。BERT不同的层可以捕获到不同级别的语法及语义信息,哪些信息是目标任务所需要的呢?如何选择优化算法以及学习率呢?当把BERT适应到某个目标任务时,需要考虑到因素有:(1)长文本序列的预处理(BERT最大序列长度为512);(2)选择哪些BERT层;(3)过拟合问题。

这篇论文分别对这三个因素进行了实验分析:

1. 处理长文本

BERT能够处理的最大序列长度是512,把BERT应用到文本分类任务上面临的第一个问题就是如何处理长度大于512的文本。这篇论文尝试的方法有:

  • 截断法 (truncation methods):(1) head-only: 只保留前510个tokens;(2) tail-only: 只保留尾510个tokens;(3) head+tail: 根据经验选择前128个tokens与后382个tokens。
  • 层次法 (hierarchical methods): 输入文本首先被分割成 k=L/510k=L/510k=L/510 个切片,然后输入到BERT中得到 kkk 个切片的表征。每个切片的表征就是最后一层的 符号 [CLS] 的隐藏层状态。可以使用 mean pooling、max pooling与self-attention的方式把所有的切片的表征合并起来。

上表的结果显示,head+tail的截断法在IMDb和Sogou数据集上表现最好。后续的实验也是采用这种方式进行处理。

2. BERT不同层的特征

BERT的每一层能够捕获到输入文本的不同特征。这篇论文探索了不同层的特征的有效性,实验结果如下表所示:

3. 灾难性遗忘

Catastrophic forgetting的意思是在学习新知识的过程中,已习得的知识会丢失。这个问题在迁移学习中非常普遍。这篇论文探索了BERT是否也会遭遇这个问题。验证方法是用不同的学习率微调BERT。结果如下图所示:

实验结果表明:更低的学习率,如 2e-5,能够使得BERT克服这个问题。学习率越大,如 4e-4,导致无法收敛。

4. 逐层降低学习率

为不同的BERT设置不同的学习率及衰减因子,BERT的表现如何?把参数θ\thetaθ划分成{θ1,…,θL}\{\theta^1,\dots,\theta^L\}{θ1,,θL},其中θl\theta^lθl包括了BERT第lll层的参数。按照如下规则进行更新:
θtl=θt−1l−ηl⋅∇θlJ(θ)\theta_t^l = \theta_{t-1}^l - \eta^l\cdot\nabla_{\theta^l}J(\theta) θtl=θt1lηlθlJ(θ)
其中,ηl\eta^{l}ηl代表第lll层的学习率。设置基础学习率为ηL\eta^LηL,使用nk−1=ξ⋅ηkn^{k-1}=\xi\cdot\eta^knk1=ξηk,衰减因子ξ≤1\xi\leq1ξ1。当ξ<1\xi<1ξ<1是,靠下的层比靠上面的层的学习率要低;当ξ=1\xi=1ξ=1时,所有层的学习率一样,此时等价于正常的SGD算法。实验结果如下:

实验结果表明:较低的BERT层赋予较低的学习率能够有效地微调BERT,推荐的恰当的设置是:ξ=0.95\xi=0.95ξ=0.95 与 lr=2.0e−5=2.0e-5=2.0e5

进一步预训练

对于特定领域的文本分类任务,其数据分布会不同于在通用领域的语料库中进行预训练的BERT模型的数据分布,需要针对此特定领域的数据用Masked Language Model及Next Sentence Prediction进一步预训练BERT。此时,会有三种可行的预训练的方法:

  • Within-task pretraining(目标任务内的预训练):在目标任务的训练集上预训练BERT;
  • In-domain pre-training(领域内预训练):在来自于与目标任务相同的领域的数据集上对BERT进行预训练;
  • Cross-domain pre-training(跨领域预训练):在来自于与目标任务相同或不同的领域的数据集上对BERT进行预训练。

1. Within-task pretraining
实验结果表明:进一步预训练对于提升BERT在目标任务上的表现非常有用,在100K训练步后能够取得最优性能。

2. In-domain 与 cross-domain pretraining


这篇论文与其他模型进行了比较,结果如下表所示:

多任务微调

所有任务都会共享BERT层及Embedding层,唯一不共享的层就是最终的分类层,每个任务都有各自的分类层。

这篇论文还额外进行了两个实验:少样本学习及在BERT Large模型是哪个进行进一步预训练。

Few-Shot Learning

这篇论文评估了BERT-FiT与BERT-ITPT-FiT两种模型在不同数量的训练集上的表现。结果如下:

实验表明:BERT能够为小规模数据打来显著的性能提升。

BERT Large模型上进一步预训练

这篇论文进一步探索了BERT Large模型是否也会有跟BERT Base模型一样的结果。实验结果如下:

实验结果表明:在特定任务上微调BERT Large模型能够获得当前最优的结果。


想要了解更多的自然语言处理最新进展、技术干货及学习教程,欢迎关注微信公众号“语言智能技术笔记簿”或扫描二维码添加关注。

一起读论文 | 文本分类任务的BERT微调方法论相关推荐

  1. 天池零基础入门NLP竞赛实战:Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类

    Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类 因为天池这个比赛的数据集是脱敏的,无法利用其它已经预训练好的模型,所以需要针对这个数据集自己从头预训练一个模型. 我们利用H ...

  2. AI深度学习入门与实战21 文本分类:用 Bert 做出一个优秀的文本分类模型

    在上一讲,我们一同了解了文本分类(NLP)问题中的词向量表示,以及简单的基于 CNN 的文本分类算法 TextCNN.结合之前咱们学习的 TensorFlow 或者其他框架,相信你已经可以构建出一个属 ...

  3. 【文本分类】基于BERT预训练模型的灾害推文分类方法、基于BERT和RNN的新闻文本分类对比

    ·阅读摘要: 两篇论文,第一篇发表于<图学学报>,<图学学报>是核心期刊:第二篇发表于<北京印刷学院学报>,<北京印刷学院学报>没有任何标签. ·参考文 ...

  4. bert使用做文本分类_使用BERT进行深度学习的多类文本分类

    bert使用做文本分类 Most of the researchers submit their research papers to academic conference because its ...

  5. 人工智能NLP自然语言之基础篇文本分类pytorch-transformers实现BERT文本分类bert

    一.数据集介绍 中文文本分类数据集 数据来源: 今日头条客户端 数据格式: 6554695793956094477_!_110_!_news_military_!_「欧洲第一陆军」法兰西帝国的欧陆霸权 ...

  6. 【论文解读】文本分类上分利器:Bert微调trick大全

    论文标题:How to Fine-Tune BERT for Text Classification? 中文标题:如何微调 BERT 进行文本分类? 论文作者:复旦大学邱锡鹏老师课题组 实验代码:ht ...

  7. 文本分类上分利器: Bert微调trick大全

    点击下面卡片,关注我呀,每天给你送来AI技术干货! 来自:ChallengeHub 论文标题:How to Fine-Tune BERT for Text Classification? 中文 中文标 ...

  8. 电商评论文本情感分类(中文文本分类)(第二部分-Bert)

    电商评论文本情感分类(中文文本分类) 第二部分-Bert部分 第一部分:textcnn部分 本项目包含: 1.中文文本处理 2.中文词云图绘制(在第一部分) 3.中文词嵌入 4.基于textcnn的中 ...

  9. Bert模型做多标签文本分类

    Bert模型做多标签文本分类 参考链接 BERT模型的详细介绍 图解BERT模型:从零开始构建BERT (强推)李宏毅2021春机器学习课程 我们现在来说,怎么把Bert应用到多标签文本分类的问题上. ...

最新文章

  1. 用启明云端基于ESP32模块的开发板来快速了解天猫精灵
  2. c#如何判断字符串是否含中文
  3. freebsd点到点的ipsec ***
  4. SAP License:SAP一个成功的案例之跳槽者必看
  5. android 复制应用程序,Android限制复制,粘贴在应用程序之间查看
  6. 大脑开发——超右脑觉醒
  7. PowerShell Gallery .nupkg手动下载将.nupkg文件重命名为.zip,然后将内容提取到本地文件夹中
  8. 乐优商城服务器部署_黑马乐优商城项目总结
  9. 推荐FPGA入门书籍
  10. python同切圆_Python绘制同切圆和同心圆
  11. java制作摄影建模,照片建模的拍摄要求
  12. Docker笔记:收集Docker常用的一些命令
  13. 怎样区分细菌性和病毒性感冒
  14. 智能穿戴开发需要什么技术_可穿戴技术–可穿戴应用开发技术
  15. 如何获取抖音和快手直播间的直播流地址
  16. 风控中的文本相似方法之余弦定理
  17. 宕机后,redis如何实现快速恢复?(RDB 内存快照)
  18. 医院人员定位系统一站式智能化管理,实现“医”路畅通
  19. Boson netsim安装
  20. 混合储能系统容量优化MATLAB程序基于粒子群算法

热门文章

  1. C语言练习题:统计 N 个整数中,大于零或小于零的整数个数(数组)
  2. 计算机控制系统中a d是什么,计算机控制系统中,()代表模拟量输出。A、AIB、AOC、DID、DO - 试题答案网问答...
  3. 海外本地支付—Payssion
  4. Windows Server 2012 和 System Center 2012 SP1,Virtual Machine Manager 中启用的软件定义的网络
  5. Hadoop分布式集群的安装与部署实训总结报告
  6. 内网渗透测试:域内权限维持思路总结
  7. 校园二手交易平台-程序流程图
  8. 【Python习题】计算弓形的面积(保姆级图文+实现代码)
  9. “鲨鱼仿生学”iGame主板即将迎来新形象
  10. c语言找最大数字,C语言: 键盘输入任意10个整数,找出最大数及最大数的序号。...