-
Notifications
You must be signed in to change notification settings - Fork 143
下游任务微调
TencentPretrain支持多种下游任务,包括文本分类(classification)、文本对分类(pair classification)、基于文档的问答(document-based question answering)、序列标注(sequence labeling)、机器阅读理解(machine reading comprehension)等。注意到下游任务使用的模型信息(配置文件和命令行设置)需要与预训练阶段的信息一致。本章节用到的预训练模型可以在预训练模型仓库章节中下载。本章节用到的数据集可以在下游任务数据集章节中下载。
run_classifier.py 在编码器上接两层前向神经网络。 run_classifier.py文本分类使用示例:
python3 finetune/run_classifier.py --pretrained_model_path models/google_zh_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 64 \
--embedding word pos seg --encoder transformer --mask fully_visible
默认使用CLS位置向量进行预测(--pooling first)。
run_classifier.py 文本对分类使用示例:
python3 finetune/run_classifier.py --pretrained_model_path models/google_zh_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/lcqmc/train.tsv \
--dev_path datasets/lcqmc/dev.tsv \
--test_path datasets/lcqmc/test.tsv \
--epochs_num 3 --batch_size 64 \
--embedding word pos seg --encoder transformer --mask fully_visible
可以从下游任务数据集章节中下载LCQMC数据集并把它放到 datasets 文件夹下。
inference/run_classifier_infer.py文本分类推理(预测)使用示例:
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--seq_length 128 --labels_num 2 --output_logits --output_prob \
--embedding word pos seg --encoder transformer --mask fully_visible
对于分类数据集,模型会对text_a列的文本进行预测。对于文本对分类数据集,模型会对text_a列和text_b列的文本进行预测。 --labels_num 指定分类任务标签的个数。由于待预测文件中不包括标签,因此需要给出标签个数的信息。 --output_logits 指定输出模型预测的logits,列名为logits。 --output_prob 指定输出模型预测的概率,列名为prob。 --seq_length 指定序列长度,推荐和训练时保持一致。
注意到BERT模型和RoBERTa模型的网络结构相同,因此加载BERT和RoBERTa的方式没有区别。 由于配置文件中已经给出了模型的模块类型信息,因此我们可以不在命令行中进行指定:
python3 finetune/run_classifier.py --pretrained_model_path models/google_zh_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 64
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--seq_length 128 --labels_num 2 --output_logits --output_prob
在后面的示例中,我们不在命令行中显式的指定模型的模块类型信息。
使用ALBERT模型进行分类任务示例:
python3 finetune/run_classifier.py --pretrained_model_path models/google_zh_albert_base_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--learning_rate 4e-5 --epochs_num 5 --batch_size 32
ALBERT的效果对学习率、训练轮数等超参数比较敏感,有时需要多次尝试。在ALBERT预训练阶段,dropout是被关掉的(参见 models/albert/base_config.json)。推荐在微调阶段将配置文件中的dropout设置为0.1。 使用在下游任务上微调后的ALBERT模型进行预测:
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--labels_num 2
使用GPT-2预训练模型进行分类任务微调和推理示例:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_gpt2_seq1024_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/gpt2/config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 32 \
--pooling mean
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/gpt2/config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--labels_num 2 --pooling mean
这里我们使用了 --pooling mean 。同样我们还可以使用 --pooling max 和 --pooling last 。但是由于这里使用了语言模型(--mask causal),--pooling first (CLS位置向量)是不能使用的。
使用LSTM预训练模型进行分类任务微调和推理示例:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_lstm_lm_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/lstm_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--learning_rate 1e-3 --epochs_num 5 --batch_size 64 \
--pooling mean
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/lstm_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--labels_num 2 --pooling mean
使用ELMo预训练模型进行分类任务微调和推理示例:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_elmo_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--learning_rate 5e-4 --epochs_num 5 --batch_size 64 --seq_length 192 \
--pooling max
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--seq_length 192 --labels_num 2 \
--pooling max
使用GatedCNN预训练模型进行分类任务微调和推理示例:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_gatedcnn_lm_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/cnn/gatedcnn_9_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--learning_rate 5e-5 --epochs_num 5 --batch_size 64 \
--pooling mean
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/cnn/gatedcnn_9_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--labels_num 2 --pooling mean
TencentPretrain支持对分类任务进行多任务学习,模型共享词向量层和编码层。 同时对两个情感分类数据集进行微调示例:
python3 finetune/run_classifier_mt.py --pretrained_model_path models/google_zh_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--dataset_path_list datasets/book_review/ datasets/chnsenticorp/ \
--epochs_num 1 --batch_size 64
--dataset_path_list 指定多任务数据集文件夹路径。每个文件夹需要包括训练集 train.tsv 和验证集 dev.tsv 。
多任务分类器推理(预测)使用示例:
python3 inference/run_classifier_mt_infer.py --load_model_path models/multitask_classifier_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/book_review/test_nolabel.tsv \
--prediction_path datasets/book_review/prediction.tsv \
--labels_num_list 2 2 \
--batch_size 64 --output_logits --output_prob
--test_path 指定需要预测的文件。 --prediction_path 指定预测结果的文件。其包括3列,label、logits、prob。后两列通过 --output_logits 和 --output_prob 指定。多任务的结果用符号 | 进行分隔。预测结果(包含两个任务的分类器)示例:
label logits prob
1|0 1.5531 2.6371|3.2732 -3.3976 0.2527 0.7473|0.9987 0.0013
0|0 4.6869 -2.2779|1.9069 -2.2426 0.9990 0.0009|0.9845 0.0155
TencentPretrain支持对分类任务进行网格搜索:
python3 finetune/run_classifier_grid.py --pretrained_model_path models/cluecorpussmall_roberta_tiny_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/tiny_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--learning_rate_list 3e-5 1e-4 3e-4 --epochs_num_list 3 5 8 --batch_size_list 32 64
这里对不同的大小的学习率,训练轮数, batch size 进行网格搜索。
TencentPretrain支持对分类任务进行蒸馏。 首先训练teacher模型。这里使用24层的RoBERTa-WWM-large模型。可在本项目中下载中文RoBERTa-WWM-large预训练模型并在其基础上进行训练,使用示例:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_roberta_wwm_large_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/large_config.json \
--output_model_path models/teacher_classifier_model.bin \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 32
然后使用teacher模型进行预测,生成伪标签以及logits:
python3 inference/run_classifier_infer.py --load_model_path models/teacher_classifier_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/large_config.json \
--test_path text.tsv \
--prediction_path label_logits.tsv \
--labels_num 2 --output_logits
输入文件 text.tsv 包括文本,即包括text_a列(对于文本对分类,则包括text_a和text_b列)。text.tsv 可以是下游任务数据集的训练集/验证集/测试集,比如,可以把 datasets/book_review/train.tsv 作为输入( --test_path )。但更推荐使用和下游任务数据集相似的大规模外部数据,比如对于情感分类数据集,可以从网络中爬取大规模的评论文本。更多的数据通常能为蒸馏带来更好的效果。 Teacher模型输出的预测结果 label_logits.tsv 包括label列和logits列。 然后将预测结果 label_logits.tsv 和原始文本 text.tsv 合并为 text_label_logits.tsv 。这个文件包括text_a列(对于文本对分类,则包括text_a和text_b列)、label列(硬标签)、和logits列(软标签)。 这里,student模型为BERT-tiny模型。可在本项目中下载BERT-tiny预训练模型并在其基础上进行训练。 我们让BERT-tiny模型同时学习BERT-large模型预测的硬标签和软标签:
python3 finetune/run_classifier.py --pretrained_model_path models/cluecorpussmall_roberta_tiny_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/tiny_config.json \
--train_path text_label_logits.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 64 --soft_targets --soft_alpha 0.5
--soft_targets 指定模型读取logits列进行训练,这里使用mean-squared-error(MSE)损失函数。 --soft_alpha 指定软标签loss的权重。训练的loss为硬标签损失cross-entropy(CE)和软标签损失mean-squared-error(MSE)的加权平均。
TencentPretrain支持使用对抗训练对下游任务进行微调:
python3 finetune/run_classifier.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/book_review/train.tsv \
--dev_path datasets/book_review/dev.tsv \
--test_path datasets/book_review/test.tsv \
--epochs_num 3 --batch_size 64 \
--use_adv --adv_type fgm
TencentPretrain支持使用孪生网络对下游分类任务进行微调。两个网络分别处理两个文本,然后在上层进行交互,对文本对进行预测。使用基于Transformer编码器的孪生网络在OCNLI任务上微调和推理示例:
python3 finetune/run_classifier_siamese.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/sbert/base_config.json \
--train_path datasets/ocnli/train_50k.tsv \
--dev_path datasets/ocnli/dev.tsv \
--epochs_num 3 --batch_size 32
python3 inference/run_classifier_siamese_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/sbert/base_config.json \
--test_path datasets/ocnli/test_nolabel.tsv \
--prediction_path datasets/ocnli/prediction.tsv \
--labels_num 3
使用基于LSTM编码器的孪生网络在OCNLI任务上微调和推理示例:
python3 finetune/run_classifier_siamese.py --vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/siamese_lstm_config.json \
--train_path datasets/ocnli/train_50k.tsv \
--dev_path datasets/ocnli/dev.tsv \
--learning_rate 1e-4 --epochs_num 3 --batch_size 32
python3 inference/run_classifier_siamese_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/siamese_lstm_config.json \
--test_path datasets/ocnli/test_nolabel.tsv \
--prediction_path datasets/ocnli/prediction.tsv \
--labels_num 3
TencentPretrain支持基于模板进行分类任务的微调和推理。
使用基于字的模型进行微调和推理示例:
python3 finetune/run_classifier_prompt.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/chnsenticorp/train.tsv \
--dev_path datasets/chnsenticorp/dev.tsv \
--test_path datasets/chnsenticorp/test.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_char \
--learning_rate 3e-5 --epochs_num 3 --batch_size 64
python3 inference/run_classifier_prompt_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/chnsenticorp/test_nolabel.tsv \
--prediction_path datasets/chnsenticorp/prediction.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_char
使用基于词的模型进行微调和推理示例:
python3 finetune/run_classifier_prompt.py --pretrained_model_path models/cluecorpussmall_roberta_word_base_seq512_model.bin \
--spm_model_path models/cluecorpussmall_spm.model \
--config_path models/bert/base_config.json \
--train_path datasets/chnsenticorp/train.tsv \
--dev_path datasets/chnsenticorp/dev.tsv \
--test_path datasets/chnsenticorp/test.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_word \
--learning_rate 3e-5 --epochs_num 3 --batch_size 64
python3 inference/run_classifier_prompt_infer.py --load_model_path models/finetuned_model.bin \
--spm_model_path models/cluecorpussmall_spm.model \
--config_path models/bert/base_config.json \
--test_path datasets/chnsenticorp/test_nolabel.tsv \
--prediction_path datasets/chnsenticorp/prediction.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_word
使用基于字和基于词的模型进行零样本学习示例:
python3 finetune/run_classifier_prompt.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/chnsenticorp/train.tsv \
--dev_path datasets/chnsenticorp/dev.tsv \
--test_path datasets/chnsenticorp/test.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_char \
--epochs_num 0
python3 finetune/run_classifier_prompt.py --pretrained_model_path models/cluecorpussmall_roberta_word_base_seq512_model.bin \
--spm_model_path models/cluecorpussmall_spm.model \
--config_path models/bert/base_config.json \
--train_path datasets/chnsenticorp/train.tsv \
--dev_path datasets/chnsenticorp/dev.tsv \
--test_path datasets/chnsenticorp/test.tsv \
--prompt_path models/prompts.json --prompt_id chnsenticorp_word \
--epochs_num 0
--epochs_num 0 表明我们不使用训练样本。
TencentPretrain支持multi-label分类任务的微调和推理。一条样本可能有多个标签。这里使用 Toxic Comment Classification Challenge 英文数据集。使用BERT在Toxic Comment Classification Challenge(TencentPretrain支持的格式)数据集上微调和推理示例:
python3 finetune/run_classifier_multi_label.py --pretrained_model_path models/bert_base_en_uncased_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/toxic_comment/train.tsv \
--dev_path datasets/toxic_comment/dev.tsv \
--epochs_num 3 --batch_size 64 --seq_length 128
python3 inference/run_classifier_multi_label_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/toxic_comment/dev.tsv \
--prediction_path datasets/toxic_comment/prediction.tsv \
--seq_length 128 --labels_num 7
run_dbqa.py 使用和 run_classifier.py 相同的网络结构。 基于文档的问答任务可以转换为文本对分类任务,text_a列为问题,text_b列包含可能存在答案的句子。 run_dbqa.py 使用示例:
python3 finetune/run_dbqa.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/nlpcc-dbqa/train.tsv \
--dev_path datasets/nlpcc-dbqa/dev.tsv \
--test_path datasets/nlpcc-dbqa/test.tsv \
--epochs_num 3 --batch_size 64
inference/run_classifier_infer.py 基于文档的问答任务预测使用示例:
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/nlpcc-dbqa/test.tsv \
--prediction_path datasets/nlpcc-dbqa/prediction.tsv \
--labels_num 2 --output_logits --output_prob
使用ALBERT模型进行基于文档的问答任务示例:
python3 finetune/run_dbqa.py --pretrained_model_path models/google_zh_albert_base_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--train_path datasets/nlpcc-dbqa/train.tsv \
--dev_path datasets/nlpcc-dbqa/dev.tsv \
--test_path datasets/nlpcc-dbqa/test.tsv \
--epochs_num 3 --batch_size 64
使用微调后的ALBERT模型进行预测示例:
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--test_path datasets/nlpcc-dbqa/test.tsv \
--prediction_path datasets/nlpcc-dbqa/prediction.tsv \
--labels_num 2
run_regression.py 在英文回归任务STS-B(GLUE)上使用示例:
python3 finetune/run_regression.py --pretrained_model_path models/bert_base_en_uncased_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/STS-B/train.tsv \
--dev_path datasets/STS-B/dev.tsv \
--epochs_num 3 --batch_size 64
inference/run_regression_infer.py 回归任务预测使用示例:
python3 inference/run_regression_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/STS-B/test_nolabel.tsv \
--prediction_path datasets/STS-B/prediction.tsv
run_ner.py 在编码器上接一层前向神经网络。 run_ner.py 序列标注使用示例:
python3 finetune/run_ner.py --pretrained_model_path models/google_zh_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/msra_ner/train.tsv \
--dev_path datasets/msra_ner/dev.tsv \
--test_path datasets/msra_ner/test.tsv \
--label2id_path datasets/msra_ner/label2id.json \
--epochs_num 5 --batch_size 16
预测示例:
python3 inference/run_ner_infer.py --load_model_path models/finetuned_model.bin --vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/msra_ner/test_nolabel.tsv \
--prediction_path datasets/msra_ner/prediction.tsv \
--label2id_path datasets/msra_ner/label2id.json
使用ALBERT模型进行序列标注示例:
python3 finetune/run_ner.py --pretrained_model_path models/google_zh_albert_base_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--train_path datasets/msra_ner/train.tsv \
--dev_path datasets/msra_ner/dev.tsv \
--test_path datasets/msra_ner/test.tsv \
--label2id_path datasets/msra_ner/label2id.json \
--learning_rate 1e-4 --epochs_num 5 --batch_size 16
python3 inference/run_ner_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/base_config.json \
--test_path datasets/msra_ner/test_nolabel.tsv \
--prediction_path datasets/msra_ner/prediction.tsv \
--label2id_path datasets/msra_ner/label2id.json
使用ELMo模型进行序列标注示例:
python3 finetune/run_ner.py --pretrained_model_path models/cluecorpussmall_elmo_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--train_path datasets/msra_ner/train.tsv \
--dev_path datasets/msra_ner/dev.tsv \
--test_path datasets/msra_ner/test.tsv \
--label2id_path datasets/msra_ner/label2id.json \
--learning_rate 5e-4 --epochs_num 5 --batch_size 16
python3 inference/run_ner_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--test_path datasets/msra_ner/test_nolabel.tsv \
--prediction_path datasets/msra_ner/prediction.tsv \
--label2id_path datasets/msra_ner/label2id.json
可以通过 --crf_target 指定在序列标注下游任务中使用CRF。注意到当使用CRF时,只能使用单GPU进行训练和推理:
CUDA_VISIBLE_DEVICES=0 python3 finetune/run_ner.py --pretrained_model_path models/cluecorpussmall_elmo_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--train_path datasets/msra_ner/train.tsv \
--dev_path datasets/msra_ner/dev.tsv \
--test_path datasets/msra_ner/test.tsv \
--label2id_path datasets/msra_ner/label2id.json \
--learning_rate 5e-4 --epochs_num 5 --batch_size 16 \
--crf_target
CUDA_VISIBLE_DEVICES=0 python3 inference/run_ner_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/rnn/bilstm_config.json \
--test_path datasets/msra_ner/test_nolabel.tsv \
--prediction_path datasets/msra_ner/prediction.tsv \
--label2id_path datasets/msra_ner/label2id.json \
--crf_target
run_cmrc.py 在编码器上接一层前向神经网络。 run_cmrc.py 抽取式阅读理解使用示例:
python3 finetune/run_cmrc.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/cmrc2018/train.json \
--dev_path datasets/cmrc2018/dev.json \
--epochs_num 2 --batch_size 8 --seq_length 512
其中 train.json 和 dev.json 文件是squad类型格式。CMRC2018数据集的测试集答案没有公开,因此这里没有指定 --test_path。
预测示例:
python3 inference/run_cmrc_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/cmrc2018/test.json \
--prediction_path datasets/cmrc2018/prediction.json \
--seq_length 512
使用ALBERT-xxlarge模型进行抽取式阅读理解示例:
python3 finetune/run_cmrc.py --pretrained_model_path models/google_zh_albert_xxlarge_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/xxlarge_config.json \
--train_path datasets/cmrc2018/train.json \
--dev_path datasets/cmrc2018/dev.json \
--learning_rate 1e-5 --epochs_num 2 --batch_size 8 --seq_length 512
使用微调后的ALBERT模型进行预测示例:
python3 inference/run_cmrc_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/xxlarge_config.json \
--test_path datasets/cmrc2018/test.json \
--prediction_path datasets/cmrc2018/prediction.json \
--seq_length 512
C3数据集是一个多选式阅读理解数据集。给定上下文和问题,需要从4个候选答案中进行选择。run_c3.py 在编码器上接一层前向神经网络。 多选式阅读理解使用示例:
python3 finetune/run_c3.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/c3/train.json \
--dev_path datasets/c3/dev.json \
--epochs_num 8 --batch_size 8 --seq_length 512 --max_choices_num 4
C3数据集的测试集答案没有公开,因此这里没有指定 --test_path 。 模型实际的batch size大小为 --batch_size 乘以 --max_choices_num 。 C3数据集的阅读理解题,最多包括4个选项,因此 --max_choices_num 设置为4。 预测示例:
python3 inference/run_c3_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/c3/test.json \
--prediction_path datasets/c3/prediction.json \
--max_choices_num 4 --seq_length 512
使用ALBERT-xlarge模型进行多选式阅读理解示例:
python3 finetune/run_c3.py --pretrained_model_path models/google_zh_albert_xlarge_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/xlarge_config.json \
--train_path datasets/c3/train.json \
--dev_path datasets/c3/dev.json \
--epochs_num 8 --batch_size 8 --seq_length 512 --max_choices_num 4
使用微调后的ALBERT模型进行预测示例:
python3 inference/run_c3_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/albert/xlarge_config.json \
--test_path datasets/c3/test.json \
--prediction_path datasets/c3/prediction.json \
--max_choices_num 4 --seq_length 512
ChID数据集是一个多选式完形填空数据集。给定上下文和候选成语,需要将合适的成语填入文本中。 run_cmrc.py 成语完形填空使用示例:
python3 finetune/run_chid.py --pretrained_model_path models/google_zh_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/chid/train.json \
--train_answer_path datasets/chid/train_answer.json \
--dev_path datasets/chid/dev.json \
--dev_answer_path datasets/chid/dev_answer.json \
--batch_size 24 --seq_length 64 --max_choices_num 10
预测示例:
python3 inference/run_chid_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/chid/test.json \
--prediction_path datasets/chid/prediction.json \
--seq_length 64 --max_choices_num 10
T5提出使用seq2seq模型去统一处理自然语言理解和自然语言生成任务。run_text2text.py加载seq2seq模型,通过text2text的方式进行微调,也就是模型的输入和输出都是字符串。Text2text方式微调使用示例:
python3 finetune/run_text2text.py --pretrained_model_path models/cluecorpussmall_t5_small_seq512_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5/small_config.json \
--train_path datasets/book_review_text2text/train.tsv \
--dev_path datasets/book_review_text2text/dev.tsv \
--learning_rate 3e-4 --epochs_num 3 --batch_size 32 --seq_length 128 --tgt_seq_length 8
我们下载预训练好的T5模型然后在上面微调。可以在这里下载text2text格式的书评情感分类数据集。 使用微调后的text2text模型进行预测示例:
python3 inference/run_text2text_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_with_sentinel_vocab.txt \
--config_path models/t5/small_config.json \
--test_path datasets/book_review_text2text/test_nolabel.tsv \
--prediction_path datasets/book_review_text2text/prediction.tsv \
--seq_length 128 --tgt_seq_length 8
使用BART-large模型进行微调和推理示例:
python3 finetune/run_text2text.py --pretrained_model_path models/cluecorpussmall_bart_large_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bart/large_config.json \
--train_path datasets/book_review_text2text/train.tsv \
--dev_path datasets/book_review_text2text/dev.tsv \
--learning_rate 1e-5 --epochs_num 3 --batch_size 32 --seq_length 128 --tgt_seq_length 8
python3 inference/run_text2text_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/bart/large_config.json \
--test_path datasets/book_review_text2text/test_nolabel.tsv \
--prediction_path datasets/book_review_text2text/prediction.tsv \
--seq_length 128 --tgt_seq_length 8
使用PEGASUS-base模型进行微调和推理示例:
python3 finetune/run_text2text.py --pretrained_model_path models/cluecorpussmall_pegasus_base_seq512_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/pegasus/base_config.json \
--train_path datasets/book_review_text2text/train.tsv \
--dev_path datasets/book_review_text2text/dev.tsv \
--learning_rate 1e-5 --epochs_num 3 --batch_size 32 --seq_length 128 --tgt_seq_length 8
python3 inference/run_text2text_infer.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_zh_vocab.txt \
--config_path models/pegasus/base_config.json \
--test_path datasets/book_review_text2text/test_nolabel.tsv \
--prediction_path datasets/book_review_text2text/prediction.tsv \
--seq_length 128 --tgt_seq_length 8
SimCSE提出使用dropout方式构建正样本用于对比学习,从而提升无监督文本表示效果。SimCSE使用示例:
python3 finetune/run_simcse.py --pretrained_model_path models/bert_base_en_uncased_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--train_path datasets/STS-B/train_unsup.tsv \
--dev_path datasets/STS-B/dev.tsv \
--learning_rate 1e-5 --epochs_num 1 --batch_size 64 --seq_length 64 \
--pooling first --temperature 0.05 --eval_steps 200
我们下载预训练好的英文BERT模型然后在上面微调。可以在下游任务数据集章节下载STS-B数据集。这里训练集为无标签的文本(--train_path datasets/STS-B/train_unsup.tsv)。验证集为文本对和它们的相似度分数(--dev_path datasets/STS-B/dev.tsv)。每隔200步会保存一次模型(--eval_steps 200)。
在微调后的SimCSE模型上抽取特征示例:
python3 scripts/extract_features.py --load_model_path models/finetuned_model.bin \
--vocab_path models/google_uncased_en_vocab.txt \
--config_path models/bert/base_config.json \
--test_path datasets/tencent_profile.txt \
--prediction_path features.pt \
--pooling first