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)
相关推荐
新缸中之脑8 小时前
微调BERT进行命名实体识别
人工智能·深度学习·bert
bst@微胖子12 小时前
PyTorch深度学习框架之多分类交叉熵实现图像分类
pytorch·深度学习·分类
Learn Beyond Limits15 小时前
神经机器翻译|Neural Machine Translation(NMT)
人工智能·神经网络·机器学习·ai·自然语言处理·nlp·机器翻译
Fleshy数模1 天前
基于 ResNet18 的迁移学习:食物图像分类实现
人工智能·分类·迁移学习
弘弘弘弘~1 天前
项目实战之评论情感分析模型——基于Bert(含任务头)
人工智能·深度学习·bert
溟有常青木1 天前
Jupyter notebook学习容易忘的点
学习·jupyter
羊小猪~~1 天前
LLM--VIT简介
大模型·llm·nlp·多模态·多模态大模型·vit·ai算法
高山流水&上善2 天前
基于BERT情感分析与多维度可视化的B站热门视频评论分析系统
人工智能·bert·音视频
33三 三like2 天前
BERT-BiLSTM-CRF 养老需求实体抽取模型解析与实践:从口语文本到结构化知识
人工智能·深度学习·bert
SomeB1oody2 天前
【Python深度学习】1.2. 多层感知器MLP(人工神经网络)实现非线性分类理论
开发语言·人工智能·python·深度学习·机器学习·分类