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)
相关推荐
天天爱吃肉821814 分钟前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
Rorsion2 小时前
PyTorch实现二分类(单特征输出+单层神经网络)
人工智能·pytorch·分类
aiguangyuan4 小时前
使用LSTM进行情感分类:原理与实现剖析
人工智能·python·nlp
茶栀(*´I`*)5 小时前
【NLP入门笔记】:自然语言处理基础与文本预处理
人工智能·自然语言处理·nlp
Lun3866buzha6 小时前
【深度学习应用】鸡蛋裂纹检测与分类:基于YOLOv3的智能识别系统,从图像采集到缺陷分类的完整实现
深度学习·yolo·分类
Lun3866buzha6 小时前
YOLOv8-SEG-FastNet-BiFPN实现室内物品识别与分类:背包、修正带、立方体和铅笔盒检测指南
yolo·分类·数据挖掘
aiguangyuan6 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
Faker66363aaa7 小时前
基于YOLOv8-GhostHGNetV2的绝缘子破损状态检测与分类系统实现
yolo·分类·数据挖掘
holeer8 小时前
【V2.0】王万良《人工智能导论》笔记|《人工智能及其应用》课程教材笔记
神经网络·机器学习·ai·cnn·nlp·知识图谱·智能计算
Faker66363aaa8 小时前
药品包装识别与分类系统:基于Faster R-CNN R50 FPN的Groie数据集训练_1
分类·r语言·cnn