如何解决BertModel 或 BertForPreTraining
我只想将 Bert 用于嵌入,并将 Bert 输出用作我将从头开始构建的分类网络的输入。
我不确定是否要对模型进行微调。
我认为相关的类是 BertModel 或 BertForPreTraining。
BertForPreTraining 头部包含两个“动作”: self.predictions 是 MLM(Masked Language Modeling)头,它赋予 BERT 修复语法错误的能力,而 self.seq_relationship 是 NSP(下一句预测);通常称为分类头。
class BertPreTrainingHeads(nn.Module):
def __init__(self,config):
super().__init__()
self.predictions = BertLMPredictionHead(config)
self.seq_relationship = nn.Linear(config.hidden_size,2)
我认为 NSP 与我的任务无关,因此我可以“覆盖”它。 MLM 的作用是什么,它与我的目标相关还是我应该使用 BertModel?
解决方法
您应该使用 public class TestClass
{
private string variable;
[OneTimeSetUp]
public void OneTimeSetUp()
{
variable = Environment.GetEnvironmentVariable("VARIABLE");
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Environment.SetEnvironmentVariable("VARIABLE",variable);
}
[SetUp]
public void SetUp()
{
Environment.SetEnvironmentVariable("VARIABLE",null);
}
}
而不是 BertModel
。
BertForPreTraining
用于在掩码语言模型 (MLM) 和下一句预测 (NSP) 任务上训练 bert。它们不用于分类。
BERT 模型只是给出了 BERT 模型的输出,然后您可以对 BERT 模型以及您在其上构建的分类器进行微调。对于分类,如果它只是在 BERT 模型之上的单层,则可以直接使用 BertForPreTraining
。
无论如何,如果您只想获取 BERT 模型的输出并学习您的分类器(无需微调 BERT 模型),那么您可以使用以下方法冻结 BERT 模型权重:
BertForSequenceClassification
以上代码借鉴自here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。