bert之预训练(pretrain)

一、数据准备

document: 每个样本是document粒度的,每个document用空行分隔
sentence:每个document又拆分为sentence,用换行符区分
每个document包含n个(n>=1)sentence

具体实例如下:
bert之预训练(pretrain)_第1张图片
二、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
bert之预训练(pretrain)_第2张图片
(4)运行结果
时间:用35M文本生成的tfrecord去预训练,用GPU时间一分钟内能跑完
跑完结果:
bert之预训练(pretrain)_第3张图片

你可能感兴趣的:(bert)