文本分类场景下微调BERT

news2024/12/26 21:42:22

How to Fine-Tune BERT for Text Classification

论文《How to Fine-Tune BERT for Text Classification?》是2019年发表的一篇论文。这篇文章做了一些实验来分析了如何在文本分类场景下微调BERT,是后面网上讨论如何微调BERT时经常提到的论文。

结论与思路

先来看一下论文的实验结论:

  1. BERT模型上面的层对于文本分类任务更有用;
  2. 选取合适的逐层递减的学习率,Bert可以克服灾难性遗忘问题(catastrophic forgetting problem);
  3. 任务内(Within-task)和领域内(in-domain)继续预训练(further pre-training) 可以显著提高模型的性能;
  4. 在单任务微调之前先进行多任务微调(multi-task fine-tuning)对于单任务微调有帮助,但是其好处没有继续预训练大;
  5. BERT可以改进小数据量的任务。

接下来看论文是如何来微调BERT模型的,论文从如下三种方法中来找最合适的微调方法,因此将微调BERT的方式有三种如上图所示。

  • 微调策略(Fine-Tuning Strategies):在微调BERT时如何利用BERT,比如BERT的哪些层对目标任务更有效。如何选择优化算法和学习率?
  • 继续预训练(Further Pre-training):BERT是在通用领域的语料上训练的,通用领域的数据分布与目标领域很可能不同,所以很自然的想法是在目标领域语料上继续训练BERT。
  • 多任务微调(Multi-task Fine-Tuning):多任务学习已经表现出可以有效利用不同任务之间的共享知识,如果目标领域有多个不同任务,那么在这些任务上同时微调BERT可以带来好处吗?

论文实验设置

  • 使用的模型为base BERT模型:uncased BERT-base模型和Chineses BERT-base模型
  • 使用的数据集的统计信息如下图所示,一共有8个数据集。
    • 情感分析(Sentiment analysis):使用了二分类电影评论数据集IMDb,Yelp评论数据集的二分类和五分类版本。
    • 问题分类(Question classification):六分类版本的TREC数据集,Yahoo! Answers数据集。
    • 话题分类(Topic classification):AG’s News数据集,DBPedia数据集。从SogouCA和SogouCS新闻语料集构建了一个中文话题分类数据集:通过URL来决定话题类别,比如""http://sports.sohu.com"对应"sports"类别;一共选取了"sports",“house”,“business”,“entertainment”,“women”,"technology"共6个类别,每个类别的训练集样本为9000测试集为1000。
  • 数据预处理:遵循BERT论文中的词汇表和分词方式:30,000个token词汇表和用 ##来分割word的WordPiece embedding。数据集中文档长度的统计时基于word piece的。 对于BERT的继续训练,对英文数据集使用spaCy进行句子分割,对中文数据集使用“。”,“?”,“!”来进行句子分割。
  • 超参数
    • 继续预训练在1个TITAN Xp GPU上进行,batch size为32,最大训练长度为128,学习率时5e-5,训练步数为100,000,warm-up步数为10,000。
    • 微调在4个TITAN Xp GPU上进行,为确保显存被充分利用batch size为24,dropout概率为0.1。Adam优化器的 β 1 = 0.9 \beta_1=0.9 β1=0.9 β 2 = 0.999 \beta_2=0.999 β2=0.999。使用slanted triangular learning rates,基础学习率为2e-5,warm-up比例为0.1。根据经验将最大训练epoch设为4,将在验证集上效果最好的模型保存下来用于测试。

在这里插入图片描述

微调策略及实验

将BERT应用到目标任务时,需要考虑几个因素:

  • BERT的最大序列长度时512,所以在使用BERT时先要对长文本进行预处理。
  • BERT-base模型包括一个embedding层,12个encoder层,一个pooling层。在使用时需要选择对文本分类任务最有效的层。
  • 过拟合问题,如何选择合适的学习率防止BERT在目标任务上过拟合。

BERT模型里更低的层包含更通用的信息,所以论文作者考虑对不同的层使用不同的学习率。将BERT模型的参数 θ \theta θ表示成 { θ 1 , ⋯   , θ L } \{\theta^1, \cdots, \theta^L \} {θ1,,θL},其中 θ l \theta^l θl是BERT的第 l l l层的参数,则微调时每一层的参数更新可表示为如下:

θ t l = θ t − 1 l − η l ⋅ ∇ θ l J ( θ ) \theta^l_t = \theta^l_{t-1} - \eta^l \cdot \nabla_{\theta^l} J(\theta) θtl=θt1lηlθlJ(θ)

上式中 η l \eta^l ηl是BERT的第 l l l层的学习率。将基准学习率设置为 η L \eta^L ηL,并使用 η k − 1 = ξ ⋅ η k \eta^{k-1}=\xi \cdot \eta^k ηk1=ξηk表示各层学习率之间的关系; ξ \xi ξ是衰减因子,它小于等于1。当 ξ = 1 \xi = 1 ξ=1时,所有层的学习率都是一样的,也就相当于普通的SGD了。


BERT的最大序列长度时512,所以在使用BERT时先要对长文本进行预处理。考虑如下方法来处理长文本:

  • 裁剪方法(Truncation methods),因为一篇文章的主要信息通常在其开始和结束部位,所以使用了如下三种不同的方法的来裁剪文本。
    • head-only:保留文本前510个token(512-[CLS]-[SEP])
    • tail-only:保留文本最后510个token
    • head+tail:按经验选择前128个token以及最后382个token
  • 层次方法(Hierarchical methods): 设文本的长度为L,将文本划分为 k=L/510 个片段,将它们输入BERT得到k个文本片段的表征向量。每个片段的表征向量取的是最后一层的[CLS]token的隐状态向量。然后使用mean pooling,max pooling, self-attention来组合这些片段的表征向量。
    在IMDb和Sogou数据集上的实验表明 head+tail裁剪方法表现最好,所以在论文后面的实验中都使用这种方法来处理长文本。
    在这里插入图片描述

论文试验了使用BERT不同的层捕捉文本的特征,微调模型并记录模型的测试错误率如下图所示。BERT最后一层微调后的性能最好。
在这里插入图片描述

灾难性遗忘是指在迁移学习过程中,学习新知识时预训练的知识被消除掉了。论文作者使用不同的学习率来微调BERT,在IMDb上的错误率的学习曲线如下图所示。实验表明一个较低的学习率比如2e-5对于BERT克服灾难性遗忘是必要的。在比较激进的学习率如4e-4训练集难以收敛。
在这里插入图片描述

下图是不同的基准学习率和衰减因子在IMDb数据集上的表现,逐层递减的学习率比固定学习率在微调BERT时表现要好,一个合适的选择是 ξ = 0.95 \xi=0.95 ξ=0.95 l r = 2.0 e − 5 lr=2.0e-5 lr=2.0e5
在这里插入图片描述

继续预训练及实验

因为BERT模型是在通用领域的语料上训练的,对于特定领域的文本分类任务比如电影评论,其数据分布可能与BERT不一样。所以可以在领域相关的数据上继续预训练模型,论文进行了三种继续预训练的方法:

  • 任务内的继续预训练(Within-Task Further Pre-Training),在目标任务的训练数据上继续预训练BERT。
  • 领域内的继续预训练(In-Domain Further pre-training),训练数据是从目标任务相同领域来获取的。比如几个不同的情感分类任务,它们有类似的数据分布,在这些任务的组合训练数据上来继续预训练BERT。
  • 跨领域继续预训练(Cross-Domain Further pre-training),包括与目标任务相同领域以及其他领域的训练数据。

任务内的继续预训练:作者试验了不同的训练步数来继续预训练模型,再用之前得到的最好的微调策略来微调模型。如下图所示继续预训练有助于提高BERT的性能,再100K个训练步后得到最佳性能。
在这里插入图片描述

领域内与跨领域继续预训练:将7个英文数据集划分为3个领域:情感,话题,问题,这个划分不是严格正确的,所以作者也将每个数据集当作不同的领域进行了实验,结果如下图所示。

  • 领域内继续预训练总体而言比任务内继续预训练可以带来更好的效果。在句子级别的小数据集TREC上,任务内继续预训练有害于模型效果,而在Yah.A语料上的领域继续预训练后得到了更好的效果。
  • 跨领域继续预训练(下面图中的标记为"all"的行)总体而言没有带来明显的好处。因为BERT已经在通用领域训练过了。
  • IMDb和Yelp在情感领域内没有给互相带来性能提升。可能因为它们分别是关于电影和食物的,数据分布可能有明显差别。
    在这里插入图片描述

将微调后的模型与其他文本分类模型的比较如下图所示,BERT-Feat是指用BERT来进行特征提取之后,将特征作为biLSTM+self-attention的输入embedding。BERT-FiT是直接微调BERT得到的模型,BERT-ITPT-FiT是任务内继续预训练模型,BERT-IDPT-FiT是领域内继续预训练后微调的模型(对应于上图的’all sentiment’, ‘all question’,‘all topic’),BERT-CDPT-FiT对应跨领域继续预训练后微调的模型(对应于上图的"all"一行)

  • BERT-Feat 比除ULMFiT之外的模型效果都要好。
  • BERT-FiT只比BERT-Feat在数据集DBpedia上差一点点,其余数据集上效果都更好。
  • 三个继续预训练模型微调之后的效果都比BERT-Fit模型更好。
  • BERT-IDPT-FiT即领域内继续预训练再微调的效果是最好的。
    在这里插入图片描述

此外作者评估了BERT-FiT和BERT-ITPT-FiT在不同样本数量的训练集上微调训练的效果,在IMDb的训练数据里选了一个子集来微调模型,结果如下图,实验表明BERT在小数据集也可以带来显著效果提升,继续预训练BERT可以进一步提升效果。
在这里插入图片描述

多任务微调及实验

多任务学习可以从不同的监督学习任务共享知识,所有任务共享BERT层和embedding层,每个任务有自己的分类层。
论文在四个英文数据集(IMDb, Yelp P., AG, DBP)上进行多任务微调,先对四个任务一起微调训练,再使用一个更低的学习率在每个数据集上额外进行微调训练。实验结果如下图,结果表明多任务微调对结果有提升,但是跨领域继续微调模型的多任务微调在数据集Yelp P.和AG.上没有效果,作者推测跨领域继续微调和多任务学习微调可能是可互相替代的方法,因为跨领域继续微调模型已经学习到了丰富的领域相关的信息,多任务学习就不会提高文本分类子任务的泛化性了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2114169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

19:HAL—-DAC

一&#xff1a;介绍 1&#xff1a;简历 2&#xff1a;简图 F1,F4,F7的DAC框架图都一样。 触发源&#xff1a; 宏定义补全及解释 #define DAC_TRIGGER_NONE 0x00000000UL /*!< 转换是自动的&#xff0c;一旦DAC1_DHRxxxx寄存器被加载&#xff0c;不由外部触发 */ #define …

ctfshow-php特性(web123-web150plus)

​web123 <?php error_reporting(0); highlight_file(__FILE__); include("flag.php"); $a$_SERVER[argv]; $c$_POST[fun]; if(isset($_POST[CTF_SHOW])&&isset($_POST[CTF_SHOW.COM])&&!isset($_GET[fl0g])){if(!preg_match("/\\\\|\/|\~|…

AI模型的未来之路:全能与专精的博弈与共生

人工智能(AI)领域正迅速发展,伴随着技术的不断进步,AI模型的应用范围也在不断扩展。当前,AI模型的设计和使用面临两个主要趋势:全能型模型和专精型模型。这两者之间的博弈与共生将塑造未来的AI技术格局。本文将从以下七个方面探讨AI模型的未来之路,并提供实用的代码示例…

软考-高级架构师Keywords(上半部分)

概述 本文用于备考时自查知识点掌握情况&#xff0c; 知识点只以关键词方式提点出来&#xff0c;算是对照考纲的细碎化转化。 太简单的知识点不会收录。特别适合 通过中级-软件设计师的同学 / 八股文爱好者 / 408选手 计算机硬件 码距&#xff1a;改变n位成为另一个编码所需要…

业务资源管理模式语言09

示例&#xff1a; 图13 表示了QuoteTheMaintenance 模式的一个实例&#xff0c;在汽车修理店系统中&#xff0c;其中“Vehicle”扮演“Resource”&#xff0c;“Repair Quotation”扮演“Maintenance Quotation”&#xff0c;“Repair shop branch”扮演“Source-party”&…

halcon图像怎么显示在我们指定的区域

要想搞明白这个问题,首先我们要了解句柄的传递关系. halcon生成图像,会产生一个图像句柄,只要把该句柄传递给我们需要显示的组件就可以了. 简单说,就是一个句柄的传递关系. 下面这个例子简单说明句柄传递关系: 我们获取一个图像控件的句柄,把图像句柄传递给halcon的图像窗口句…

BN于神经网络调优

目录 一:神经网络调优 1.算法层面: 2.网络层面 二:调参技巧: 2.合理的参数设置: 3.运行: 三:批标准化(Batch Normalizetion) 1.批标准化公式: 2.过程图: 3.为什么标准化能够是优化过程变得简单: 一:神经网络调优 参数调优也称为超参数调优 1.算法层面…

JS手写实现深拷贝

手写深拷贝 一、通过JSON.stringify二、函数库lodash三、递归实现深拷贝基础递归升级版递归---解决环引用爆栈问题最终版递归---解决其余类型拷贝结果 一、通过JSON.stringify JSON.parse(JSON.stringify(obj))是比较常用的深拷贝方法之一 原理&#xff1a;利用JSON.stringif…

刘诗诗现身纽约两场活动,演绎极具松弛感的优雅,生图状态绝美

近期&#xff0c;纽约迎来了时装周&#xff0c;还有奢侈品牌活动陆续举办&#xff0c;演员刘诗诗也现身部分活动现场&#xff0c;以绝佳好状态收获大量关注和好评。 纽约时间9月4日&#xff0c;刘诗诗现身Bobbi Brown芭比波朗「IN MY SKIN GLOBALEVENT」活动&#xff0c;身穿裸…

ubuntu 和windows用samba服务器实现数据传输

1&#xff0c;linux安装samba服务器 sudo apt-get install samba samba-common 2&#xff0c;linux 配置权限&#xff0c;修改目录权限&#xff0c;linux下共享的文件权限设置。 sudo chmod 777 /home/lark -R 3. 添加samba用户 sudo smbpasswd -a lark 4&#xff0c;配置共享…

【AcWing】853. 有边数限制的最短路(bellman-ford贝尔曼福特算法)

存储&#xff1a; 这个算法存边不一定要写成邻接表&#xff0c;随便存&#xff0c;只要能遍历到所有边即可&#xff0c;结构体数组。 过程&#xff1a; 负权边、负权回路&#xff1a; 贝尔曼福特算法处理有负权边的图。(注意&#xff0c;有负权回路的话&#xff0c;最短路径就不…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月7日新模型预测第80弹

经过近80期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c…

2024PyCharm专业版详细安装激活教程

如果你正在学习Python&#xff0c;那么你需要的话可以&#xff0c;点击这里&#x1f449;Python重磅福利&#xff1a;入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享&#xff01; 前言 PyCharm是由JetBrains公司开发的一款强大的Python集成开发环境&#…

11--kubernetes的Ingress应用

前言&#xff1a;本章主要记录ingress暴露服务方式&#xff0c;会详细解释其原理及两种网络模式应用实操。 1、Ingress概念详解 Kubernetes 暴露服务的方式目前只有三种&#xff1a;LoadBlancer Service、NodePort Service、Ingress&#xff0c;Service属于4层负载均衡&#…

MySQL数据库的SQL注入漏洞解析

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 …

FreeRTOS内部机制学习01(任务创建的细节以及任务调度的内部机制)

文章目录 前言&#xff1a;首先要谢谢韦东山老师的无私奉献&#xff0c;让我学到了很多东西&#xff0c;我做这个笔记是害怕我会忘记&#xff0c;所以就记录了下来&#xff0c;希望对大家有帮助&#xff01;关于寄存器CPU内部的寄存器这些寄存器到底要保存一些什么&#xff1f;…

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制&#xff0c;我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充…

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念&#xff0c;以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么&#xff1f;通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容&#xff0c;主要就是BTP的实际操作流程&#xff0c;比如账号注册&#xff0c;登录&#…

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用 今天,来分享下 Dify.AI 这个产品,一句话介绍:可供普通人简单易用的部署生成出一个 AI 应用。这是一种使用人工智能技术来帮助团队开发和运营 AI 应用的工具。 什么是 Dify.ai Dify.ai 是一个易于使用的 LLMOps 平台…

资料分析系统课-刘文超老师

1、考试大纲 2、解题的问题->解决方法 3、统计术语 基期量与现期量&#xff1a;作为对比参照的时期称为基期&#xff0c;而相对于基期的称为现期。描述具体数值时我们称之为基期量和现期量。 增长量&#xff1a;是指基期量与现期量增长(或减少)的绝对量。增长量是具体值&…