本文简单记录如何将使用BERT fine tuning 的代码转化为使用Albert进行训练,改动真的不要太多。
我使用的是谷歌官方的Albert https://github.com/google-research/ALBERT
如果你原来已经有BERT的fine tuning的代码,那么你只需要修改三行代码,我这里以https://github.com/macanv/BERT-BiLSTM-CRF-NER 中的NER为例
TensorFlow 版本要 >1.12,如果是1.12 需要修改albert中的tf.compat.v1改掉,进行兼容。
下载albert pretrain 模型
解压后发现文件和bert有点不一样,所以在定义config, 词典,init_checkpoint的变量需要进行对应的文件名修改。
在BERT-BiLSTM-CRF-NER代码中,需要修改的传入的三个参数:
-bert_config_file $ALBERT_PATH/albert_config.json
-init_checkpoint $ALBERT_PATH/model.ckpt-best
-vocab_file $ALBERT_PATH/vocab_chinese.txt
修改加载config文件的类
之前是
bert_config = modeling.BertConfig.from_json_file(FLAGES.bert_config_file)
现在
bert_config = modeling.AlbertConfig.from_json_file(FLAGES.bert_config_file)
例如在BERT-BiLSTM-CRF-NER代码中,需要修改
bert_base/train//bert_lstm_ner.py中的495行
bert_config = modeling.AlbertConfig.from_json_file(args.bert_config_file)
修改加载Albert模型的类
之前是
model = modeling.BertModel()
现在
model = modeling.AlbertModel()
例如在BERT-BiLSTM-CRF-NER代码中,需要修改
bert_base/train//models.py中的82,83行
from bert_base.albert import modeling
model = modeling.AlbertModel(
== 注意,先把albert的代码下载下来,新建一个module,命名为albert,然后将所有的代码都放进去,修改import出错的代码即可 ==
更改optimization为albert的
例如在BERT-BiLSTM-CRF-NER代码中,需要修改
bert_base/train/bert_lstm_ner.py的第24行
将
from bert_base.bert import optimization
替换为
from bert_base.albert import optimization
如果报six.ensure_str 包找不到问题,升级一下six即可
pip install six --upgrade --ignore-installed six
只需要三步,就可以完成bert到albert的迁移,base版本在i5 CPU上也可以跑