Press "Enter" to skip to content

NLP重铸篇之BERT如何微调文本分类

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

论文标题:How to Fine-Tune BERT for Text Classification?

 

论文链接:https://arxiv.org/pdf/1905.05583.pdf

 

重铸系列会分享论文的解析与复现,主要是一些经典论文以及前沿论文,但知识还是原汁原味的好,支持大家多看原论文。分享内容主要来自于原论文,会有些整理与删减,以及个人理解与应用等等,其中涉及到的算法复现都会开源在:https://github.com/wellinxu/nlp_store ,更多内容关注知乎专栏(或微信公众号):NLP杂货铺。

 

介绍

 

已经证明了,自然语言预训练模型可以学习有效地学习到通用语言表示。BERT作为最杰出的代表,在各种NLP任务中都取得了很好的结果。本文就使用BERT进行文本分类问题,通过详细的实验进行研究,并提出了通用的微调策略:1、在相关数据上进一步进行预训练,2、如果可以进行多任务微调,3、分类任务微调。

BERT进行文本分类

 

BERT-base模型可接受的最长文本序列长度是512,文本序列可以有一个或者两个子句,子句之间以[SEP]分隔,序列以[CLS]开头。对于文本分类任务,通常取[CLS]最终的隐藏状态代表整个句子,后面接一个简单的softmax分类器即可。

 

实验基础

 

论文中使用的模型是:uncased BERT-base和中文BERT-base。BERT-base模型的隐藏层是768维,attention head是12,有12层Transformer。进行预训练的时候,batch size是32,最大序列长度是128,学习率是5e-5,训练步数100000,warm up步数10000。微调的时候,batch size是24,dorpout是0.1。使用的是Adam算法,\beta_1=0.9,\beta_2=0.999,学习率是2e-5,warm up率是0.1,epoch设置的是4,并且保存在验证集上的最优模型。使用的数据是7个英文数据集和一个中文数据集。

微调策略

 

BERT不同层的结果往往得到的是不同层次的语义跟句法信息。使用BERT进行文本分类任务,我们需要关注这几点:1、因为BERT有最大长度限制,所有需要对长文本进行预处理;2、官方的BERT-base模型包含embedding层、12层encode和一层pooler层,所以需要选择最有效的层;3、选择合适的学习率。

 

 

长文本预处理

 

因为BERT-base可接受文本序列最长为512,所以对于超过512个字符的文本需要进行预处理。论文中使用了截断跟分层两种方式处理。截断是只取文本前510个字符,或者后510个字符,或者前128个字符加后382个字符。分层是将文本分成k个片段(k=L//510,L是文本长度),然后将每个片段输入BERT得到句向量,再通过平均、最大、attention等方式获取整个句子的表示。下表中展示了各种方式在两个数据集上的错误率,其中前128+后382的结果最优,后续试验都会取此设定。

选择最佳层作为特征

 

论文中分别选择了12层,前4层,后4层,全部12层做了试验,结果如下表,其中最后层的结果最佳,后续试验都会取此设定。

灾难性遗忘

 

灾难性遗忘指在学习新知识的时候,预训练模型原有的知识会被遗忘,这种问题在迁移学习中很常见。论文试验中发现,使用比较低的学习率可以缓解灾难性遗忘问题,试验中选择了几种不同的学习率,其错误率曲线如下图所示,最终学习率选择了2e-5。

逐层递减的层学习率

 

论文在试验中对各层使用了不同的学习率,表示第k层的学习率,表示第k-1层的学习率,其中小于等于1。下图中显示了不同的初始学习率以及衰减比例的结果,最终选择2e-5的学习率与0.95的衰减比例。

 

进一步预训练

 

BERT模型是在通用语料上训练的,但对于特定领域的文本分类,它们的数据分布就会不一致,所以我们可以在特征领域的文本上进行进一步预训练。本文提出了三种方式:在分类文本上进行再训练,在分类任务同领域的文本上进行再训练,结合同领域与其他领域的文本进行再训练。

 

 

在下游任务训练集上再训练

 

论文首先在下游任务的训练集上,对BERT进行了进一步训练,下图展示了不同训练步数对最终错误率的影响。

在相关领域文本上再训练

 

除了可以在下游任务训练集上再训练模型,还可以在相关领域文本上训练(自身领域文本或交叉领域文本),论文中分了三种领域:主题型,情感型,问题型。训练结果如下图。

其中all表示使用了所有领域的文本,w/o pretrain表示使用原来的预训练模型没有进行再训练。

 

各种模型结果对比

 

论文中比较了各种方式得到的新模型与之前论文中的模型结果,如下图所示,其中BERT-Feat表示使用BERT作为特征,BERT-FiT使用BERT+微调,BERT-ITPT-FiT表示使用下游任务数据再训练BERT然后微调,BERT-IDPT-FiT表示在相关领域上再训练BERT然后微调,BERT-CDPT-FiTmeans表示在交叉领域上再训练BERT然后微调。

 

多任务微调

 

多任务学习可以从相近的任务上学到有用信息。所有的任务会共享BERT的各层,只有在最后的分类层是不一致的。为了能够充分利用各个分类语料,论文中将几个分类问题合在一起进行了多任务训练,结果如下图。为了让各个子任务的结果更好,在多任务微调之后,还使用更低的学习率对单个任务进行了微调。

其他实验

 

 

小样本学习

 

预训练模型的一个优点就是能够在小样本上也表现得比较好,论文使用了BERT-FiT、BERT-ITPT-FiT分别在一部分IMDb数据集上进行实验,下图是实验结果,可以看到在使用了0.4%的IMDb数据的情况下,BERT-ITPT-FiT也取得了较好的结果。

在BERT-LARGE上再训练

 

论文研究了BERT-LARGE跟BERT-base是否有一致的性质,实验结果表示,其结果是类似的。

 

结论

 

 

对文本分类来说,BERT最顶层结果更有效

 

使用合适的逐层递减学习率,可以缓解灾难遗忘问题

 

在同领域文本(或下游任务数据集)上,进一步预训练可以提高效果

 

多任务学习对单个任务也有提升

 

BERT可以提高小样本数据集任务结果

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注