Ami*_*t S 4 nlp transformer-model deep-learning bert-language-model huggingface-transformers
我只想使用 Bert 进行嵌入,并使用 Bert 输出作为我将从头开始构建的分类网络的输入。
我不确定是否要对模型进行微调。
我认为相关的类是 BertModel 或 BertForPreTraining。
BertForPreTraining head 包含两个“动作”:self.predictions 是 MLM(Masked Language Modeling)head,赋予 BERT 修复语法错误的能力,self.seq_relationship 是 NSP(Next Sentence Prediction);通常称为分类头。
class BertPreTrainingHeads(nn.Module):
def __init__(self, config):
super().__init__()
self.predictions = BertLMPredictionHead(config)
self.seq_relationship = nn.Linear(config.hidden_size, 2)
Run Code Online (Sandbox Code Playgroud)
我认为 NSP 与我的任务无关,所以我可以“覆盖”它。MLM 是做什么的?它与我的目标相关吗?还是我应该使用 BertModel?
您应该使用BertModel而不是BertForPreTraining.
BertForPreTraining用于在掩码语言模型(MLM)和下一句预测(NSP)任务上训练 bert。它们不用于分类。
BERT 模型只是给出 BERT 模型的输出,然后您可以微调 BERT 模型以及在其之上构建的分类器。对于分类,如果它只是 BERT 模型之上的单层,您可以直接使用BertForSequenceClassification.
无论如何,如果您只想获取 BERT 模型的输出并学习分类器(无需微调 BERT 模型),那么您可以使用以下方法冻结 Bert 模型权重:
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')
for param in model.bert.bert.parameters():
param.requires_grad = False
Run Code Online (Sandbox Code Playgroud)
上面的代码是从这里借来的