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)
相关推荐
Interview Aid1129 小时前
McKinsey OA 真题解析:数组优化与机器学习分类
人工智能·机器学习·分类
听风吹等浪起10 小时前
第25章:基于ConvNeXt实现肺部CT肺癌四分类:数据集、训练调优、网络结构与Streamlit网页部署
人工智能·分类·数据挖掘
IT研究室1 天前
最新计算机毕业设计选题推荐-基于深度学习的塑料类型图像分类研究-运行部署-文档指导-深度学习-YOLO
深度学习·分类·课程设计
这张生成的图像能检测吗3 天前
(论文速读)ClassBD:让盲反卷积与故障分类器协同学习的抗噪轴承诊断方法
分类·信号处理·故障诊断·去噪
WenGyyyL3 天前
从零理解强化学习:为什么 AI 需要 Advantage,而不只是 Reward?
人工智能·python·深度学习·机器学习·nlp
虎鲸不是鱼4 天前
AI 自动化逆向(十二)AI 有分类冲动:非要找二元判据
人工智能·分类·自动化·逆向·ai逆向
jay神4 天前
基于 YOLOv8 的垃圾分类识别系统
人工智能·深度学习·yolo·机器学习·目标跟踪·分类·计算机毕业设计
lzhdim5 天前
AI的分类
人工智能·算法·机器学习·分类·数据挖掘
ViperL15 天前
[高光谱]DADnet-基于对抗生成的单源域泛化分类
人工智能·分类·数据挖掘
咕泡科技5 天前
深度学习碾压机器学习?经典机器学习是否真的无用了?从LLM底层逻辑到工业落地全景解析
人工智能·深度学习·机器学习·llm·nlp