UniLM模型既可以应用于自然语言理解(NLU)任务,又可以应用于自然语言生成(NLG)任务。论文来自微软研究院。
模型虽然强大,但微软并没有开源中文的预训练模型。因此云问本着开源之前,将我们预训练好的中文unilm_base模型进行开源。
模型地址 | 提取码 |
---|---|
百度云盘 | y2xo |
详细介绍见:知乎链接
在CLUE中的部分分类数据集和阅读理解数据集上进行了简单测试,具体效果如下:
模型 | AFQMC | TNEWS | IFLYTEK | CMNLI | CSL | CMRC2018 | AVG |
---|---|---|---|---|---|---|---|
bert_base | 73.70% | 56.58% | 60.29% | 79.69% | 80.36% | 71.60% | 70.37% |
ERNIE_base | 73.83% | 58.33% | 58.96% | 80.29% | 79.10% | 74.70% | 70.87% |
unilm_base | 73.79% | 56.27% | 60.54% | 79.58% | 80.80% | 73.30% | 70.71% |
对CLUE中新闻摘要数据,训练了摘要模型,并进行的简单的测试,具体效果如下:
模型 | rouge-1 | rouge-2 | rouge-L |
---|---|---|---|
f1 | 43.98% | 32.04% | 49.90% |
r | 41.74% | 30.50% | 47.35% |
p | 49.30% | 35.85% | 56.01% |
如何使用该模型进行NLU任务?
- 可以直接使用BERT代码,只需加载unilm的model、config、vocab即可。
如何使用该模型进行NLG任务?
- fine-tuning
nohup python3 -u run_seq2seq.py --data_dir /data/unilm/data_file/ --src_file train_data.json --model_type unilm --model_name_or_path /data/unilm/yunwen_unilm/ --output_dir /data/unilm/output_dir/ --max_seq_length 512 --max_position_embeddings 512 --do_train --do_lower_case --train_batch_size 32 --learning_rate 1e-5 --num_train_epochs 3 > log.log 2>&1 &
- test
python3 -u decode_seq2seq.py --model_type unilm --model_name_or_path /data/unilm/yunwen_unilm/ --model_recover_path /data/unilm/output_dir/model.bin --max_seq_length 512 --input_file /data/unilm/data_file/test.json --output_file /data/unilm/data_file/predict_.json --do_lower_case --batch_size 32 --beam_szie 5 --max_tgt_length 128
注:根据论文,在NLU任务时,type_token_id为[0,1];在NLG任务时,type_token_id为[4,5]
- torch 1.4.0
- transformers 2.6.0