jupyter快速实现单标签及多标签多分类的文本分类BERT模型

jupyter实现pytorch版BERT(单标签分类版)

nlp-notebooks/Text classification with BERT in PyTorch.ipynb

通过改写上述代码,实现多标签分类

参考解决方案 ,我选择的解决方案是继承BertForSequenceClassification并改写,即将上述代码的ln 9 改为以下内容:

python 复制代码
from transformers.modeling_bert import BertForSequenceClassification
from transformers.modeling_outputs import SequenceClassifierOutput

class BertForMultilabelSequenceClassification(BertForSequenceClassification):
   def __init__(self, config):
     super().__init__(config)

   def forward(self,
       input_ids=None,
       attention_mask=None,
       token_type_ids=None,
       position_ids=None,
       head_mask=None,
       inputs_embeds=None,
       labels=None,
       output_attentions=None,
       output_hidden_states=None,
       return_dict=None):
       return_dict = return_dict if return_dict is not None else self.config.use_return_dict

       outputs = self.bert(input_ids,
           attention_mask=attention_mask,
           token_type_ids=token_type_ids,
           position_ids=position_ids,
           head_mask=head_mask,
           inputs_embeds=inputs_embeds,
           output_attentions=output_attentions,
           output_hidden_states=output_hidden_states,
           return_dict=return_dict)

       pooled_output = outputs[1]
       pooled_output = self.dropout(pooled_output)
       logits = self.classifier(pooled_output)

       loss = None
       if labels is not None:
           loss_fct = torch.nn.BCEWithLogitsLoss()
           loss = loss_fct(logits.view(-1, self.num_labels), 
                           labels.float().view(-1, self.num_labels))

       if not return_dict:
           output = (logits,) + outputs[2:]
           return ((loss,) + output) if loss is not None else output

       return SequenceClassifierOutput(loss=loss,
           logits=logits,
           hidden_states=outputs.hidden_states,
           attentions=outputs.attentions)
           
model = BertForMultilabelSequenceClassification.from_pretrained(BERT_MODEL, num_labels = len(label2idx))
model.to(device)
相关推荐
想会飞的蒲公英7 小时前
逻辑回归为什么叫回归,却用来做分类
人工智能·python·分类·回归·逻辑回归
OpenApi.cc19 小时前
猫狗分类模型 GPU版
pytorch·深度学习·分类
xin(n_n)b21 小时前
优化器Adam
nlp
不羁的木木1 天前
《HarmonyOS技术精讲-Core Vision Kit》第8篇:图像标签分类
华为·分类·harmonyos
海海不掉头发2 天前
机器学习实战:从零掌握集成学习(RF/XGBoost/GBDT/AdaBoost)—— 附泰坦尼克号、红酒分类、加州房价全流程解析
机器学习·分类·集成学习
向哆哆3 天前
高质量人体检测与行人识别数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测·分类
2zcode4 天前
基于MATLAB图像处理的水果识别与分类系统设计与实现
图像处理·matlab·分类
萧萧秦风瘦飞马4 天前
CSDN博客-第6天-DataLoader与二维非线性分类
人工智能·分类·数据挖掘
+wacyltd大模型备案算法备案4 天前
大模型评估测试题库怎么建?风险分类、测试样本的完整方法
人工智能·算法·安全·分类·大模型·大模型备案·大模型上线登记
All The Way North-4 天前
【Transformers 实战——特征提取】从 Tokenizer 编码到 BERT 四类返回值详解与 NER 选型避坑
bert·huggingface·transformers·tokenizer·特征提取·pooler_output·last_hidden