8
8
9
9
使用多种中文预训练模型微调在 CLUE 的各验证集上有如下结果:
10
10
11
- | Model | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL |
12
- | --------------------- | ----- | ----- | ------- | ----- | ----- | ----------- | ----- |
13
- | RoBERTa-wwm-ext-large | 76.20 | 59.50 | 62.10 | 84.02 | 79.15 | 90.79 | 82.03 |
14
11
12
+ | Model | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | C<sup >3</sup > |
13
+ | --------------------- | ----- | ----- | ------- | ----- | ----- | ----------- | ----- | ------------- |
14
+ | RoBERTa-wwm-ext-large | 76.20 | 59.50 | 62.10 | 84.02 | 79.15 | 90.79 | 82.03 | 75.79 |
15
15
16
- 其中 AFQMC、TNEWS、 IFLYTEK、CMNLI、OCNLI、CLUEWSC2020 和 CSL 任务使用的评估指标均是 Accuracy。
16
+
17
+ AFQMC、TNEWS、IFLYTEK、CMNLI、OCNLI、CLUEWSC2020、CSL 和 C<sup >3</sup > 任务使用的评估指标均是 Accuracy。
18
+ 其中前 7 项属于分类任务,后面 1 项属于阅读理解任务,这两种任务的训练过程在下面将会分开介绍。
17
19
18
20
** NOTE:具体评测方式如下**
19
- 1 . 以上所有任务均基于 Grid Search 方式进行超参寻优,训练每间隔 100 steps 评估验证集效果,取验证集最优效果作为表格中的汇报指标。
21
+ 1 . 以上所有任务均基于 Grid Search 方式进行超参寻优。分类任务训练每间隔 100 steps 评估验证集效果,阅读理解任务每隔一个 epoch 评估验证集效果,取验证集最优效果作为表格中的汇报指标。
22
+
23
+ 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 的超参搜索。
24
+
25
+ 3 . 阅读理解任务 Grid Search 超参范围:batch_size: 24, 32; learning rates: 1e-5, 2e-5, 3e-5。
26
+
27
+ 4 . 以上任务的 epoch、max_seq_length、warmup proportion 如下表所示:
20
28
21
- 2 . Grid Search 超参范围: batch_size: 16, 32, 64; learning rates: 1e-5, 2e-5, 3e-5, 5e-5;
29
+ | TASK | AFQMC | TNEWS | IFLYTEK | CMNLI | OCNLI | CLUEWSC2020 | CSL | CMRC2018 | CHID | C<sup >3</sup > |
30
+ | ----------------- | ----- | ----- | ------- | ----- | ----- | ----------- | ---- | -------- | ---- | ------------- |
31
+ | epoch | 3 | 3 | 3 | 2 | 5 | 50 | 5 | 2 | 3 | 8 |
32
+ | max_seq_length | 128 | 128 | 128 | 128 | 128 | 128 | 128 | 512 | 64 | 512 |
33
+ | warmup_proportion | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.1 | 0.06 | 0.05 |
22
34
23
- 3 . 因为 CLUEWSC2020 数据集效果对 batch_size 较为敏感,对CLUEWSC2020 评测时额外增加了 batch_size = 8 的超参搜索。
24
35
25
36
26
37
## 一键复现模型效果
27
38
28
- 这一小节以 TNEWS 任务为例展示如何一键复现本文的评测结果 。
39
+ 这一节将会对分类、阅读理解任务分别展示如何一键复现本文的评测结果 。
29
40
30
- ### 启动 CLUE 任务
41
+ ### 启动 CLUE 分类任务
31
42
以 CLUE 的 TNEWS 任务为例,启动 CLUE 任务进行 Fine-tuning 的方式如下:
32
43
33
- #### 单卡训练
34
44
``` shell
35
45
export CUDA_VISIBLE_DEVICES=0
36
46
export TASK_NAME=TNEWS
37
47
export LR=3e-5
38
- export BS=16
48
+ export BS=32
39
49
export EPOCH=6
40
50
export MAX_SEQ_LEN=128
41
51
export MODEL_PATH=roberta-wwm-ext-large
42
52
43
53
cd classification
54
+ mkdir roberta-wwm-ext-large
44
55
python -u ./run_clue_classifier.py \
45
- --model_type roberta \
46
56
--model_name_or_path ${MODEL_PATH} \
47
57
--task_name ${TASK_NAME} \
48
58
--max_seq_length ${MAX_SEQ_LEN} \
@@ -57,47 +67,16 @@ python -u ./run_clue_classifier.py \
57
67
--adam_epsilon 1e-8 \
58
68
--output_dir ${MODEL_PATH} /models/${TASK_NAME} /${LR} _${BS} / \
59
69
--device gpu \
70
+ --do_train \
60
71
61
72
```
62
73
63
- 另外,如需评估,传入参数 ` --do_eval True ` 即可,如果只对读入的 checkpoint 进行评估不训练,可以将 ` --do_train ` 设为 False。
64
-
65
- #### 多卡训练
66
-
67
- ``` shell
68
-
69
- unset CUDA_VISIBLE_DEVICES
70
- export TASK_NAME=TNEWS
71
- export LR=3e-5
72
- export BS=32
73
- export EPOCH=6
74
- export MAX_SEQ_LEN=128
75
- export MODEL_PATH=roberta-wwm-ext-large
76
-
77
- cd classification
78
- python -m paddle.distributed.launch --gpus " 0,1" run_clue_classifier.py \
79
- --model_type roberta \
80
- --model_name_or_path ${MODEL_PATH} \
81
- --task_name ${TASK_NAME} \
82
- --max_seq_length ${MAX_SEQ_LEN} \
83
- --batch_size ${BS} \
84
- --learning_rate ${LR} \
85
- --num_train_epochs ${EPOCH} \
86
- --logging_steps 100 \
87
- --seed 42 \
88
- --save_steps 100 \
89
- --warmup_proportion 0.1 \
90
- --weight_decay 0.01 \
91
- --adam_epsilon 1e-8 \
92
- --output_dir ${MODEL_PATH} /models/${TASK_NAME} /${LR} _${BS} / \
93
- --device gpu \
74
+ 另外,如需评估,传入参数 ` --do_eval ` 即可,如果只对读入的 checkpoint 进行评估不训练,则不需传入 ` --do_train ` 。
94
75
95
- ```
96
76
其中参数释义如下:
97
- - ` model_type ` 指示了 Fine-tuning 使用的预训练模型类型,如:ernie、bert、roberta 等,因不同类型的预训练模型可能有不同的 Fine-tuning layer 和 tokenizer。
98
- - ` model_name_or_path ` 指示了 Fine-tuning 使用的具体预训练模型,可以是 PaddleNLP 提供的预训练模型,可以选择 ` model_type ` 在[ Transformer预训练模型汇总] ( ../../../docs/model_zoo/transformers.rst ) 中相对应的中文预训练权重。注意这里选择的模型权重要和上面配置的模型类型匹配,例如 model_type 配置的是 ernie,则 model_name_or_path 只能选择 ernie 相关的模型。另,clue 任务应选择中文预训练权重。
77
+ - ` model_name_or_path ` 指示了 Fine-tuning 使用的具体预训练模型,可以是 PaddleNLP 提供的预训练模型,可以选择[ Transformer预训练模型汇总] ( ../../../docs/model_zoo/transformers.rst ) 中相对应的中文预训练权重。注意 CLUE 任务应选择中文预训练权重。
99
78
100
- - ` task_name ` 表示 Fine-tuning 的任务 ,当前支持 AFQMC、TNEWS、IFLYTEK、OCNLI、CMNLI、CSL、CLUEWSC2020。
79
+ - ` task_name ` 表示 Fine-tuning 的分类任务 ,当前支持 AFQMC、TNEWS、IFLYTEK、OCNLI、CMNLI、CSL、CLUEWSC2020。
101
80
- ` max_seq_length ` 表示最大句子长度,超过该长度将被截断。
102
81
- ` batch_size ` 表示每次迭代** 每张卡** 上的样本数目。
103
82
- ` learning_rate ` 表示基础学习率大小,将于 learning rate scheduler 产生的值相乘作为当前学习率。
@@ -120,22 +99,61 @@ global step 400/20010, epoch: 0, batch: 399, rank_id: 0, loss: 2.631579, lr: 0.0
120
99
eval loss: 2.476962, acc: 0.1697, eval done total : 25.794789791107178 s
121
100
```
122
101
102
+ ### 启动 CLUE 阅读理解任务
103
+ 以 CLUE 的 C<sup >3</sup > 任务为例,启动 CLUE 任务进行 Fine-tuning 的方式如下:
104
+
105
+ ``` shell
106
+
107
+ cd mrc
108
+
109
+ mkdir roberta-wwm-ext-large
110
+ MODEL_PATH=roberta-wwm-ext-large
111
+ BATCH_SIZE=24
112
+ LR=2e-5
113
+
114
+ python -u run_c3.py \
115
+ --model_name_or_path ${MODEL_PATH} \
116
+ --batch_size ${BATCH_SIZE} \
117
+ --learning_rate ${LR} \
118
+ --max_seq_length 512 \
119
+ --num_train_epochs 8 \
120
+ --warmup_proportion 0.05 \
121
+
122
+ ```
123
+
123
124
## 参加 CLUE 竞赛
124
125
125
- 对于 CLUE 分类任务,可以直接使用本项目中提供的脚本 ` classification/predict_clue_classifier.py ` 对单个任务进行预测,并将分类结果输出到文件。
126
+ 对各个任务运行预测脚本,汇总多个结果文件压缩之后,即可提交至CLUE官网进行评测。
127
+
128
+ 下面 2 小节会分别介绍分类、阅读理解任务产生预测结果的方法。
129
+
130
+ ### 分类任务
126
131
127
- 以 TNEWS 为例,假设 TNEWS 模型所在路径为 ` ${TNEWS_MODEL} ` ,可以运行如下脚本得到模型在测试集上的预测结果,并将预测结果写入地址 ` ${OUTPUT_DIR}/tnews_predict.json ` :
132
+ 以 TNEWS 为例,可以直接使用脚本 ` classification/run_clue_classifier.py ` 对单个任务进行预测,注意脚本启动时需要传入参数 ` --do_predict ` 。 假设 TNEWS 模型所在路径为 ` ${TNEWS_MODEL} ` ,运行如下脚本可得到模型在测试集上的预测结果,预测结果会写入地址 ` ${OUTPUT_DIR}/tnews_predict.json ` 。
128
133
129
134
```
130
135
cd classification
131
136
OUTPUT_DIR=results
132
137
mkdir ${OUTPUT_DIR}
133
138
134
- python predict_clue_classifier.py \
135
- --model_type roberta \
139
+ python run_clue_classifier.py \
136
140
--task_name TNEWS \
137
141
--model_name_or_path ${TNEWS_MODEL} \
138
142
--output_dir ${OUTPUT_DIR} \
143
+ --do_predict \
139
144
```
140
145
141
- 对各个任务运行预测脚本,汇总多个结果文件压缩之后,即可提交至CLUE官网进行评测。
146
+ ### 阅读理解任务
147
+
148
+ 以 C<sup >3</sup > 为例,直接使用 ` mrc/run_c3.py ` 对该任务进行预测,注意脚本启动时需要传入参数 ` --do_predict ` 。假设 C<sup >3</sup > 模型所在路径为 ` ${C3_MODEL} ` ,运行如下脚本可得到模型在测试集上的预测结果,预测结果会写入地址 ` ${OUTPUT_DIR}/c311_predict.json ` 。
149
+
150
+ ``` shell
151
+ cd mrc
152
+ OUTPUT_DIR=results
153
+ mkdir ${OUTPUT_DIR}
154
+
155
+ python run_c3.py \
156
+ --model_name_or_path ${C3_MODEL} \
157
+ --output_dir ${OUTPUT_DIR} \
158
+ --do_predict \
159
+ ```
0 commit comments