本文主要是介绍bert之预训练(pretrain),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、数据准备
document: 每个样本是document粒度的,每个document用空行分隔
sentence:每个document又拆分为sentence,用换行符区分
每个document包含n个(n>=1)sentence
具体实例如下:
二、tfrecord生成
(1)利用 create_pretraining_data.py 即可生成tfrecord
代码传送门
python create_pretraining_data.py \
--input_file=./tmp/zh_test.txt \
--output_file=./tmp/output.record \
--vocab_file=./model_bert/chinese_L-12_H-768_A-12/vocab.txt
参数说明:
- input_file:前面预处理好的数据文件
- output_file:输出的tf-record
- vocab_file:字词典,下载的模型中包含这个文件
(2)代码中dupe_factor=10会让一条数据不同mask10次,如果像减少tfrecord生成时间,可将其设置为1
(3)要做好心里准备,生成时间比较长(35M输入文件,用了十几分钟生成完毕),而且如果不修改dupe_factor参数,生成的tfrecord文件占用内存,会比input_fille大很多倍
(4)真正想做预训练,肯定需要几十G的数据,采用上面写的方式生成tfrecord肯定在时间和内存上,都无法满足需求,后面专门写一期通过spark生成tfrecord的博客
三、开始预训练
预训练需要用到GPU,GPU版本tf安装教程,前面写过,传送门
(1)预训练命令
python run_pretraining.py \
--input_file=./tmp/output.txt \
--output_dir=./tmp/model_out \
--do_train=True \
--do_eval=True \
--bert_config_file=./model_bert/chinese_L-12_H-768_A-12/bert_config.json \
--init_checkpoint=./model_bert/chinese_L-12_H-768_A-12/bert_model.ckpt \
--train_batch_size=32 \
--max_seq_length=128 \
--max_predictions_per_seq=20 \
--num_train_steps=50 \
--num_warmup_steps=10 \
--learning_rate=2e-5
(2)可能遇到问题
在初次运行时,遇到OOM问题,此时,将train_batch_size设置小一点即可,比如将32改为16
(3)查看GPU占用情况:watch -n 1 nvidia-smi
(4)运行结果
时间:用35M文本生成的tfrecord去预训练,用GPU时间一分钟内能跑完
跑完结果:
这篇关于bert之预训练(pretrain)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!