Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

CLUE Benchmark

目录

CLUE 自成立以来发布了多项 NLP 评测基准,包括分类榜单,阅读理解榜单和自然语言推断榜单等,在学术界、工业界产生了深远影响。是目前应用最广泛的中文语言测评指标之一。详细可参考 CLUE论文

本项目基于 PaddlePaddle 在 CLUE 数据集上对领先的开源预训练模型模型进行了充分评测,为开发者在预训练模型选择上提供参考,同时开发者基于本项目可以轻松一键复现模型效果,也可以参加 CLUE 竞赛取得好成绩。

CLUE 评测结果

使用多种中文预训练模型微调在 CLUE 的各验证集上有如下结果:

Arch Model AVG AFQMC TNEWS IFLYTEK CMNLI OCNLI CLUEWSC2020 CSL CMRC2018 CHID C3
24L1024H ERNIE 1.0-Large-zh-cw 79.03 75.97 59.65 62.91 85.09 81.73 93.09 84.53 74.22/91.88 88.57 84.54
ERNIE 2.0-Large-zh 77.03 76.41 59.67 62.29 83.82 79.69 89.14 84.10 71.48/90.35 85.52 78.12
HFL/RoBERTa-wwm-ext-large 76.61 76.00 59.33 62.02 83.88 78.81 90.79 83.67 70.58/89.82 85.72 75.26
20L1024H ERNIE 3.0-Xbase-zh 78.39 76.16 59.55 61.87 84.40 81.73 88.82 83.60 75.99/93.00 86.78 84.98
12L768H ERNIE 3.0-Base-zh 76.05 75.93 58.26 61.56 83.02 80.10 86.18 82.63 70.71/90.41 84.26 77.88
ERNIE 1.0-Base-zh-cw 76.47 76.07 57.86 59.91 83.41 79.58 89.91 83.42 72.88/90.78 84.68 76.98
ERNIE-Gram-zh 75.72 75.28 57.88 60.87 82.90 79.08 88.82 82.83 71.82/90.38 84.04 73.69
ERNIE 2.0-Base-zh 74.32 75.65 58.25 61.64 82.62 78.71 81.91 82.33 66.08/87.46 82.78 73.19
Langboat/Mengzi-BERT-Base 74.69 75.35 57.76 61.64 82.41 77.93 88.16 82.20 67.04/88.35 83.74 70.70
ERNIE 1.0-Base-zh 74.17 74.84 58.91 62.25 81.68 76.58 85.20 82.77 67.32/87.83 82.47 69.68
HFL/RoBERTa-wwm-ext 74.11 74.60 58.08 61.23 81.11 76.92 88.49 80.77 68.39/88.50 83.43 68.03
BERT-Base-Chinese 72.57 74.63 57.13 61.29 80.97 75.22 81.91 81.90 65.30/86.53 82.01 65.38
UER/Chinese-RoBERTa-Base 71.78 72.89 57.62 61.14 80.01 75.56 81.58 80.80 63.87/84.95 81.52 62.76
8L512H UER/Chinese-RoBERTa-Medium 67.06 70.64 56.10 58.29 77.35 71.90 68.09 78.63 57.63/78.91 75.13 56.84
6L768H ERNIE 3.0-Medium-zh 72.49 73.37 57.00 60.67 80.64 76.88 79.28 81.60 65.83/87.30 79.91 69.73
HLF/RBT6, Chinese 70.06 73.45 56.82 59.64 79.36 73.32 76.64 80.67 62.72/84.77 78.17 59.85
TinyBERT6, Chinese 69.62 72.22 55.70 54.48 79.12 74.07 77.63 80.17 63.03/83.75 77.64 62.11
RoFormerV2 Small 68.52 72.47 56.53 60.72 76.37 72.95 75.00 81.07 62.97/83.64 67.66 59.41
UER/Chinese-RoBERTa-L6-H768 67.09 70.13 56.54 60.48 77.49 72.00 72.04 77.33 53.74/75.52 76.73 54.40
6L384H ERNIE 3.0-Mini-zh 66.90 71.85 55.24 54.48 77.19 73.08 71.05 79.30 58.53/81.97 69.71 58.60
4L768H HFL/RBT4, Chinese 67.42 72.41 56.50 58.95 77.34 70.78 71.05 78.23 59.30/81.93 73.18 56.45
4L512H UER/Chinese-RoBERTa-Small 63.25 69.21 55.41 57.552 73.64 69.80 66.78 74.83 46.75/69.69 67.59 50.92
4L384H ERNIE 3.0-Micro-zh 64.21 71.15 55.05 53.83 74.81 70.41 69.08 76.50 53.77/77.82 62.26 55.53
4L312H ERNIE 3.0-Nano-zh 62.97 70.51 54.57 48.36 74.97 70.61 68.75 75.93 52.00/76.35 58.91 55.11
TinyBERT4, Chinese 60.82 69.07 54.02 39.71 73.94 69.59 70.07 75.07 46.04/69.34 58.53 52.18
4L256H UER/Chinese-RoBERTa-Mini 53.40 69.32 54.22 41.63 69.40 67.36 65.13 70.07 5.96/17.13 51.19 39.68
3L1024H HFL/RBTL3, Chinese 66.63 71.11 56.14 59.56 76.41 71.29 69.74 76.93 58.50/80.90 71.03 55.56
3L768H HFL/RBT3, Chinese 65.72 70.95 55.53 59.18 76.20 70.71 67.11 76.63 55.73/78.63 70.26 54.93
2L128H UER/Chinese-RoBERTa-Tiny 44.45 69.02 51.47 20.28 59.95 57.73 63.82 67.43 3.08/14.33 23.57 28.12

AFQMC(语义相似度)、TNEWS(文本分类)、IFLYTEK(长文本分类)、CMNLI(自然语言推理)、OCNLI(自然语言推理)、CLUEWSC2020(代词消歧)、CSL(论文关键词识别)、CHID(成语阅读理解填空) 和 C3(中文多选阅读理解) 任务使用的评估指标均是 Accuracy。CMRC2018(阅读理解) 的评估指标是 EM (Exact Match)/F1,计算每个模型效果的平均值时,取 EM 为最终指标。

其中前 7 项属于分类任务,后面 3 项属于阅读理解任务,这两种任务的训练过程在下面将会分开介绍。

NOTE:具体评测方式如下

  1. 以上所有任务均基于 Grid Search 方式进行超参寻优。分类任务训练每间隔 100 steps 评估验证集效果,阅读理解任务每隔一个 epoch 评估验证集效果,取验证集最优效果作为表格中的汇报指标。

  2. 分类任务 Grid Search 超参范围: batch_size: 16, 32, 64; learning rates: 1e-5, 2e-5, 3e-5, 5e-5;因为 CLUEWSC2020 数据集较小,所以模型在该数据集上的效果对 batch_size 较敏感,所以对 CLUEWSC2020 评测时额外增加了 batch_size = 8 的超参搜索; 因为CLUEWSC2020 和 IFLYTEK 数据集对 dropout 概率值较为敏感,所以对 CLUEWSC2020 和 IFLYTEK 数据集评测时额外增加了 dropout_prob = 0.0 的超参搜索。

  3. 阅读理解任务 Grid Search 超参范围:batch_size: 24, 32; learning rates: 1e-5, 2e-5, 3e-5。阅读理解任务均使用多卡训练,其中 Grid Search 中的 batch_size 是指多张卡上的 batch_size 总和。

  4. 以上每个下游任务的固定超参配置如下表所示:

TASK AFQMC TNEWS IFLYTEK CMNLI OCNLI CLUEWSC2020 CSL CMRC2018 CHID C3
epoch 3 3 3 2 5 50 5 2 3 8
max_seq_length 128 128 128 128 128 128 256 512 64 512
warmup_proportion 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.06 0.1
num_cards 1 1 1 1 1 1 1 2 4 4

不同预训练模型在下游任务上做 Grid Search 之后的最优超参(learning_rate、batch_size)如下:

Model AFQMC TNEWS IFLYTEK CMNLI OCNLI CLUEWSC2020 CSL CMRC2018 CHID C3
ERNIE 1.0-Large-zh-cw 2e-5,64 3e-5,32 5e-5,16 2e-5,16 2e-5,32 1e-5,32 1e-5,16 2e-5,24 1e-5,24 2e-5,32
ERNIE 3.0-Xbase-zh 2e-5,16 3e-5,32 3e-5,32 3e-5,64 3e-5,64 2e-5,32 1e-5,16 3e-5,24 2e-5,24 3e-5,24
ERNIE 2.0-Large-zh 1e-5,32 3e-5,64 3e-5,32 2e-5,32 1e-5,16 3e-5,32 1e-5,64 2e-5,24 2e-5,24 3e-5,32
HFL/RoBERTa-wwm-ext-large 1e-5,32 3e-5,32 2e-5,32 1e-5,16 1e-5,16 2e-5,16 2e-5,16 3e-5,32 1e-5,24 2e-5,24
ERNIE 3.0-Base-zh 3e-5,16 3e-5,32 5e-5,32 3e-5,32 2e-5,64 2e-5,16 2e-5,32 2e-5,24 3e-5,24 3e-5,32
ERNIE 1.0-Base-zh-cw 2e-5,16 3e-5,32 5e-5,16 2e-5,16 3e-5,32 2e-5,16 2e-5,32 3e-5,24 2e-5,32 3e-5,24
ERNIE-Gram-zh 1e-5,16 5e-5,16 5e-5,16 2e-5,32 2e-5,64 3e-5,16 3e-5,64 3e-5,32 2e-5,24 2e-5,24
ERNIE 2.0-Base-zh 3e-5,64 3e-5,64 5e-5,16 5e-5,64 5e-5,32 5e-5,16 2e-5,16 2e-5,32 3e-5,24 3e-5,32
Langboat/Mengzi-Bert-Base 3e-5,32 5e-5,32 5e-5,16 2e-5,16 2e-5,16 3e-5,8 1e-5,16 3e-5,24 3e-5,24 2e-5,32
ERNIE 1.0-Base-zh 3e-5,16 3e-5,32 5e-5,16 5e-5,32 3e-5,16 2e-5,8 2e-5,16 3e-5,32 3e-5,24 3e-5,24
HFL/RoBERTa-wwm-ext 3e-5,32 3e-5,64 5e-5,16 3e-5,32 2e-5,32 3e-5,32 2e-5,32 3e-5,32 2e-5,32 3e-5,24
BERT-Base-Chinese 2e-5,16 5e-5,16 5e-5,16 5e-5,64 3e-5,16 3e-5,16 1e-5,16 3e-5,24 2e-5,32 3e-5,24
UER/Chinese-RoBERTa-Base 2e-5,16 5e-5,16 5e-5,16 2e-5,16 3e-5,16 3e-5,8 2e-5,16 3e-5,24 3e-5,32 3e-5,32
UER/Chinese-RoBERTa-Medium 3e-5,32 5e-5,64 5e-5,16 5e-5,32 3e-5,32 3e-5,16 5e-5,32 3e-5,24 3e-5,24 3e-5,32
ERNIE 3.0-Medium-zh 3e-5,32 3e-5,64 5e-5,32 2e-5,32 1e-5,64 3e-5,16 2e-5,32 3e-5,24 2e-5,24 1e-5,24
TinyBERT6, Chinese 1e-5,16 3e-5,32 5e-5,16 5e-5,32 3e-5,64 3e-5,16 3e-5,16 3e-5,32 3e-5,24 2e-5,24
RoFormerV2 Small 5e-5,16 2e-5,16 5e-5,16 5e-5,32 2e-5,16 3e-5,8 3e-5,16 3e-5,24 3e-5,24 3e-5,24
HLF/RBT6, Chinese 3e-5,16 5e-5,16 5e-5,16 5e-5,64 3e-5,16 3e-5,8 5e-5,64 2e-5,24 3e-5,32 2e-5,32
UER/Chinese-RoBERTa-L6-H768 2e-5,16 3e-5,16 5e-5,16 5e-5,16 5e-5,32 2e-5,32 3e-5,16 3e-5,32 3e-5,24 3e-5,24
ERNIE 3.0-Mini-zh 5e-5,64 5e-5,64 5e-5,16 5e-5,32 2e-5,16 2e-5,8 2e-5,16 3e-5,24 3e-5,24 3e-5,24
HFL/RBT4, Chinese 5e-5,16 5e-5,16 5e-5,16 5e-5,16 2e-5,16 2e-5,8 2e-5,16 3e-5,32 3e-5,24 3e-5,32
UER/Chinese-RoBERTa-Small 2e-5,32 5e-5,32 5e-5,16 5e-5,16 5e-5,16 2e-5,64 5e-5,32 3e-5,24 3e-5,24 3e-5,24
ERNIE 3.0-Micro-zh 3e-5,16 5e-5,32 5e-5,16 5e-5,16 2e-5,32 5e-5,16 3e-5,64 3e-5,24 3e-5,32 3e-5,24
ERNIE 3.0-Nano-zh 2e-5,32 5e-5,16 5e-5,16 5e-5,16 3e-5,16 1e-5,8 3e-5,32 3e-5,24 3e-5,24 2e-5,24
TinyBERT4, Chinese 3e-5,32 5e-5,16 5e-5,16 5e-5,16 3e-5,16 1e-5,16 5e-5,16 3e-5,24 3e-5,24 2e-5,24
UER/Chinese-RoBERTa-Mini 3e-5,16 5e-5,16 5e-5,16 5e-5,16 5e-5,32 3e-5,8 5e-5,32 3e-5,24 3e-5,32 3e-5,32
HFL/RBTL3, Chinese 5e-5,32 5e-5,16 5e-5,16 5e-5,32 2e-5,16 5e-5,8 2e-5,16 3e-5,24 2e-5,24 3e-5,24
HFL/RBT3, Chinese 5e-5,64 5e-5,32 5e-5,16 5e-5,16 2e-5,16 3e-5,16 5e-5,16 3e-5,32 3e-5,24 3e-5,32
UER/Chinese-RoBERTa-Tiny 5e-5,64 5e-5,16 5e-5,16 5e-5,16 5e-5,16 5e-5,8 5e-5,16 3e-5,24 3e-5,24 3e-5,24

其中,ERNIE 3.0-Base-zhERNIE 3.0-Medium-zhERNIE-Gram-zhERNIE 1.0-Base-zhERNIE 3.0-Mini-zhERNIE 3.0-Micro-zhERNIE 3.0-Nano-zhHFL/RBT3, ChineseHFL/RBTL3, ChineseHFL/RBT6, ChineseTinyBERT<sub>4</sub>, ChineseUER/Chinese-RoBERTa-BaseUER/Chinese-RoBERTa-MiniUER/Chinese-RoBERTa-Small 在 CLUEWSC2020 处的 dropout_prob 为 0.0,ERNIE 3.0-Base-zhHLF/RBT6, ChineseLangboat/Mengzi-BERT-BaseERNIE-Gram-zhERNIE 1.0-Base-zhTinyBERT6, ChineseUER/Chinese-RoBERTa-L6-H768ERNIE 3.0-Mini-zhERNIE 3.0-Micro-zhERNIE 3.0-Nano-zhHFL/RBT3, ChineseHFL/RBT4, ChineseHFL/RBT6, ChineseTinyBERT<sub>4</sub>, ChineseUER/Chinese-RoBERTa-MediumUER/Chinese-RoBERTa-BaseUER/Chinese-RoBERTa-MiniUER/Chinese-RoBERTa-TinyUER/Chinese-RoBERTa-Small 在 IFLYTEK 处的 dropout_prob 为 0.0。

一键复现模型效果

这一节将会对分类、阅读理解任务分别展示如何一键复现本文的评测结果。

启动 CLUE 分类任务

以 CLUE 的 TNEWS 任务为例,启动 CLUE 任务进行 Fine-tuning 的方式如下:

export CUDA_VISIBLE_DEVICES=0
export TASK_NAME=TNEWS
export LR=3e-5
export BS=32
export EPOCH=6
export MAX_SEQ_LEN=128
export MODEL_PATH=ernie-3.0-medium-zh

cd classification
mkdir ernie-3.0-medium-zh
python -u ./run_clue_classifier.py \
    --model_name_or_path ${MODEL_PATH} \
    --task_name ${TASK_NAME} \
    --max_seq_length ${MAX_SEQ_LEN} \
    --batch_size ${BS}   \
    --learning_rate ${LR} \
    --num_train_epochs ${EPOCH} \
    --logging_steps 100 \
    --seed 42  \
    --save_steps  100 \
    --warmup_proportion 0.1 \
    --weight_decay 0.01 \
    --adam_epsilon 1e-8 \
    --output_dir ${MODEL_PATH}/models/${TASK_NAME}/${LR}_${BS}/ \
    --device gpu  \
    --dropout 0.1 \
    --gradient_accumulation_steps 1 \
    --save_best_model True \
    --do_train \

另外,如需评估,传入参数 --do_eval 即可,如果只对读入的 checkpoint 进行评估不训练,则不需传入 --do_train

其中参数释义如下:

  • model_name_or_path 指示了 Fine-tuning 使用的具体预训练模型,可以是 PaddleNLP 提供的预训练模型,可以选择Transformer预训练模型汇总 中相对应的中文预训练权重。注意 CLUE 任务应选择中文预训练权重。
  • task_name 表示 Fine-tuning 的分类任务,当前支持 AFQMC、TNEWS、IFLYTEK、OCNLI、CMNLI、CSL、CLUEWSC2020。
  • max_seq_length 表示最大句子长度,超过该长度将被截断。
  • batch_size 表示每次迭代每张卡上的样本数目。
  • learning_rate 表示基础学习率大小,将于 learning rate scheduler 产生的值相乘作为当前学习率。
  • num_train_epochs 表示训练轮数。
  • logging_steps 表示日志打印间隔。
  • save_steps 表示模型保存及评估间隔。
  • save_best_model 是否保存在评估集上效果最好的模型,默认为 True
  • output_dir 表示模型保存路径。
  • device 表示训练使用的设备, 'gpu' 表示使用GPU, 'xpu' 表示使用百度昆仑卡, 'cpu' 表示使用 CPU。

Fine-tuning 过程将按照 logging_stepssave_steps 的设置打印出如下日志:

global step 100/20010, epoch: 0, batch: 99, rank_id: 0, loss: 2.734340, lr: 0.0000014993, speed: 8.7969 step/s
eval loss: 2.720359, acc: 0.0827, eval done total : 25.712125062942505 s
global step 200/20010, epoch: 0, batch: 199, rank_id: 0, loss: 2.608563, lr: 0.0000029985, speed: 2.5921 step/s
eval loss: 2.652753, acc: 0.0945, eval done total : 25.64827537536621 s
global step 300/20010, epoch: 0, batch: 299, rank_id: 0, loss: 2.555283, lr: 0.0000044978, speed: 2.6032 step/s
eval loss: 2.572999, acc: 0.112, eval done total : 25.67190170288086 s
global step 400/20010, epoch: 0, batch: 399, rank_id: 0, loss: 2.631579, lr: 0.0000059970, speed: 2.6238 step/s
eval loss: 2.476962, acc: 0.1697, eval done total : 25.794789791107178 s

使用 Trainer 启动 CLUE 分类任务

PaddleNLP 提供了 Trainer API,本示例新增了run_clue_classifier_trainer.py脚本供用户使用。

export CUDA_VISIBLE_DEVICES=0
export TASK_NAME=TNEWS
export LR=3e-5
export BS=32
export EPOCH=6
export MAX_SEQ_LEN=128
export MODEL_PATH=ernie-3.0-medium-zh

cd classification
mkdir ernie-3.0-medium-zh

python -u ./run_clue_classifier_trainer.py \
    --model_name_or_path ${MODEL_PATH} \
    --dataset "clue ${TASK_NAME}" \
    --max_seq_length ${MAX_SEQ_LEN} \
    --per_device_train_batch_size ${BS}   \
    --per_device_eval_batch_size ${BS}   \
    --learning_rate ${LR} \
    --num_train_epochs ${EPOCH} \
    --logging_steps 100 \
    --seed 42  \
    --save_steps 100 \
    --warmup_ratio 0.1 \
    --weight_decay 0.01 \
    --adam_epsilon 1e-8 \
    --output_dir ${MODEL_PATH}/models/${TASK_NAME}/${LR}_${BS}/ \
    --device gpu  \
    --do_train \
    --do_eval \
    --metric_for_best_model "eval_accuracy" \
    --load_best_model_at_end \
    --save_total_limit 3 \

大部分参数含义如上文所述,这里简要介绍一些新参数:

  • dataset, 同上文task_name,此处为小写字母。表示 Fine-tuning 的分类任务,当前支持 afamc、tnews、iflytek、ocnli、cmnli、csl、cluewsc2020。
  • per_device_train_batch_size 同上文batch_size。训练时,每次迭代每张卡上的样本数目。
  • per_device_eval_batch_size 同上文batch_size。评估时,每次迭代每张卡上的样本数目。
  • warmup_ratio 同上文warmup_proportion,warmup步数占总步数的比例。
  • metric_for_best_model 评估时,最优评估指标。
  • load_best_model_at_end 训练结束时,时候加载评估结果最好的 ckpt。
  • save_total_limit 保存的ckpt数量的最大限制

启动 CLUE 阅读理解任务

以 CLUE 的 C3 任务为例,多卡启动 CLUE 任务进行 Fine-tuning 的方式如下:

cd mrc

MODEL_PATH=ernie-3.0-medium-zh
BATCH_SIZE=6
LR=2e-5

python -m paddle.distributed.launch --gpus "0,1,2,3" run_c3.py \
    --model_name_or_path ${MODEL_PATH} \
    --batch_size ${BATCH_SIZE} \
    --learning_rate ${LR} \
    --max_seq_length 512 \
    --num_train_epochs 8 \
    --do_train \
    --warmup_proportion 0.1 \
    --gradient_accumulation_steps 3 \

需要注意的是,如果显存无法容纳所传入的 batch_size,可以通过传入 gradient_accumulation_steps 参数来模拟该 batch_size

批量启动 Grid Search

环境依赖

Grid Search 需要在 GPU 环境下进行,需要注意的是 C3 任务需要显存大于 16 GB,最好是在显存 32 GB的环境下启动。

Grid Search 中的 GPU 调度需要依赖 pynvml 库,pynvml 库提供了 GPU 管理的 Python 接口。可启动以下命令进行安装 pynvml:

pip install pynvml

一键启动方法

运行下面一句命令即可启动 Grid Search 任务。前期需要注意数据集是否正常下载,否则训练任务不会正式启动。 脚本默认不保存模型,如需保存每个超参数下最好的模型,需要修改 Python 脚本中的 --save_best_models 参数为 True。

cd grid_search_tools

# 这里 ernie-3.0-base-zh 是模型名,也可以传用户自定义的模型目录
# 自定义的模型目录需要有 model_config.json, model_state.pdparams, tokenizer_config.json 和 vocab.txt 四个文件
python grid_seach.py ernie-3.0-base-zh

确认模型所有任务训练完成后,可以调用脚本 extract_result.sh 一键抽取 Grid Search 结果,打印出每个任务的最佳结果和对应的超参数,例如:

bash extract_result.sh ernie-3.0-base-zh
AFQMC	TNEWS	IFLYTEK	CMNLI	OCNLI	CLUEWSC2020	CSL	CMRC2018	CHID	C3
75.93	58.26	61.56	83.02	80.10	86.18	82.63	70.71/90.41	84.26	77.88
====================================================================
Best hyper-parameters list:
====================================================================
TASK	result	(lr, batch_size, dropout_p)
AFQMC	75.93	(3e-05,16,0.1)
TNEWS	58.26	(3e-05,32,0.1)
IFLYTEK	61.56	(5e-05,32,0.0)
CMNLI	83.02	(3e-05,32,0.1)
OCNLI	80.10	(2e-05,64,0.1)
CLUEWSC2020	86.18	(2e-05,16,0.0)
CSL	82.63	(2e-05,32,0.1)
CMRC2018	70.71/90.41	(2e-05,24,0.1)
CHID	84.26	(3e-05,24,0.1)
C3	77.88	(3e-05,32,0.1)

另外,如遇意外情况(如机器重启)导致训练中断,可以直接再次启动 grid_search.py 脚本,之前已完成(输出完整日志)的任务则会直接跳过。

Grid Search 脚本说明

本节介绍 grid_search_tools 目录下各个脚本的功能:

  • grid_search.py Grid Search 任务入口脚本,该脚本负责调度 GPU 资源,可自动将 7 个分类任务、3 个阅读理解下所有超参数对应的任务完成,训练完成后会自动调用抽取结果的脚本 extract_result.sh 打印出所有任务的最佳结果和对应的超参。
  • warmup_dataset_and_model.py 首次运行时,该脚本完成模型下载(如需)、数据集下载,阅读理解任务数据预处理、预处理文件缓存等工作,再次运行则会检查这些文件是否存在,存在则跳过。该脚本由 grid_search.py 在 Grid Search 训练前自动调用,预处理 cache 文件生成后,后面所有训练任务即可加载缓存文件避免重复进行数据预处理。如果该阶段任务失败,大多需要检查网络,解决之后需重启 grid_search.py,直到训练正常开始。该脚本也可手动调用,需要 1 个参数,模型名称或目录。该脚本在使用 Intel(R) Xeon(R) Gold 6271C CPU 且 --num_proc默认为 4 的情况下需约 30 分钟左右完成,可以更改 run_mrc.sh 中的 --num_proc 参数以改变生成 cache 的进程数。需要注意的是,若改变 num_proc,之前的缓存则不能再使用,该脚本会重新处理数据并生成新的 cache,cache 相关内容可查看datasets.Dataset.map文档
  • extract_result.sh 从日志抽取每个任务的最佳结果和对应的最佳超参并打印,grid_search.py 在完成训练任务后会自动调用,也可手动调用,需要 1 个参数:模型名称或目录。手动调用前需要确认训练均全部完成,并且保证该目录下有分类和阅读理解所有任务的日志。
  • run_mrc.sh 阅读理解任务的启动脚本。
  • run_cls.sh 分类任务的启动脚本。

参加 CLUE 竞赛

对各个任务运行预测脚本,汇总多个结果文件压缩之后,即可提交至 CLUE 官网进行评测。

下面 2 小节会分别介绍分类、阅读理解任务产生预测结果的方法。

分类任务

以 TNEWS 为例,可以直接使用脚本 classification/run_clue_classifier.py 对单个任务进行预测,注意脚本启动时需要传入参数 --do_predict。假设 TNEWS 模型所在路径为 ${TNEWS_MODEL},运行如下脚本可得到模型在测试集上的预测结果,预测结果会写入地址 ${OUTPUT_DIR}/tnews_predict.json

cd classification
OUTPUT_DIR=results
mkdir ${OUTPUT_DIR}

python run_clue_classifier.py \
    --task_name TNEWS \
    --model_name_or_path ${TNEWS_MODEL}  \
    --output_dir ${OUTPUT_DIR} \
    --do_predict \

阅读理解任务

以 C3 为例,直接使用 mrc/run_c3.py对该任务进行预测,注意脚本启动时需要传入参数 --do_predict。假设 C3 模型所在路径为 ${C3_MODEL},运行如下脚本可得到模型在测试集上的预测结果,预测结果会写入地址 ${OUTPUT_DIR}/c311_predict.json

cd mrc
OUTPUT_DIR=results
mkdir ${OUTPUT_DIR}

python run_c3.py \
    --model_name_or_path ${C3_MODEL} \
    --output_dir ${OUTPUT_DIR} \
    --do_predict \