问 题

BERT在许多自然语言理解(NLU)任务中取得了惊人的成果,但它的潜力还有待充分挖掘。目前很少有如何能进一步提高BERT性能的研究,因此,如何通过一些技巧和方法最大限度的提升BERT在文本分类任务中的性能是此次研究的重点。

 目 标

在使用BERT做 text classification的时候,我们利用[CLS]的hidden state输出做为整个输入文本的representation,通过一层task specific层(通常是Linear Layer),再经过Softmax层得到概率,输出概率如下所示,其中的是task specific层的参数,最后通过最大化log-probability of correct label优化模型参数。

方 法

How to Fine-Tune BERT for Text Classification?[1]这篇论文从四个方面对BERT(BERT base)进行不同形式的pretrain和fine-tune,并通过实验展示不同形式的pretrain和fine-tune之间的效果对比。

一、Fine-Tune策略

当我们在特定任务上fine-tune BERT的时候,往往会有多种方法利用Bert,举个例子:BERT的不同层往往代表着对不同语义或者语法特征的提取,并且对于不同的任务,不同层表现出来的重要性和效果往往不太一样。因此如何利用类似于这些信息,以及如何选择一个最优的优化策略和学习率将会影响最终fine-tune 的效果。

  • 对于长文本的处理

① 截断方法(不考虑[CLS]、[SEP]):

1.保留头部(head-only):保留头部最开始的510个tokens

2.保留尾部(tail-only):保留尾部最后的510个tokens

3.头部加尾部(head+tail):头部128+尾部382

② 分段的方法:

首先将输入文本(长度为L)分成k = L/510个小段落,将它们依次输入BERT得到k个文本段落的表示。每个段落的representation是最后一层[CLS]的hidden state,并分别使用mean pooling, max pooling and self-attention来合并所有段落的representation。上述两种处理方法在IMDb和Chinese Sougou News datasets上的实验效果如下所示,实验结果表明,采取head+tail的方式处理长文本更具优势。

  • Fine-tune层的选择

BERT的每一层捕获输入文本的不同特性,Table 3显示了在不同层Fine-tune BERT时performance的对比。实验结果表明,BERT的最后一层更能表征下游任务(Layer-11表示fit前12层),在对其进行Fine-tune时效果也是最好的。

  • 学习率优化策略

通常BERT模型的低层包含更general的信息,而靠近顶部的层偏向于学习下游任务的相关知识,因此可以在顶层赋予较大的学习率,越往低层学习率越小。因此,我们的策略如公式(1)所示,其中代表第l层的学习率,我们设定base learning rate为,代表顶层的学习率,其他层的策略如公式(2)所示,其中是衰减系数,如果,那么每层的学习率是一样的,如果,那么越往下的层学习率就越低。

     (1)

(2)

  • 灾难性遗忘问题

灾难性遗忘(Catastrophic forgetting)是transfer learning中常见的问题,即在学习新知识的过程中,预训练的知识有可能被遗忘或者抹去。因此,本文探讨了BERT是否也存在这种灾难性遗忘问题。如下图所示,当采用较低的学习率时(文中采用2e-5),BERT在训练的过程中能够克服灾难性遗忘问题,而当学习率较大时(文中采用4e-4),就会失去这种能力。

二、进一步预训练

BERT预训练模型是在通用领域(General Domain)上做的Training,很自然的一个想法就是在目标域(Target Domain)进一步pretrain。

  • 任务内进一步预训练:

任务内(within-task)pretrain是指在任务域(通常指具体的任务,比如某一金融细分领域的文本分类任务)上对模型进行预训练,预训练的方式仍然是unsupervised masked language model and next sentence prediction tasks,实验结果表明,任务内领域的预训练可以提升模型的效果,但在进一步预训练时需要注意training step,否则效果会变差。

  • 领域内和交叉域内的进一步预训练:

In-Domain指的是某一领域内数据,比如金融领域、计算机领域等等,该领域的数据分布往往和任务内数据分布相似,这里的Cross-Domain在内容上可以理解为通用领域,作者通过实验证明领域内(In-Domain)和任务内(Within-Task)的pretrain效果都会有提升,且通常情况下领域内的pretrain效果要好于任务内的pretrain效果,但在交叉域(或者说通用领域)上没什么提升,理由是BERT预训练本身就是在通用领域上训练的。实验结果对比如下图所示,all sentiment/question/topic代表In-Domain pretrain,all代表 Cross-Domain,w/o pretrain代表原始的BERT base 模型。

三、多任务上的Fine-tune

在多任务数据域(比如多个文本分类的数据集,这样做的目的是为了充分利用已有的分类任务数据)上做pretrain,然后在target-domain上进行fine-tune,也会提升模型的效果。其中,
BERT-FiT  =  “BERT + Fine-Tuning”.
BERT-CDPT-MFiT-FiT = “BERT + Cross-Domain Pre-Training+Multi-Task Pre-Training+ Fine-Tuning”.(先在交叉域上做pretrain,然后在多任务域上做pretrain,最后在target-domian上做fine-tune)

四、 少样本学习

BERT pretrain model的一个优势在于,在下游任务中,只需要少量的样本就能fine-tune一个较好的模型,但是随着数据的增大,在任务内数据的pretrain model和通用领域的pretrain model最后fine-tune的效果差不多,其中红线代表BERT+Fine-tune,即直接利用BERT在target -domain上fine-tune,蓝线代表BERT+ withIn-Task Pre-Training + Fine-Tuning,即先用BERT在within-task域上pretrain,然后在target-domain上fine-tune,这说明了BERT可以利用小数据改进下游任务,且小样本数据上fine-tune效果较明显,当然如果能事先在within-task域上做进一步的pretrain,再做fine-tune,效果会更好。

参考文献

[1] Sun C , Qiu X , Xu Y , et al. How to Fine-Tune BERT for Text Classification?[C]// China National Conference on Chinese Computational Linguistics. Springer, Cham, 2019.


往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑
获取本站知识星球优惠券,复制链接直接打开:
https://t.zsxq.com/qFiUFMV
本站qq群704220115。加入微信群请扫码:

【NLP】如何在文本分类任务中Fine-Tune BERT相关推荐

  1. 【NLP】中文文本分类数据增强方法:EDA 与代码实现

    数据增强可以算作是做深度学习算法的一个小trick.该介绍主要出自论文:EDA: Easy Data Augmentation Techniques for Boosting Performance ...

  2. 零基础入门NLP - 天池新闻文本分类Task3笔记

    零基础入门NLP - 天池新闻文本分类 以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记 赛题链接:https://tianchi.aliyun.com/co ...

  3. 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去...

    博文转载请注明作者和出处(作者:finallyliuyu :出处博客园) 附:<卡方特征词选择算法> <DF特征词选择算法> 一.数学背景 将数学知识.数学理论以及数学思想迁移 ...

  4. php文本域输出_如何在文本分类任务中Fine-Tune BERT

    问 题 BERT在许多自然语言理解(NLU)任务中取得了惊人的成果,但它的潜力还有待充分挖掘.目前很少有如何能进一步提高BERT性能的研究,因此,如何通过一些技巧和方法最大限度的提升BERT在文本分类 ...

  5. 谷歌推出新模型「pQRNN」,少量参数下进行文本分类,性能堪比BERT

    近日,谷歌推出了新模型「pQRNN」,它是由去年推出的「PRADO」进一步使用小模型改进而得,达到了SOTA结果.pQRNN的新颖之处在于,它可以结合一个简单的映射和一个quasi-RNN编码器来进行 ...

  6. TensorFlow版本的BERT微调:Fine Tune BERT for Text Classification with TensorFlow

    文章目录 写在前面 Project Structure Task 2: Setup your TensorFlow and Colab Runtime. Install TensorFlow and ...

  7. NLP 模型“解语如神”的诀窍:在文本分类模型中注入外部词典

    一. 引言 现实世界的文本表述如恒河沙数,以惊人的速度变换着,人工智能(AI)在快速识别形形色色的文本之前,必须经过充足的训练数据洗礼.然而,面对复杂多变的文本表述,NLP 模型往往无法从有限的训练数 ...

  8. PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】

    相关项目链接: Paddlenlp之UIE模型实战实体抽取任务[打车数据.快递单] Paddlenlp之UIE分类模型[以情感倾向分析新闻分类为例]含智能标注方案) 应用实践:分类模型大集成者[Pad ...

  9. 文本分类模型中的“蒸”功夫

    本文首发于:行者AI 2018年Bert的横空出世给自然语言处理带来了巨大的突破,Bert及其衍生模型在多个文本处理下游任务中达到了SOTA的结果.但是这样的提升是有一定代价的,其中之一就是计算量的大 ...

最新文章

  1. loadrunner用javavuser进行接口测试
  2. 熵的定义(很好的方法论工具尤其第三熵增益的计算)
  3. ros 消息队列与缓冲区_[ROS] [笔记(1)] 一个最简单的例子:Hello Robot(消息、发布者与订阅者)...
  4. 非计算机专业学习计算机
  5. java如何添加同名的xml节点_jaxb怎么解析多个同名元素
  6. 【JDBC】各版本jar包下载网址及Tomcat下载
  7. Invalid character found in the request target. The valid characters are defi
  8. 数学模型让咖啡更好喝
  9. Java虚拟机--------JVM常见参数
  10. python学习之-- redis模块基本介绍
  11. mysql 命令 kill_当MySQL事务中发生了网络异常
  12. 刘晓燕核心词汇趣讲笔记-第十七课
  13. powerdesigner 16.5 Could not Initialize JavaVM!
  14. 小米5splus(高配版/全网通)解BL锁教程申请BootLoader解锁教程
  15. doc 问卷调查模板表_问卷调查表.doc
  16. python 使用numpy计算混淆矩阵
  17. UVALive 6437 Power Plant 【最小生成树 + 思维】
  18. 固定翼航模及四旋翼无人机基础
  19. Web Service简单demo
  20. 关于域名续费 域名过户转入等问题解说

热门文章

  1. SpringMVC 中xml 配置多数据源
  2. [BZOJ3214][ZJOI2013]丽洁体(Hash+DP)
  3. 【javascript】数据结构-链表
  4. Git 初始化及仓库创建及操作
  5. 开发机器上利用vs2013调试远程IIS上的c#程序
  6. 云计算学习(2-4)云计算的案例
  7. jQuery设置radio、select、checkbox只读属性后,如何在后台得到数据
  8. 6.2 基本操作与存储
  9. UIDynamicBehavior的行为类翻译
  10. hdu 2612(bfs)Find a way