人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
run_glue.py微调脚本代码
python命令执行run_glue.py模型微调文件进行微调模型
微调脚本文件 transformers:transformers-cli login、transformers-cli upload
Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件
注意:
1.解决每次执行torch.hub.load但是每次同时又重新下载预训练模型文件的问题:
当第一次执行torch.hub.load加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
后面每次再执行相同的代码时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
即能解决每次执行torch.hub.load每次又重新下载预训练模型文件的问题。
预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
2.解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题:
解决方式同上述第一点解决每次执行torch.hub.load又重新下载预训练模型文件的问题。
当第一次python命令执行run_glue.py模型微调文件加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
后面每次再执行相同的python命令执行run_glue.py时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
即能解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题。
预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
创建run_glue.sh脚本中使用python ./run_glue.py进行模型微调:
# 注意: 这是一段使用shell运行的脚本, 运行过程中需要请求AWS的S3进行预训练模型下载
# 定义GLUE_DIR: 微调数据所在路径, 这里我们使用glue_data中的数据作为微调数据
export GLUE_DIR=./glue_data
# 定义OUT_DIR: 模型的保存路径, 我们将模型保存在当前目录的bert_finetuning_test文件中
export OUT_DIR=./bert_finetuning_test/
python ./run_glue.py \
--model_type bert \
--model_name_or_path bert-base-uncased \
--task_name MRPC \
--do_train \
--do_eval \
--do_lower_case \
--data_dir $GLUE_DIR/MRPC \
--max_seq_length 128 \
--per_gpu_eval_batch_size=8 \
--per_gpu_train_batch_size=8 \
--learning_rate 2e-5 \
--num_train_epochs 1.0 \
--output_dir $OUT_DIR
# 使用python运行微调脚本
# --model_type: 选择需要微调的模型类型, 这里可以选择BERT, XLNET, XLM, roBERTa, distilBERT, ALBERT
# --model_name_or_path: 选择具体的模型或者变体, 这里是在英文语料上微调, 因此选择bert-base-uncased
# --task_name: 它将代表对应的任务类型, 如MRPC代表句子对二分类任务
# --do_train: 使用微调脚本进行训练
# --do_eval: 使用微调脚本进行验证
# --data_dir: 训练集及其验证集所在路径, 将自动寻找该路径下的train.tsv和dev.tsv作为训练集和验证集
# --max_seq_length: 输入句子的最大长度, 超过则截断, 不足则补齐
# --learning_rate: 学习率
# --num_train_epochs: 训练轮数
# --output_dir $OUT_DIR: 训练后的模型保存路径
第二步: 配置微调脚本参数
注意:下面创建的run_glue.sh文件可以放到./transformers/examples目录下执行也可以放到其他任意目录下执行,
并且run_glue.sh文件中执行的“python run_glue.py”命令的该./transformers/examples目录下的run_glue.py文件
也同样可以放到其他任意目录下。命令运行过程中会下载 /home/用户名/.cache/torch/transformers/xxx 的预训练模型文件
或 C:/Users/Administrator/.cache/torch/transformers/xxx 的预训练模型文件,
该文件内部实质为https://cdn.huggingface.co/bert-base-uncased-pytorch_model.bin。
./transformers/examples目录下创建run_glue.sh文件, 写入内容如下:
# 定义DATA_DIR: 微调数据所在路径, 这里我们使用GLUE数据集合中的MRPC数据集作为微调数据
# 把download_glue_data.py下载的GLUE数据集合中的MRPC数据集放到"../../glue_data/MRPC/"中
export DATA_DIR="../../glue_data"
# 定义SAVE_DIR: 模型的保存路径, 我们将模型保存在"../../bert_finetuning_test"中
export SAVE_DIR="../../bert_finetuning_test"
# python运行的是 ./transformers/examples/run_glue.py 微调脚本
# --model_type: 选择需要微调的模型类型, 这里可以选择BERT, XLNET, XLM, roBERTa, distilBERT, ALBERT
# --model_name_or_path: 选择具体的模型或者变体, 这里是在英文语料上微调, 因此选择bert-base-uncased
# --task_name: 它将代表对应的任务类型, 如MRPC代表句子对二分类任务,那么便要使用GLUE数据集合中的MRPC数据集作为微调数据
# --do_train: 使用微调脚本进行训练
# --do_eval: 使用微调脚本进行验证
# --data_dir: 训练集及其验证集所在路径, 将自动寻找该路径下的train.tsv和dev.tsv作为训练集和验证集
# --max_seq_length: 输入句子的最大长度, 超过则截断, 不足则补齐
# --learning_rate: 学习率
# --num_train_epochs: 训练轮数
# --output_dir $SAVE_DIR: 训练后的模型保存路径
# --overwrite_output_dir: 再次训练时将清空之前的保存路径内容重新写入
python run_glue.py \
--model_type BERT \
--model_name_or_path bert-base-uncased \
--task_name MRPC \
--do_train \
--do_eval \
--data_dir $DATA_DIR/MRPC/ \
--max_seq_length 128 \
--learning_rate 2e-5 \
--num_train_epochs 1.0 \
--output_dir $SAVE_DIR \
--overwrite_output_dir
1.配置微调脚本参数
注意:下面创建的run_cn.sh文件可以放到./transformers/examples目录下执行也可以放到其他任意目录下执行,
并且run_glue.sh文件中执行的“python run_glue.py”命令的该./transformers/examples目录下的run_glue.py文件
也同样可以放到其他任意目录下。命令运行过程中会下载 /home/用户名/.cache/torch/transformers/xxx 的预训练模型文件
或 C:/Users/Administrator/.cache/torch/transformers/xxx 的预训练模型文件,
该文件内部实质为https://cdn.huggingface.co/bert-base-uncased-pytorch_model.bin。
下面在./transformers/examples/run_glue.py同级目录下创建run_cn.sh文件, 写入内容如下:
# 定义DATA_DIR: 微调数据所在路径
export DATA_DIR="../../cn_data"
# 定义SAVE_DIR: 模型的保存路径, 我们将模型保存在当前目录的bert_finetuning文件中
export SAVE_DIR="../../bert_cn_finetuning"
# 使用python运行微调脚本
# --model_type: 选择BERT
# --model_name_or_path: 选择bert-base-chinese
# --task_name: 句子二分类任务SST-2
# --do_train: 使用微调脚本进行训练
# --do_eval: 使用微调脚本进行验证
# --data_dir: "./cn_data/SST-2/", 将自动寻找该路径下的train.tsv和dev.tsv作为训练集和验证集
# --max_seq_length: 128,输入句子的最大长度
# --output_dir $SAVE_DIR: "./bert_finetuning/", 训练后的模型保存路径
python run_glue.py \
--model_type BERT \
--model_name_or_path bert-base-chinese \
--task_name SST-2 \
--do_train \
--do_eval \
--data_dir $DATA_DIR/ \
--max_seq_length 128 \
--learning_rate 2e-5 \
--num_train_epochs 1.0 \
--output_dir $SAVE_DIR \
--overwrite_output_dir