前言

本项目为百度论文复现营第四期《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》论文复现第一名代码以及模型。
依赖环境:

  • paddlepaddle-gpu==2.1.2.post101
  • pypinyin
  • paddlenlp==2.0.8
  • nltk
!pip install pypinyin

ChineseBERT原文

ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information

摘要:
最近的汉语预训练模型忽略了汉语特有的两个重要方面:字形和拼音,它们对语言理解具有重要的语法和语义信息。在本研究中,我们提出了汉语预训练,它将汉字的字形和拼音信息纳入语言模型预训练中。字形嵌入是基于汉字的不同字体获得的,能够从视觉特征中捕捉汉字语义,拼音嵌入代表汉字的发音,处理汉语中高度流行的异义现象(同一汉字具有不同的发音和不同的含义)。在大规模的未标记中文语料库上进行预训练后,所提出的ChineseBERT模型在训练步骤较少的基线模型上产生了显著的性能提高。该模型在广泛的中国自然语言处理任务上实现了新的SOTA性能,包括机器阅读理解、自然语言推理、文本分类、句子对匹配和命名实体识别方面的竞争性能。

本项目是 ChineseBERT在 Paddle 2.x上的开源实现。

模型权重、字典以及tokenizer_config路径配置说明

预训练权重

将work/pdchinesebert/modeling.py中model_state对应的路径改为权重实际的路径

字典路径

将work/pdchinesebert/tokenizer.py中vocab_file对应的字典路径改为vocab.txt实际所在的路径

tokenizer_config路径

将work/pdchinesebert/tokenizer.py中tokenizer_config_file对应的路径改为tokenizer_config.json实际所在路径

注:本项目已上传数据集均已修改,如在本地运行根据自己情况修改

下游任务微调

1、ChnSentiCorp

以ChnSentiCorp数据集为例

(1)模型微调:
# 运行训练
python train_chn.py \
--data_path './data/ChnSentiCorp' \
--device 'gpu' \
--epochs 10 \
--max_seq_length 512 \
--batch_size 8 \
--learning_rate 2e-5 \
--weight_decay 0.0001 \
--warmup_proportion 0.1 \
--seed 2333 \
--save_dir 'outputs/chn' | tee outputs/train_chn.log
(2)评估

在dev和test数据集上acc分别为95.8和96.08,达到论文精度要求,结果如下

2、XNLI

(1)训练
python train_xnli.py \
--data_path './data/XNLI' \
--device 'gpu' \
--epochs 5 \
--max_seq_len 256 \
--batch_size 16 \
--learning_rate 1.3e-5 \
--weight_decay 0.001 \
--warmup_proportion 0.1 \
--seed 2333 \
--save_dir outputs/xnli | tee outputs/train_xnli.log
(2)评估

test数据集 acc最好结果为81.657,达到论文精度要求,结果如下

3、cmrc2018

(1)训练
# 开始训练
python train_cmrc2018.py \
    --model_type chinesebert \
    --data_dir "data/cmrc2018" \
    --model_name_or_path ChineseBERT-large \
    --max_seq_length 512 \
    --train_batch_size 8 \
    --gradient_accumulation_steps 8 \
    --eval_batch_size 16 \
    --learning_rate 4e-5 \
    --max_grad_norm 1.0 \
    --num_train_epochs 3 \
    --logging_steps 2 \
    --save_steps 20 \
    --warmup_radio 0.1 \
    --weight_decay 0.01 \
    --output_dir outputs/cmrc2018 \
    --seed 1111 \
    --num_workers 0 \
    --use_amp

训练过程中模型会在dev数据集进行评估,其中最好的结果如下所示:


{
    AVERAGE = 82.791
    F1 = 91.055
    EM = 74.526
    TOTAL = 3219
    SKIP = 0
}

(2)运行eval.py,生成test数据集预测答案
python eval.py --model_name_or_path outputs/step-340 --n_best_size 35 --max_answer_length 65

其中,model_name_or_path为模型路径

(3)提交CLUE

test数据集 EM为78.55,达到论文精度要求,结果如下:

Reference

@article{sun2021chinesebert,
  title={ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information},
  author={Sun, Zijun and Li, Xiaoya and Sun, Xiaofei and Meng, Yuxian and Ao, Xiang and He, Qing and Wu, Fei and Li, Jiwei},
  journal={arXiv preprint arXiv:2106.16038},
  year={2021}
}

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐