问 题

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个token

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表示固定住前0-10层,只fine-tune第11层)(此处理解有误,修改后为:fine-tune前12层,仅利用Layer-11做classification),在对其进行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,效果会更好。

https://mp.weixin.qq.com/s/95sfuZSu1YZiHeGmwYeBgQ

参考文献

[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.

php文本域输出_如何在文本分类任务中Fine-Tune BERT相关推荐

  1. java中获取文本域内容_怎样读文件内容到文本域中(java SWT)

    //写了段简单的代码提供你参考importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importj ...

  2. 文本显示变量_【RPA课堂】UiPath中的变量、数据类型和组件

    自动化出现的那一天起,就有了各种各样的工具来满足自动化的需要.无论是用于windows桌面自动化的简单工具,还是用于企业自动化大量任务的工具,它们都有自己的功能.UiPath就是这样的工具,在本文中, ...

  3. java富文本传图片_使用富文本编辑器上传图片实例详解

    富文本编辑器上传图片 一.导入kindeditor的js 二.将kindeditor与一个文本域textarea进行关联,即用textarea初始化一个kindeditor对象 itemaddedit ...

  4. java文本域内容监听_HTML文本框,文本域,监听文本的实时变化

    概要: 今天要做一个文本域的实时校验,实时文本变化,字符长度不能超过512.搞得有点麻烦.文本域的change事件,keyup事件等等都不合适,最后参考别人用计时器完成的,用计时器 效率对于小文本,效 ...

  5. php文本域输出_PHP转换文本框内容为HTML格式的方法

    本文实例讲述了PHP转换文本框内容为HTML格式的方法.分享给大家供大家参考,具体如下: 有时候我们将会用到将多行文本框中输入的内容以html格式显示出来,这样子可以保持原来的文本格式,如换行.回车等 ...

  6. 文本摘要提取_了解自动文本摘要-1:提取方法

    文本摘要提取 Text summarization is commonly used by several websites and applications to create news feed ...

  7. java文本框输出_Java语言之文本框和文本区的输入输出

    Java编程的知识点很多,在上一节中我们谈到了Java文本区和文本框方面的知识点,但这部分内容还完结,下面就让我们一起来看看Java文本框和文本区的输入输出吧,看看如何学习才能快速提升技能,掌握重点. ...

  8. python treeview文本自动换行显示_在tkinter.ttk.Treeview列中设置文本格式

    我想知道如何调整ttk.Treeview列中的文本.下面是我的意思的一个例子.请注意日期和数字之间的位置不正确.我认为这和间距有关,但我可能错了. 编辑:用Python 3编写.#! coding=u ...

  9. canvas文本居中对齐_如何使用文本对齐来居中图像:居中

    canvas文本居中对齐 An <img> element is an inline element (display value of inline-block). It can be ...

最新文章

  1. js之argument小解
  2. 接到一个需求,想在页面上加一个链接有多难?
  3. CSS3初体验之奇技淫巧
  4. pip安装时报错:以一种访问权限不允许的方式做了一个访问套接字的尝试
  5. 使WEBBROWSER 可编辑
  6. 性能监控/优化系列——JVM监控/调优
  7. jquery --- 使用when方法等待2个异步事件结束后执行某一个函数.
  8. 前端学习(2432):上午总结
  9. Qt中与文件目录相关操作
  10. Vmware中RedHat命令行和图形界面切换
  11. 中学办公室计算机管理制度,中学多媒体室使用管理制度条例
  12. springboot JPA 做security的时候出现查了user表却不自动查role表 报 session为空
  13. Python模块:win32com用法详解
  14. Mysql环境变量配置WIN10(保姆级)
  15. 前端页面实现时间显示
  16. java运行环境配置_配置java开发运行环境的步骤
  17. 如何用计算机名查看共享打印机,如何查找网络共享打印机
  18. 如何使用kindle看代码?linux下的简单方法
  19. Apache Calcite入门
  20. 闲云野鹤:吃鸡(三)之场景制作:制作毒圈

热门文章

  1. 盘点2018:数据和云最受欢迎的十大精品文章
  2. 为什么预估执行计划与真实执行计划会有差异?
  3. 云图说|图解DGC:基于华为智能数据湖解决方案的一体化数据治理平台
  4. 华为云GaussDB深耕数字化下半场,持续打造数据库根技术
  5. 一文带你全面了解java对象的序列化和反序列化
  6. 17张图带你解析红黑树的原理!保证你能看懂!
  7. React组件方法中为什么要绑定this
  8. frc机器人比赛主题_RCC机器人比赛
  9. Hadoop分布式文件系统HDFS
  10. Kotlin学习笔记25 协程part5 协程的同步与异步