huggingface三种添加Bert模型的方法
首先搞清楚预训练模型一般会有的文件:
- vocab.txt
- config.json
- pytorch_model.bin
这三个分别对应tokenizer,config和model。
添加huggingface hub里面的模型
- 只要有模型名就可以导入tokenizer和model
- 无需导入config
# 这里导入Huggingface里面有的模型:hfl/chinese-roberta-wwm-ext
# 使用预训练模型的权重,生成分词器
tokenizer = BertTokenizerFast.from_pretrained("hfl/chinese-roberta-wwm-ext")
# 载入模型
model = BertForSequenceClassification.from_pretrained("hfl/chinese-roberta-wwm-ext")
添加自己通过迁移训练或者增量训练生成的模型
- 需要给出本地模型存储地址
- 通过模型地址导入tokenizer、config和model
- 如果要更新config需要在导入model之前更新
# 本地模型存储的地址
checkpoint = os.path.join(project_path, 'model/checkpoint-1000')
# 使用预训练模型的权重,生成分词器
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# 载入模型
config = AutoConfig.from_pretrained(checkpoint)
config.num_labels = len(labels)
config.problem_type = "multi_label_classification"
config.id2label = id2label
config.label2id = label2id
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, config=config)
添加别人的模型
- 需要给出本地模型存储的地址
- 需要从地址中导入tokenizer、config和model。如果要更新config需要在导入model之前。(和第二种导入的方法一样)
- 要注意模型内的文件名是否符合transformers的要求。例如,config.json,vocab.txt不能有其他的名字,否则会导入出错。另外在config.json里面也需要有指出"model_type"。
# 模型存储的地址
checkpoint = os.path.join(project_path, f'FinBERT_L-12_H-768_A-12_pytorch')
# 从模型导入分词器
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
# 导入config
config = AutoConfig.from_pretrained(checkpoint)
config.num_labels = len(labels)
config.problem_type = "multi_label_classification"
config.id2label = id2label
config.label2id = label2id
#导入模型
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, config=config)