Pytorch 精调(德语)伯特。它不合身吗?

Pytorch 精调(德语)伯特。它不合身吗?,pytorch,huggingface-transformers,pytorch-lightning,Pytorch,Huggingface Transformers,Pytorch Lightning,有了pytorch lightning和transformers,我在德国服务票上微调了一个Bert模型。数据集的大小如下: FULL Dataset: (1220, 2) TRAIN Dataset: (854, 2) VAL Dataset: (366, 2) 每张票可以精确地分为10个类别中的1个。这就是我的模型在definit中初始化的原因,如: #changing the configuration to X lables instead of 2 self.bert = trans

有了pytorch lightning和transformers,我在德国服务票上微调了一个Bert模型。数据集的大小如下:

FULL Dataset: (1220, 2)
TRAIN Dataset: (854, 2)
VAL Dataset: (366, 2)
每张票可以精确地分为10个类别中的1个。这就是我的模型在definit中初始化的原因,如:

#changing the configuration to X lables instead of 2
self.bert = transformers.BertModel.from_pretrained(MODEL_NAME)
self.drop = th.nn.Dropout(p=0.1)
self.out = th.nn.Linear(self.bert.config.hidden_size, NUM_LABELS)
self.softmax = th.nn.Softmax(dim=1)
self.loss = th.nn.CrossEntropyLoss(reduction="none")
这为每个样本产生了超过10个类别的概率分布。由于转发功能是:

 def forward(self, input_ids, mask):
    _, pooled_output = self.bert(
                                input_ids=input_ids,
                                attention_mask=mask
                        )
    output= self.drop(pooled_output)
    output = self.out(output)
    return self.softmax(output)
作为损失函数,torch.nn.CrossEntropyLoss被定义并在调用的训练步骤中。批次大小为16时,logits.shape=[16,10]和批次['targets'].shape=[16]和批次['targets']=[1,5,2,4,8,6,9,0,0,1,2,7,7,5,3]无交叉熵是正确的损失函数吗?优化器是否正常工作

 def training_step(self, batch, batch_idx):
    logits = self.forward(batch['input_ids'], batch['mask']).squeeze()
    loss = self.loss(logits, batch['targets']).mean()
    return {'loss': loss, 'log': {'train_loss': loss}}
验证步骤也是如此:

  def validation_step(self,batch, batch_idx):
      logits = self.forward(batch['input_ids'], batch['mask']).squeeze()
      acc = (logits.argmax(-1) == batch['targets']).float()
      loss = self.loss(logits, batch['targets'])
      return {'loss': loss, 'acc': acc}
最后,无论得到什么样的输入序列,模型都会产生相同的概率。这不合身吗

例如:

model.eval()
text = "Warum kann mein Kollege in SAP keine Transaktionen mehr     ausführen?"
input = tokenizer(            
   text,
   None,
   add_special_tokens=True,
   max_length=200,
   pad_to_max_length=True,
   return_token_type_ids=True,
   truncation=True,
   padding='max_length',
   return_tensors="pt"
   )

input = input.to(device)

out = model(input_ids=input['input_ids'], mask=input['attention_mask'])
text, out

    --> ('Warum kann mein Kollege in SAP keine Transaktionen mehr ausführen?',
 tensor([[2.9374e-03, 3.1926e-03, 8.7949e-03, 3.0573e-01, 2.6428e-04, 5.2946e-02,
      2.4758e-01, 6.2161e-03, 3.6930e-01, 3.0384e-03]], device='cuda:0',
    grad_fn=<SoftmaxBackward>))
    ('Auf meinem Telefon erscheinen keine Nummern mehr.',
 tensor([[2.9374e-03, 3.1926e-03, 8.7949e-03, 3.0573e-01, 2.6428e-04, 5.2946e-02,
          2.4758e-01, 6.2161e-03, 3.6930e-01, 3.0384e-03]], device='cuda:0',
        grad_fn=<SoftmaxBackward>))
model.eval()
text=“在SAP keine Transaktionen mehr ausführen中,我的名字是什么?”
输入=标记器(
文本,
没有一个
添加\u特殊\u标记=真,
最大长度=200,
焊盘至焊盘最大长度=真,
返回\u令牌\u类型\u id=True,
截断=真,
padding='max_length',
return_tensors=“pt”
)
输入=输入。到(设备)
输出=模型(输入ID=输入['输入ID'],掩码=输入['attention\u mask'])
文本,输出
-->(“我在萨普基恩·迈尔·奥斯福伦的交易中遇到了什么问题?”,
张量([[2.9374e-03,3.1926e-03,8.7949e-03,3.0573e-01,2.6428e-04,5.2946e-02,
2.4758e-01、6.2161e-03、3.6930e-01、3.0384e-03]],设备='cuda:0',
grad_fn=))
另一个例子是:

model.eval()
text = "Warum kann mein Kollege in SAP keine Transaktionen mehr     ausführen?"
input = tokenizer(            
   text,
   None,
   add_special_tokens=True,
   max_length=200,
   pad_to_max_length=True,
   return_token_type_ids=True,
   truncation=True,
   padding='max_length',
   return_tensors="pt"
   )

input = input.to(device)

out = model(input_ids=input['input_ids'], mask=input['attention_mask'])
text, out

    --> ('Warum kann mein Kollege in SAP keine Transaktionen mehr ausführen?',
 tensor([[2.9374e-03, 3.1926e-03, 8.7949e-03, 3.0573e-01, 2.6428e-04, 5.2946e-02,
      2.4758e-01, 6.2161e-03, 3.6930e-01, 3.0384e-03]], device='cuda:0',
    grad_fn=<SoftmaxBackward>))
    ('Auf meinem Telefon erscheinen keine Nummern mehr.',
 tensor([[2.9374e-03, 3.1926e-03, 8.7949e-03, 3.0573e-01, 2.6428e-04, 5.2946e-02,
          2.4758e-01, 6.2161e-03, 3.6930e-01, 3.0384e-03]], device='cuda:0',
        grad_fn=<SoftmaxBackward>))
('Auf meinem Telefon erscheinen keine Nummern mehr'),
张量([[2.9374e-03,3.1926e-03,8.7949e-03,3.0573e-01,2.6428e-04,5.2946e-02,
2.4758e-01、6.2161e-03、3.6930e-01、3.0384e-03]],设备='cuda:0',
grad_fn=))

这是德语,但正如你所见,预测完全吻合。遗憾的是:D和我的问题。

用培训和验证数据绘制学习曲线。这是判断拟合过度还是拟合不足的唯一方法。如何进行微调?用训练和验证数据绘制学习曲线。这是判断您是否过度贴合或不贴合的唯一方法。您是如何进行微调的?