基于BERT模型的文本分类
一、源代码和数据集下载二、代码部署运行MRPC为例1、配置参数--task_nameMRPC \ 任务名称其他任务相应修改任务--do_traintrue \ 是否做训练--do_evaltrue \ 训练完是否做验证--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_length128 \--train_batch_size4 \ 小一点32、16、8、4--learning_rate2e-5 \--num_train_epochs3.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-TF22、安装缺少的依赖包这个代码要额外使用到以下依赖包seqeval0.0.5fastprogress0.1.21在run_ner.py文件中进行参数配置--data_dirdata/ --bert_modelbert-base-uncased --output_dirmodel_sep20 --max_seq_length128 --do_train --num_train_epochs 3 --do_eval --eval_on dev二、换了一个封装好的bert-for-TF2kpe/bert-for-tf2BERT、ALBERT 和 adapter-BERT 的 Keras TensorFlow 2.0 实现。1、在pytorch环境中无法安装bert依赖可能是pytorch与bert存在环境冲突新建一个干净的虚拟环境conda create -n bert_tf2 python3.8activate bert_tf22、pip install bert-for-tf2自动安装一直报错无法解决于是尝试本地安装原码下载后进入bert-for-tf2-master目录执行python setup.py install这里好像需要把bert-for-tf2-master目录读写权限改一下授予权限此处报错如下是因为setuptools版本与bert-for-tf2的安装脚本不兼容安装兼容版本的setuptools输入pip install setuptools58.2.0期间还会遇到一些其他的版本不兼容问题报错问一下ai再安装对应的版本就可以了ai是我最好的老师。。命苦3、创建新项目并配置解释器安装TensorFlowpycharm中自动安装的是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 模型层namebert 为该层指定名称在 TensorFlow 模型中显示为层名创建的 l_bert 是一个 Keras 层可以像其他 Keras 层一样集成到模型中 l_bert bert.BertModelLayer.from_params(bert_params, namebert) # 3. 构建模型 max_seq_len 128 # 最大序列长度 input_ids tf.keras.layers.Input(shape(max_seq_len,), dtypeint32) output l_bert(input_ids) model tf.keras.Model(inputsinput_ids, outputsoutput) # 4. 加载预训练权重 bert.load_stock_weights(l_bert, model_dir)此处运行会报错因为我的tensorflow版本是2.13与 bert-for-tf2存在不兼容问题修改如下