BERT等预训练模型实践浅析-阿里云开发者社区

开发者社区> 人工智能> 正文

BERT等预训练模型实践浅析

简介: ##1.背景 近期,在NLP领域预训练模型受到了越来越多的关注。从ELMo到BERT,预训练模型在不同的NLP问题取得了很好的效果。本文参考To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks论文, 针对预训练模型BERT/EMLo,分析其在实际问题中的使用方式。 ##2.怎么用BERT

1.背景

近期,在NLP领域预训练模型受到了越来越多的关注。从ELMo到BERT,预训练模型在不同的NLP问题取得了很好的效果。本文参考To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks论文, 针对预训练模型BERT/EMLo,分析其在实际问题中的使用方式。

2.怎么用BERT/ELMo解决问题

对于预训练模型一般有两种使用方式:

1) Feature extraction:

此方法模型的权重被固定的给下游任务使用,优势在于模型的权重只训练了一次,计算量较小。

2) Fine-tuning:

此方法模型的权重重新被下游任务重新更新,优势在于针对特定任务进行了微调,模型对特定任务表现效果较好。

3.实验设置

3.1Feature extraction

对于ELMo和BERT,从所有层中提取单词的上下文表示。 在下游任务训练过程中,学习层的线性加权组合,它被用作任务特定模型的输入。 对于情感分析,采用双向分类网络。 对于句子对匹配任务,我们使用ESIM模型。 对于NER,使用LSTM+CRF模型。

3.2 Finetune ELMo

对LM状态进行max-pool并添加softmax图层进行文本分类。 对于句子对匹配任务,计算LM状态之间的跨句子双重注意力并使用池化,然后添加softmax层。 对于NER,使用LSTM+CRF模型。

3.3 Finetune BERT

将句子表示提供给softmax层,用于文本分类和句子对匹配任务。 对于NER,提取每个标记的第一个单词的表示输入给softmax。

4.实验结果

4.1 BERT vs ELMo

ELMo和BERT都比传统的表示学习方法如Skip-thoughts好,不同任务的Feature extraction vs Finetune效果对比不一样。ELMo来说,句对任务(MNLI )Feature extraction效果远比Finetune好,对BERT来说,句子对任务 (STS-B)Finteune效果比Feature extraction好。原因:参考CV领域,原始任务和目标任务越接近,迁移学习效果越好,BERT预训练中有预测下一句的任务,因此理所当然效果会好。然而为什么ELMo Fiinetune后效果会差呢?

20190504201202.jpg

这要从句子对任务本身和ELMo的模型结构说起,EMLo使用的是双向LSTM,并不擅长捕捉句子之间的交互信息,而基于attention的Tranformer就不一样了,比较擅长捕捉句子间的交互信息,事实上在文本匹配领域,交互模型一般都比孪生网络效果好。下图从连个实验验证了原生的EMLo本身不擅长句子对任务和BERT擅长句子对任务。

20190504210843.jpg

如上图所示,EMLo增加了交互的attention之后句子对任务效果提升明显,证明LSTM不擅长捕捉句子交互信息。BERT对不同句子进行分别编码后准确率下降,也证明BERT原生擅长捕捉句子之间交互信息。

4.2 如何更好的Finetune

既然Finetune之后效果还会变差,有没有办法解决这个问题呢。针对NER任务 (句子对任务暂时无解),有两种解决方法:1) 增加模型复杂度, 比如增加CRF层,如下图所示,效果蹭蹭蹭上去了。2) 复杂的Finetune技巧如三角学习率 (slanted triangular learning rates) 、 discriminative fine-tuning、 gradual unfreezing。 这些技巧在BERT paper也都介绍过,实为海量模型Finetune的大杀器。

20190504201211.jpg

4.3不同层对任务影响

在实际的下游任务中,NLP和CV有一个很大的区别。NLP不同任务可能需要的是上游任务的某些层,比如BERT和ELMo论文所述,靠近输入的层捕捉到词法信息擅长做POS等任务,靠近输出的层捕捉到语义信息。下图的实验结果进一步证明了这个结论。

20190504201133.jpg

实验中使用不同层的向量求均值作为下游任务输入,可以看出需要语义理解的任务,越接近输出的层表征效果越好。

6.结论

1.实际业务问题和Pretrain任务越接近,取得的效果越好

2.实际使用BERT 如有足够训练数据,Finetune效果会较好,反之,使用Feature extraction

3.实际使用ELMo, 一般情况下使用Feature extraction 效果较好

4.BERT比较擅长做句子对任务

5.不论Finetune 还是pretrained 模型,取特征的层数取决于任务类型,一般语义相关的取接近输出层,词法相关的取接近输入层,特殊情况可取多层加权平均。

参考文献

  1. To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks
  2. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
  3. Deep contextualized word representations

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章