实战:采用字mask和wwm mask在中文领域内finetune bert模型

随着google发布bert模型,bert改进版本已经到来,bert-wwm、 bert-wwm-ext、 Roberta-wwm-ext、ENRIE、XLNET各种变种版本都出现了,本人主要这对google开源的bert版本,修改其源码,数据处理上上采用字mask和wwmmask,框架依然采用tensoflow,但是将源码中estimator显式训练,个人认为estimator训练过程是个黑盒子,对于模型损失函数和准确率不好调试。

代码地址

https://github.com/yanqiuxia/BERT-PreTrain

与google开源代码更改地方

1. 移除 google estimator,采用自己train方法

google 开源bert run_pretraining.py代码 

实战:采用字mask和wwm mask在中文领域内finetune bert模型

 

改写的train 代码 可以显式观察模型训练情况 

实战:采用字mask和wwm mask在中文领域内finetune bert模型

实战:采用字mask和wwm mask在中文领域内finetune bert模型

实战:采用字mask和wwm mask在中文领域内finetune bert模型

 

2.数据预处理

google源码中文只支持字mask,对于wwm mask需要修改,所以将源码改成既支持字mask,和wwm mask。字mask和源代码相同,下面主要讲wwm mask。

wwm 数据预处理脚本  modi_create_pretraining_data.py,输入数据格式是:一行为一句,篇章之间分割采用行分割,空格为已经分好词语。采用 modi_tokenization.py进行分词,例如词'市长'将被分为'市','##长'两个词,在进行'create_masked_lm_predictions'需要把'##'去掉,具体见代码。

 

将##x替换为x 

实战:采用字mask和wwm mask在中文领域内finetune bert模型

 

3.输入模型数据的修改

预先将字mask和wwm mask数据存储为tf_record格式,读入数据直接采用reader_tfrecord

read tfrecord 

实战:采用字mask和wwm mask在中文领域内finetune bert模型

 

生成训练和验证batch 

实战:采用字mask和wwm mask在中文领域内finetune bert模型