bert4keras预训练的一些问题总结

1. 近日在使用 bert4keras ,在原有的 Roberta 训练领域内的 roberta的时候遇到了一些问题,在此记录一下,便于日后的翻阅。

贴一下bert4keras的git:https://github.com/bojone/bert4keras
里面的 pretraining 文件夹就是预训练脚本,pretraining 文件夹中有两个文件,
一个是 data_utils.py : 将预料生成格式为 tfrecord 格式的文件
另一个是 pretraining.py : 将 tfrecord 格式的文件进行读取,并训练
注:训练脚本只支持 roberta、gpt、unilm 的预训练

2.预训练 roberta

因为 roberta 去掉了 NSP 任务,所以语聊格式为 txt,一行一句话,行与行之间没有空行

3.模型输出

训练好的模型输出是这个样子的:
bert4keras预训练的一些问题总结_第1张图片
这样的模型
我用 build_transformer_model 去加载便产生了各种错误
我用 model.load_weights() 加载依然产生了错误
经过查询资料,最终解决方案如下:

分割线

到 pretraining.py 中修改如下内容:

1.在函数 build_transformer_model_for_pretraining 中,返回的只有 train_model
	更改为
	return train_model, bert  也就是将 bert 模型也返回
	
2.将
	train_model.fit(
    dataset,
    steps_per_epoch=steps_per_epoch,
    epochs=epochs,
    callbacks=[checkpoint, csv_logger],
	)
	注释掉,也就是不让他进行训练,让他直接进行模型的构建
	
3. 然后用 train_model 去加载已经保存的模型
	train_model.load_weights('/你的路径/bert_model.ckpt')

4. 最后用 刚才返回的 bert 去进行权重的保存:
	bert.save_weights_as_checkpoint(filename='/你的路径/bert_model_0000.ckpt')

这样一顿操作下来就会在你的路径下发现多出了以下几个文件:
bert4keras预训练的一些问题总结_第2张图片
是不是有点熟悉,这样的模型就可以直接用 build_transformer_model 进行直接的加载啦!

本人疏学浅,大佬们发现有写的不对的地方,请多多指出,我会改正。

你可能感兴趣的:(bert4keras,python,深度学习,开发语言)