BERT finetune
本文代码部分参考github项目:
https://github.com/BSlience/search-engine-zerotohero/tree/main/public/bert_wwm_pretrain
项目概述
本文的主要内容是基于huggingface transformer的chinese-bert-wwm模型,在自己的语料集上进行finetune的整体步骤和代码实现。
关于chinese-bert-wwm:
https://huggingface.co/hfl/chinese-bert-wwm
https://github.com/ymcui/Chinese-BERT-wwm
主要步骤包括:预处理和训练两个部分
预处理(pre-processing)
- 下载chinese-bert-wwm模型的预训练词表(vocab.txt)、config.json和pytorch_model.bin;
- 读取自己的原始数据集(比如大量的文章、文本),做句子分割,然后保存成语料集;
- 根据自己的语料集进行分词(BERT是分割成单个字),并将自己语料集中相比原始的词表多的字(或者词)添加到原始词表中(就是一个扩充操作),然后就生成了自己的词表;
步骤1的下载地址:https://huggingface.co/hfl/chinese-bert-wwm/tree/main
如果生成的语料集比较大,为了后续加载方便可以存储至内存型的数据库中(比如Redis)
训练(train)
- 加载BertTokenizer,读取语料集,生成数据;
- 针对1中得到的数据,进行填充、截断和mask等操作,借助data collator类;
- 加载chinese-bert-wwm模型的预训练权重文件,基于当前数据开始训练(微调);
- 保存模型,测试效果。
关于data collator的实现可以查看我的上一篇文章whole word mask;
步骤3加载的预训练权重文件就是上述预处理步骤1下载的,不过要注意把config.json和pytorch_model.bin放在同一个目录下,然后加载这个目录即可。