
AdaLM 如何用 run_classifier.py 在 chemprot 数据集上微调分类模型【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilmunilm 仓库的adalm/目录提供了 AdaLM领域自适应预训练模型的下游微调代码。本文的目标是把 README 给出的 AdaLM-bio 生物医学预训练模型在 chemprot 这个关系分类任务上跑通一次完整的“训练 验证”流程最终在输出目录中拿到各 checkpoint 的 dev 指标和最优 checkpoint 记录。前提条件是单卡 CUDA GPUREADME 示例命令固定CUDA_VISIBLE_DEVICES0且带--fp16参数以及从 adalm/README.md 获取的模型权重与 chemprot 数据。准备条件1. 安装依赖。在adalm/目录下执行adalm/requirements.txt 中固定了transformers 2.10.0版本敏感不要随意升级pip install -r requirements.txt并把项目加入PYTHONPATHREADME 原命令export PYTHONPATH$PYTHONPATH:pwd2. 获取模型与数据。README 说明预训练模型 AdaLM-bio-base12 层 / 768 hidden / 132M 参数与 AdaLM-bio-small6 层 / 384 hidden / 34M 参数可从 README 中列出的 OneDrive 下载链接获取生物医学下游任务数据chemprot 属于此类从 BLURB Leaderboard 下载README 原文给出来源chemprot 数据目录中需要包含 ChemProcessor 读取的train.tsv与dev.tsv测试可选test.tsv标签集合为[false, CPR:3, CPR:4, CPR:5, CPR:6, CPR:9]共 6 类。3. 安装 apex。示例命令带--fp16而 run_classifier.py 中对--fp16的处理是直接from apex import amp未安装 NVIDIA apex 时会抛出ImportError: Please install apex ... to use fp16 training.。运行前必须处理的两个不一致README 的命令不能原样复制执行源码中有两处需要对齐以下事实均取自代码本身其一导入包名与目录名不一致。run_classifier.py 顶部是from nlu_finetune.utils_for_glue import glue_compute_metrics as compute_metrics但仓库中该文件实际位于 adalm/finetune/utils_for_glue.py。因此在你自己的本地克隆中需要让目录名与导入一致例如把adalm/finetune重命名为adalm/nlu_finetune后续命令中的脚本路径也相应改为nlu_finetune/run_classifier.py。其二--task_name是必填参数但 README 命令未传递。run_classifier.py 中该参数requiredTrue而 README 示例只export TASK_NAMEchemprot却没有把它写进命令。执行时会直接报参数缺失需要在命令中补上--task_name $TASK_NAME。配置环境变量并启动训练以下命令以 README 的 Fine-tune Classification Task 示例为基准仅做了上述两处修正。代码块中的$CKPT_PATH、$CONFIG_FILE、$VOCAB_FILE、$DATASET_PATH、$OUTPUT_PATH均为你需要替换的本地路径模型 checkpoint 目录、其 config 文件、其 vocab 文件、chemprot 数据目录即包含train.tsv/dev.tsv的目录、结果保存目录。TRAIN_CACHE/DEV_CACHE是 tokenized 特征缓存文件README 注释明确“only use for this tokenizer”换分词器时不要复用旧缓存。# Set path to read training/dev dataset export DATASET_PATH/path/to/chemprot/data/ # 含 train.tsv / dev.tsv 的目录 # Set path to save the finetuned model and result score export OUTPUT_PATH/path/to/save/result_of_finetuning export TASK_NAMEchemprot # Set path to the model checkpoint you need to test export CKPT_PATH/path/to/your/model/checkpoint # Set config file export CONFIG_FILE/path/to/config/file # Set vocab file export VOCAB_FILE/path/to/vocab/file # Set path to cache train dev features (tokenized, only use for this tokenizer!) export TRAIN_CACHE${DATASET_PATH}/$TASK_NAME.bert.cache export DEV_CACHE${DATASET_PATH}/$TASK_NAME.bert.cache # Setting the hyperparameters for the run. export BSZ32 export LR1.5e-5 export EPOCH30 export WD0.1 export WM0.1 CUDA_VISIBLE_DEVICES0 python nlu_finetune/run_classifier.py \ --model_type bert --model_name_or_path $CKPT_PATH \ --config_name $CONFIG_FILE --tokenizer_name $VOCAB_FILE --do_lower_case \ --task_name $TASK_NAME \ --data_dir $DATASET_PATH --cached_train_file $TRAIN_CACHE --cached_dev_file $DEV_CACHE \ --do_train --do_eval --logging_steps 1000 --output_dir $OUTPUT_PATH --max_grad_norm 0 \ --max_seq_length 128 --per_gpu_train_batch_size $BSZ --learning_rate $LR \ --num_train_epochs $EPOCH --weight_decay $WD --warmup_ratio $WM \ --fp16 --fp16_opt_level O2 --seed 42 --overwrite_output_dir参数要点均出自 README 与 参数定义--model_type bertAdaLM 示例按 BERT 结构加载MODEL_CLASSES中 bert 对应BertForSequenceClassification--max_seq_length 128超长序列截断短序列补 pad--max_grad_norm 0源码中仅在max_grad_norm 0时做梯度裁剪即 README 示例关闭了裁剪--do_lower_case参数帮助说明它用于 uncased 模型--overwrite_output_dir若输出目录已存在且非空脚本会抛出ValueError要求该标志main()BSZ32、LR1.5e-5、EPOCH30、WD0.1、WM0.1、seed 42均为 README 给出的示例取值。训练过程中的行为每个 epoch 结束保存一个 checkpoint 到output_dir/epoch-N/train()并记录training_args.bin每logging_steps1000步向日志和 TensorBoard 写入一条 JSON包含loss与learning_rateREADME 命令未开启--evaluate_during_training因此训练期间不做 dev 评估评估统一放在训练结束后。结果验证命令带了--do_eval训练完成后脚本会自动遍历output_dir下所有 checkpoint 逐个评估main()每个 checkpoint 的评估结果按序写入output_dir/eval_results.txt每次以覆盖方式打开文件中保留的是最后评估的 checkpoint 的结果chemprot 的评估指标由 glue_compute_metrics 路由到acc_and_micro_f1输出f1micro、acc、f1_macro、acc_and_f1四个键脚本以结果中的第一个指标即 microf1选出最优 checkpoint并写入output_dir/best_performance.json其中包含checkpoint字段形如epoch-N和各指标数值save_best_result。所以判断这次微调是否跑通看两个产物eval_results.txt中是否出现上述四个指标以及best_performance.json是否生成了带checkpoint字段的 JSON。README 中给出的 ChemProt 结果表AdaLM-bio-base 78.41、AdaLM-bio-small 72.06、BERT 71.86 等是文档报告的参考值不是本次运行必须复现的固定数值。边界与限制模型加载路径固定走--model_type bert checkpoint/config/vocab 三件套README 未提供其他 model_type 的 AdaLM 用法--fp16路径强依赖 apexapex 不可用的环境下该参数需要整体去掉而非局部调整示例为单卡命令仓库文档未给出多卡启动方式多卡需自行按--local_rank分布式逻辑验证。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考