BertModel 或 BertForPreTraining

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?

Ash*_*'Sa 6

您应该使用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)

上面的代码是从这里借来的