一、源代码和数据集下载
二、代码部署运行(MRPC为例)
1、配置参数
--task_name=MRPC \ 任务名称,其他任务相应修改任务
--do_train=true \ 是否做训练
--do_eval=true \ 训练完是否做验证
--data_dir=../GLUE/glue_data/MRPC \ 数据集路径,不要有中文
--vocab_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/vocab.txt \ 语料表
--bert_config_file=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_config.json \ bert中的超参数
--init_checkpoint=../GLUE/BERT_BASE_DIR/uncased_L-12_H-768_A-12/bert_model.ckpt \ 预训练好的
--max_seq_length=128 \
--train_batch_size=4 \ 小一点32、16、8、4
--learning_rate=2e-5 \
--num_train_epochs=3.0 \ 小一点,大了运行会很慢
--output_dir=../GLUE/output 保存的训练模型放在哪
2、运行
【运行报错】AttributeError: module 'tensorflow._api.v2.train' has no attribute 'Optimizer'
原因是下载的tensorflow是2.x版本,而2.x版本已经移除了Optimizer接口
在anaconda prompt中输入conda list可以看到TensorFlow版本是2.x
【解决办法】改代码改不好,这里只能找github上使用TensorFlow2.x版本的代码了,重头开始。
一、源代码和数据集下载
1、TF2版本的BERT模型代码下载
地址如下
bhuvanakundumani/BERT-NER-TF2
2、安装缺少的依赖包
这个代码要额外使用到以下依赖包
seqeval==0.0.5
fastprogress==0.1.21
在run_ner.py文件中进行参数配置:
--data_dir=data/ --bert_model=bert-base-uncased --output_dir=model_sep20 --max_seq_length=128 --do_train --num_train_epochs 3 --do_eval --eval_on dev
二、换了一个封装好的bert-for-TF2
kpe/bert-for-tf2:BERT、ALBERT 和 adapter-BERT 的 Keras TensorFlow 2.0 实现。
1、在pytorch环境中无法安装bert依赖,可能是pytorch与bert存在环境冲突,新建一个干净的虚拟环境
conda create -n bert_tf2 python=3.8
activate bert_tf2
2、pip install bert-for-tf2自动安装一直报错:
无法解决,于是尝试本地安装,原码下载后,进入bert-for-tf2-master目录,执行
python setup.py install(这里好像需要把bert-for-tf2-master目录读写权限改一下,授予权限)
此处报错如下,是因为setuptools版本与bert-for-tf2的安装脚本不兼容,安装兼容版本的setuptools,输入pip install setuptools==58.2.0(期间还会遇到一些其他的版本不兼容问题,报错问一下ai再安装对应的版本就可以了,ai是我最好的老师。。命苦)
3、创建新项目并配置解释器
安装TensorFlow(pycharm中自动安装的是2.x版本)
4、加载模型
import tensorflow as tf import bert from bert import BertModelLayer from bert.tokenization.bert_tokenization import FullTokenizer # 1. 加载预训练模型参数 #指定模型目录 --uncased :不区分大小写 --L-12: 12 层 Transformer 层 --H-768: 隐藏层维度为 768 --A-12: 12 个注意力头 model_dir = "./uncased_L-12_H-768_A-12" #从检查点加载参数:params_from_pretrained_ckpt() 函数从预训练模型的检查点文件加载参数配置,它会读取 bert_config.json 文件并转换为 Python 对象,返回的 bert_params 是一个包含所有 BERT 模型参数的命名元组 bert_params = bert.params_from_pretrained_ckpt(model_dir) # 2. 创建 BERT 模型层 #BertModelLayer.from_params() 根据参数配置创建一个 BERT 模型层,name="bert" 为该层指定名称(在 TensorFlow 模型中显示为层名),创建的 l_bert 是一个 Keras 层,可以像其他 Keras 层一样集成到模型中 l_bert = bert.BertModelLayer.from_params(bert_params, name="bert") # 3. 构建模型 max_seq_len = 128 # 最大序列长度 input_ids = tf.keras.layers.Input(shape=(max_seq_len,), dtype='int32') output = l_bert(input_ids) model = tf.keras.Model(inputs=input_ids, outputs=output) # 4. 加载预训练权重 bert.load_stock_weights(l_bert, model_dir)此处运行会报错,因为我的tensorflow版本是2.13,与 bert-for-tf2存在不兼容问题,修改如下