15

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

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650413363&%3Bidx=3&%3Bsn=f27b8360cfe8704c93f985f5469492d5
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

7z2URfZ.jpg!web

3Ene2u7.png!web image

论文标题: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、分类任务微调。

Q7nUvqQ.png!web

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个英文数据集和一个中文数据集。

ri2iEbE.png!web

微调策略

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

  1. 长文本预处理

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

    2qqMJ36.png!web
  2. 选择最佳层作为特征

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

    rm26fyF.png!web
  3. 灾难性遗忘

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

    niUfeqV.png!web
  4. 逐层递减的层学习率

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

    FNZvmuj.png!web

进一步预训练

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

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

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

    vYbimyN.png!web
  2. 在相关领域文本上再训练

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

    ayaeauU.png!web

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

  3. 各种模型结果对比

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

    VbMZBrB.png!web

多任务微调

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

6Fbu2aI.png!web

其他实验

  1. 小样本学习

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

    qmEBj2j.png!web
  2. 在BERT-LARGE上再训练

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

    EZ7jeif.png!web

结论

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

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

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

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

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

论文之外

就文本分类问题来说,该论文做了相对详细的分析,但由于其发表得较早些,后续有很多表现超过bert的改进模型,比如roBERTa。在中文领域,也有相比更好的模型,比如bert-wwm-ext。除此之外,该论文并没有对bert/pooler层做实验,就我个人经验,在处理句子对分类的时候(如文本蕴涵),bert/pooler层的效果要比encode顶层效果更好。

推荐阅读

AINLP年度阅读收藏清单

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载

数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?

自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

这门斯坦福大学自然语言处理经典入门课,我放到B站了

征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

qIR3Abr.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK