自从2018年Bert发布之后,刷新了很多NLP任务,取得了SOTA的结果,然而预训练模型远没有结束,近期有一些bert的变种模型推出,比如bert-wwm,bert-wwm-ext,albert,roberta等等,还包括百度的ernie1.0,ernie2.0,这些模型都对bert进行了改进。
本文主要讲述一下论文《Pre-Training with Whole Word Masking for Chinese BERT 》在BERT, ERNIE, BERT-wwm模型的实验结果。
论文地址https://arxiv.org/abs/1906.08101
github地址https://github.com/ymcui/Chinese-BERT-wwm
关于bert的基本理解,可以参考博客https://www.cnblogs.com/rucwxb/p/10277217.html
目前很多NLP工程师都已经使用bert在自己的数据集上做过很多任务了,并且取得了不错的效果,最基本bert预训练模型的结构如下:
其他bert模型的变种也基本都是这种结构,这样我们在做实验对比的时候就会很方便,只需要选择对应模型的这5个文件即可,区别在于他们训练的语料或者任务不一样。
最原始的bert是masked WordPiece token而不是a whole word,这在处理中文的时候会有限制,在google推出bert-wwm(Whole Word Masking)之前,百度已经推出ERNIE模型,率先采用了这种策略。
Figure1是wwm的实例
例如“模型”是一个词,如果其中一个字被mask掉,那么另一部分也将被mask,也就是说一个词的部分被mask,那么这个词将全部被mask,这样会保证汉语分词的语义。
下面正式介绍论文内容:
- Chinese BERT with Whole Word Masking
2.1)Data Processing
首先下载wiki数据,地址如下https://dumps.wikimedia.org/zhwiki/latest/
2.2)Pre-Training
使用官方的BERT-base(Chinese)分两个stage训练,第一个stage:最大长度为128的语料上训练了100k步,batch_size大小为2560,初始学习率为1e-4(warm-up率为10%);第二个stage:最大长度为512的语料上训练了100k步,batch_size大小为384,都采用LAMB优化器,这个优化器可以满足比较大的batch。
LAMB优化器:https://github.com/ymcui/LAMB\_Optimizer\_TF
2.3)Fine-Tuning on Downstream Tasks
在fine-tuning下游任务的时候,除了bert_config.json和vocab.txt这两个不替换外,只需要替换其他的三个文件即可。
- Experiments
实验涉及到的NLP任务以及对应的数据源有:1)机器阅读理解:CMRC 2018,DRCD,CJRC(http://cail.cipsc.org.cn);2)命名实体识别:People Daily(https://github.com/ProHiryu/bert-chinese-ner/tree/master/data),MSRA\_NER;3)自然语言推理:XNLI;4)语义分类:ChnSentiCorp(https://github.com/pengming617/bert\_classification),Sina Weibo(https://github.com/SophonPlus/ChineseNlpCorpus/);5)句子对匹配:LCQMC,BQ Corpus;6)文档分类:THUCNews。每个实验运行10次,指标取平均值和最大值
实验结果如下:
实验平台为tensorflow,由于ERNIE官方只提供PaddlePaddle版本,因此需要把ERNIE的权重转换为tensorflow版本。
3.1)Machine Reading Comprehension: CMRC 2018, DRCD, CJRC
机器阅读理解是根据给定文档回答问题的document-level的建模任务。
CMRC 2018 :是span-extraction机器阅读理解数据集,是根据问题从原文中抽取一部分作为答案的数据集,类似SQuAD
DRCD :也是span-extraction数据集,只不过是传统的中文。
CJRC :类似CoQA数据集,有yes/no问题,无答案问题和span-extraction问题,数据来自中国法律文档
实验结果如下:
从实验结果来看,ERNIE在DRCD上表现比较差,原因是ERNIE删除了传统的中文字符,在比较专业的文档上BERT-wwm上表现的比BERT和ERNIE好。中文分词可能会影响性能,继而影响基于分词的ERNIE和BERT-wwm。
3.2) Named Entity Recognition: People Daily, MSRA-NER
People Daily: 来自人民日报的数据,包括正式的新闻。
MSRA-NER:微软亚洲研究院数据,来自SIGHAN Bakeoff 2006(http://sighan.cs.uchicago.edu/bakeoff2006/)
实验结果如下:
实验表明:ERNIE在两个数据集的表现好,尤其在peak preformance,BERT-wwm有一个好的平均值,由此说明中文分词可以提升NER的性能
3.3) Natural Language Inference: XNLI
ERNIE表现最优
3.4) Sentiment Classification: ChnSentiCorp, Sina Weibo
ChnSentiCorp: 中文情感分析数据集
Sina Weibo : 是正负二分类数据,train/dev/test数据大小为100k/10k/10k
ERNIE表现比较好,原因是采用了论坛等非正式数据进行预训练,所以在微博数据表现比较好
3.5) Sentence Pair Matching: LCQMC, BQ Corpus
3.6) Document Classification: THUCNews
4 Useful Tips
1.)初始化学习率非常重要,最好进行tune
2.)BERT和BERT-wwm有相同的最好初始学习率,使用ERNIE的时候最好tune初始学习率
3.)BERT和BERT-wwm是在wikipedia上训练的,所以对正式的文档支持好,ERNIE对像微博一样的非正式文档表现好。
4.)在机器阅读理解和文档分类等长序列任务上建议使用BERT或BERT-wwm
5.)如果任务数据与预训练使用的数据差别比较大的时候,建议在任务数据上使用另一个预训练步骤
6.)处理传统的中文文档,建议使用BERT或BERT-wwm