精华内容
下载资源
问答
  • 对没有标签的文本进行分类
    千次阅读
    2022-03-20 13:48:00

    ·阅读摘要:
      在本文中,作者基于CNN、Attention、GAT提出CS-GAT模型,在一些通用数据集上,表现良好。
    ·参考文献:
      [1] 融合CNN-SAM与GAT的多标签文本分类模型

      本篇论文写的比较好,在介绍模型的时候,条理清晰。有借鉴意义。

    【注一】:个人觉得本文是标准的“模型缝合”的产出,眼下这种出论文的方式还是很香的。

    [1] 参考论文信息

      论文名称:《融合CNN-SAM与GAT的多标签文本分类模型》

      发布期刊:《计算机工程与应用》

      期刊信息:CSCD扩展
    在这里插入图片描述

    [2] 模型

      模型图如下:
    在这里插入图片描述
       文本与标签词嵌入层: 使用了glove的预训练词向量,对文本数据和标签都是使用glove来转化词向量的。

       BiLSTM层: 双向LSTM,用的很多了。

       融合局部与全局的文本特征提取层: 这里想要对BiLSTM层的输出 H H H提取局部信息和全局信息。

      · 对于局部信息,采用多卷积核大小的CNN+最大Pooling来提取。

      · 对于全局信息,采用注意力机制提取。

      · 最后,把提取出来的局部信息和全局信息拼接即可。

    【注二】:CNN+Pooling、Attention是比较基础的文本分类领域知识。也比较常用这些技术。

       标签图注意力层: 这是GAT模型的内容。为标签编码成图结构。

       标签文本交互层: 把全局标签信息表示与文本上下文语义信息表示做交互注意力计算。

       自适应融合层:标签文本交互层融合局部与全局的文本特征提取层的输出进行融合,然后就可以分类了。

    【注三】:GAT模型比较抽象,论文地址:https://arxiv.org/pdf/1710.10903.pdf

    更多相关内容
  • 标签分类综述 意义 网络新闻往往含有丰富的语义,一篇文章既可以属于“经济”也可以属于“文化”。给网络新闻打多标签可以更好地反应文章的真实意义,方便...在深度学习中,每一类训练一个文本分类模型(如:text
  • 文本分类作为自然语言处理中一个基本任务,在20世纪50年代就已经其算法进行了研究,现在单标签文本分类算法已经趋向成熟,但是对于多标签文本分类的研究还有很大的提升空间。介绍了多标签文本分类的基本概念以及...
  • 人工智能-项目实践-文本分类-本项目采用Keras和Keras-bert实现文本多标签分类任务,BERT进行微调。 本项目采用Keras和Keras-bert实现文本多标签分类任务。 数据集 2020语言与智能技术竞赛:事件抽取任务 本...
  • 层次多标签文本分类方法[J/OL].小型微型计 算机系统. https://kns.cnki.net/kcms/detail/21.1106.TP .20211130.1228.002.html [1] 引言   层次结构的标签一般有两种表示:   两种结构表示的示例图如下: ...

    ·阅读摘要:
      本文是一篇中文综述,主要介绍了层次多标签分类的一些算法。
    ·参考文献:
      [1] 赵海燕,曹杰,陈庆奎,曹健.层次多标签文本分类方法[J/OL].小型微型计
    算机系统. https://kns.cnki.net/kcms/detail/21.1106.TP .20211130.1228.002.html

    [1] 引言

      层次结构的标签一般有两种表示:
    请添加图片描述
      两种结构表示的示例图如下:
    请添加图片描述

    [2] 基本概念

      文中提出层级多标签分类的基本处理过程:
    请添加图片描述

    【注一】:文中提到“特征降维”这个过程,解释为:由向量空间模型来描述的文本向量通常具有较高的维度,这对于后续的分类任务来说,将带来效率低下和精确性下降的危害。 一般的话,特征降维是在机器学习的算法用的,深度学习的话,用词向量表示完文本,就直接卫道模型里面去了。

    [4] 层次多标签文本分类器研究现状

      脑图如下:
    请添加图片描述

    【注二】:个人觉得,基于图表示的算法值得深究。

    [6] 展望

      文中提到的未来突破方向有四:

      (1)分类器的设计。如何利用文本和各层标签的关系、如何利用层次标签的依赖关系是考察分类器优劣的一个重要方面。

      (2)寻找更好的文本编码表示。文本分类和其他分类的一个很大区别在于,因为文本一般是非结构化或者半结构数据,如何将其表示并能够较少地损失其原来蕴含的信息,这对后续的文本分类来说很重要,当然,Transformer和 BERT是两个目前效果较好的语言模型,也可以寻求其他方法来表示文本,比如文本的图表示等。但是这些表示都是通用的表示方法,而什么样的编码表示更适合于层次多标签文本分类还有待进一步研究。

      (3)极端的层次多标签文本分类问题。随着应用的深入,不少应用面临极端的层次多标签文本分类任务。它的特点是层次标签的数目非常多,层次级别也非常深,造成模型规模可能非常庞大,目前的计算能力难以处理。如何高效地处理极端层次多标签文本分类问题将成为未来的一个研究方向。

      (4)现实数据集中标签的长尾问题。在现实数据集中,大部分标签的数据是相对较少的,即很少的数据和一些标签关联,甚至没有数据关联,特别在层次结构的底层靠近叶子节点处。长尾问题在极端的层次多标签文本分类问题中尤其严重。这种情况对于模型学习将造成困难,可能导致无法预测的问题。因此,如何处理层次多标签文本分类中的长尾问题,也是未来的一个重要研究方向。

    【注三】:比较好突破的是1、3、4。
    模型是最好做出突破的;
    其次是解决长尾问题,长尾问题不是只存在于文本分类任务中的,它几乎在所有的分类任务中都存在,包括CV领域,所以解决方法很多,比较容易找到灵感;
    极端的层次多标签文本分类问题做的不多,但是“极端”就意味着“大”,“大”就意味着“显卡”,没有硬实力会很难做。

    展开全文
  • 针对日渐丰富的跨语言的文字信息资源与新闻...最后,新加入的文档进行跨语言文本分类标签的推荐。实验结果表明,跨语言文本分类任务中micro-<i>F</i><sub>1达到94.81%,推荐的标签也能较好地体现出语义上的相关性。
  •   本文在BERT模型上,提出了利用多任务架构来解决层级多标签文本分类问题。 ·参考文献:   [1] MSML-BERT模型的层级多标签文本分类方法研究 [0] 摘要   在摘要中,作者主要给出了本篇论文的创新点:   1...

    ·阅读摘要:
      本文在BERT模型上,提出了利用多任务架构来解决层级多标签文本分类问题。
    ·参考文献:
      [1] MSML-BERT模型的层级多标签文本分类方法研究

    [0] 摘要

      在摘要中,作者主要给出了本篇论文的创新点:

      1、多任务学习架构
      2、多尺度特征抽取模块
      3、多层级信息传播模块
      4、层次化门控机制

      最后论文再总结一下,提出的模型在数据集上效果良好。

    【注一】:上述的四个创新名词,其实原理都比较简单。“多尺度特征抽取模块”等于“CNN”,“多层级信息传播模块”等于“向量拼接”。(要想论文发的好,名词一定要起的妙!哈哈)

      作者总结了当前HMTC(Hierarchical Multi-label Text Classification,层级多标签文本分类)面临的两大问题

      (1)使用相同的模型结构来预测不同层级的标签,忽略了不同层级和粒度的标签之间的差异性和多样性,导致对各层级标签的预测性能较差;

      (2)没有显式和充分地建模层级依赖关系以及引入了不必要的噪音,造成对下层长尾标签的预测性能尤其差,并且会导致标签不一致问题。

    【注二】:总结的说:用一个模型预测多个层级的标签并不准确;没有使用到层级的标签信息。

    [1] 相关工作

    请添加图片描述
      如图,当前HMTC方法有三种算法方法:

      展平方法:就是不考虑标签的层级结构,直接把层级标签当成普通多标签文本分类来建模。有时候,展平方法是把所有的层级标签都展平,有时候是把最后一层的标签展平。

    【注三】:展平方法对HMTC的效果是有瓶颈的。

      局部方法:局部方法指的是,为层级标签的每个节点都设置一个分类器,这中分类器一般是机器学习的分类器,如SVM等。

    【注四】:可想而知,这样的效果也做不到最好。

      全局方法:用单个分类器并且更显式地对标签层次结构进行建模,模型通常采用端到端的方式训练并且对所有标签进行一次性地预测。

    【注五】:全局方法旨在更好的利用标签信息、标签的层次结构信息。

    [2] 基于MSML-BERT模型的层级多标签文本分类方法

      模型如下图:
    在这里插入图片描述
      讲解模型:

      · 首先,架构是多任务学习架构,采用的是硬参数共享方法。每个任务的模型由共享层任务特定层两个部分组成。共享层用于学习和共享通用的知识和表征,而任务特定层用于弥补不同任务之间的差异以及提高不同任务的泛化性。

      · 本文模型的共享层,就是bert模型。采用bert的后几层,bert的输出应用到下游任务。

    【注六】:bert已经是基操了。这样算作是共享层的话,那么像普通使用glove等预训练词向量也能称为共享层。

      · MSFEM(多尺度特征抽取模块),特征抽取的意思就是卷积层的卷积,多尺度的意思是采用不同窗口大小的卷积核。图中使用了3个TextCNN模型,对应到数据集中的3层标签结构。

      · MLIPM(多层级信息传播模块),把上一层的输出,拼接在下一层的输入中。不过拼接的方式比较不一样,采用的是HGM(层次化门控机制)。

      · HGM(层次化门控机制),一种合并向量的门控方式,如下图:
    在这里插入图片描述

    【注七】:对于模型提取特征时,不同的层级,卷积层提取的宽度不一样,文中的解释为:对于较上的层级采用较宽的一维卷积核提取粗粒度特征,对于较下的层级采用较窄的一维卷积核提取细粒度特征。

    [3] 实验

      数据集如下:
    在这里插入图片描述
      RCV1-V2是非常经典的一个多标签文本分类数据集。

      实验结果如下:
    在这里插入图片描述
      可以看到全局方法有碾压般的表现。

    [4] 模型性能分析

    【注八】:个人觉得这里写的很好,有理有据,值得学习。

      消融实验:(其实就是控制变量)
    在这里插入图片描述
      这里就证明了,论文提出的模型改进方法确实是有效果的。

      分层表现分析 :(查看不同模型在不同标签层级的评分)

    在这里插入图片描述
      这里就证明了,论文提出的模型,在层级较深时,表现就更好。说明论文的创新点是正确的。

      标签一致性分析 :

      标签一致性问题是模型预测的每一层标签,并不符合原始标签的层级关系。
    在这里插入图片描述
      这里也证明了论文提出的模型的优点。

    展开全文
  • Bert实现多标签文本分类

    千次阅读 2021-12-07 15:40:17
    标签文本分类 Bert简介 两个任务 Bert是按照两个任务进行预训练的,分别是遮蔽语言任务(Masked Language Model)和句子预测任务(NextSentence Prediction)。 遮蔽语言任务(Masked Language Model) 输入的语句中...

    多标签文本分类

    Bert简介

    两个任务

    Bert是按照两个任务进行预训练的,分别是遮蔽语言任务(Masked Language Model)和句子预测任务(NextSentence Prediction)。

    遮蔽语言任务(Masked Language Model

    对输入的语句中的字词 随机用 [MASK] 标签覆盖,然后模型对mask位置的单词进行预测。这个过程类似CBOW训练的过程,我们利用这个训练任务从而得到每个字符对应的embedding。特别的,[CLS]字符的embedding我们可以视为整个句子的embedding。我们可以理解为[CLS]字符跟句子中的其它字符都没有关系,能较为公平的考虑整个句子。

    句子预测任务(NextSentence Prediction

    该任务就是给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后。如果我们训练的时候将问题和答案作为上下句作为模型输入,该任务也可以理解为判断问题和答案是否匹配

    Bert相当于N个transormer encoder,原作者给出的bert模型中有12层和24层两种。下面使用的是12层的bert

    输入

    假设我们输入了一句话是“我爱你,你爱我”,我们需要利用tokernizer做初步的embedding处理

    sen_code = tokenizer.encode_plus("我爱你,你爱我")
    

    得到的sen_code是这样的

    {‘input_ids’: [101, 2769, 4263, 872, 102, 872, 4263, 2769, 102],

    ‘token_type_ids’: [0, 0, 0, 0, 0, 1, 1, 1, 1],

    ‘attention_mask’: [1, 1, 1, 1, 1, 1, 1, 1, 1]}

    input_ids就是每个字符在字符表中的编号,101表示[CLS]开始符号,[102]表示[SEP]句子结尾分割符号。

    token_type_ids是区分上下句的编码,上句全0,下句全1,用在Bert的句子预测任务上

    attention_mask表示指定哪些词作为query进行attention操作,全为1表示self-attention,即每个词都作为query计算跟其它词的相关度

    将input_ids转化回token

    tokenizer.convert_ids_to_tokens(sen_code['input_ids'])
    #output:['[CLS]', '我', '爱', '你', '[SEP]', '你', '爱', '我', '[SEP]']
    

    Bert模型的输入是三个embedding的求和,token embedding,segment embedding和position embedding

    # token embedding
    tokens_tensor = torch.tensor([sen_code['input_ids']]) # 添加batch维度
    # segment embedding
    segments_tensors = torch.tensor([sen_code['token_type_ids']]) # 添加batch维度
    

    position_embedding由bert生成,我们不用考虑。

    输出

    现在我们根据代码看看bert的输出

    bert_model.eval()
    with torch.no_grad():
        outputs = bert_model(tokens_tensor, token_type_ids = segments_tensors)
        encoded_layers = outputs   # outputs类型为tuple
    

    最后一个隐藏层的输出,即遮蔽语言任务的输出,亦即每个字符的embedding

    print("sequence output",encoded_layers[0].shape)
    # sequence output torch.Size([1, 9, 768])
    

    考虑全部隐藏层的第一个输出,然后进行pool操作的结果,所谓的pool操作就是接一个全连接层+tanh激活函数层。它可以作为整个句子的语义表示,但也有将所有单词的平均作为句子的表示的做法

    print("pooled output",encoded_layers[1].shape)
    # pooled output torch.Size([1, 768])
    

    所有隐藏层的输出,hidden_states有13个元素,第一个是[CLS]的embedding,后面12个元素表示12个隐藏层的输出,对于seq2seq的任务,它们将作为decoder的输入

    print("hidden_states",len(encoded_layers[2]),encoded_layers[2][0].shape)
    # hidden_states 13 torch.Size([1, 9, 768])
    

    attention分布,有12个元素,每个隐藏层的hidden_states经过self-attention层得到的attention分布,没有乘以V矩阵。因为是multi-head,一共有12个头,所以每个attention分布的维度是1x12x9x9(1是batch_size,9是序列长度)

    print("attentions",len(encoded_layers[3]),encoded_layers[3][0].shape)
    # attentions 12 torch.Size([1, 12, 9, 9])
    

    在本项目里面hidden_states和attention都不需要

    我们的分类方案是在Bert添加一个全连接层作为分类器,以sigmoid作为激活函数,把每个神经元都当成是二元分类。

    语料处理

    文本预处理

    本项目语料采用kaggle上的toxic comments数据集,在输入模型之前需要对该数据集做一些预处理

    单个缩写展开

    对于一些常用的缩写,例如you’re,it’s等等,我们将它分开

    例如:

    replacement = {
        "aren't": "are not",
        "can't": "cannot",
        "couldn't": "could not",
        "didn't": "did not",
    	......
    }
    
    常用简写替换
    sentence_repl = sentence.replace(r" you re ", " you are ")
    sentence_repl = sentence_repl.replace(r" we re ", " we are ")
    sentence_repl = sentence_repl.replace(r" they re ", " they are ")
    sentence_repl = sentence_repl.replace(r"@", "at")
    sentence_repl = sentence_repl.replace(r"&", "and")
    
    去除无用样本

    这里所谓的无用样本指的是长度太短的样本,它很难产生有效信息。我们设定的最小长度为2。所有长度小于2的样本不参与训练

    去除无用符号

    本项目中的无用符号包括网址(http)、时间(例如UTC+09:00,dec 11, 2019)、IP地址、@后面的邮箱地址、换行符\r\n)等等

    替换中文相关词汇

    虽然在训练和测试数据集中没有看到有中文的句子,但是仍然考虑到应用场景下有出现中文侮辱词汇的可能性

    所以也考虑了跟toxic comment相关性强的几句中文的替换

    因为这几句中文无法过审,所以在这儿就不写了

    文本编码

    训练时,调用BERT预训练模型,输入包括三个部分。input_ids,token_type_ids,以及attention_mask

    input_ids就是每个字符在字符表中的编号,101表示[CLS]开始符号,[102]表示[SEP]句子结尾分割符号。

    token_type_ids是区分上下句的编码,上句全0,下句全1,用在Bert的句子预测任务上

    attention_mask表示指定哪些词作为query进行attention操作,全为1表示self-attention,即每个词都作为query计算跟其它词的相关度

    因此,在经过前面的预处理后,还要将文本转换成编码才能输入给bert模型。

    在训练的时候,所有的样本都需要保持相同的长度以进行批量平行运算。超过最大长度的截掉,长度不够的用[PAD]符号填充,[PAD]的编码是数字0。segment_ids和attention_mask的长度都会跟随文本变化

    def get_input_ids(self, x):
        input_ids = self.tokenizer.encode(x)
        if len(input_ids) > self.max_seq_length:
            input_ids = [input_ids[0]] + input_ids[1:self.max_seq_length - 1] + [input_ids[-1]]
        else:
            input_ids = input_ids + [0] * (self.max_seq_length - len(input_ids))
        return input_ids
    

    另外,对于多标签文本分类任务来说,segment_ids和attention_mask没有意义,所以前者为全0,后者为全1即可

    input_ids = torch.tensor(list(data['input_ids'].values), dtype=torch.int)
    input_mask = torch.ones(size=(len(data), self.max_seq_length), dtype=torch.int)
    

    模型构建

    网络结构图

    在这里插入图片描述

    我们在构建Bert的迁移训练模型的时候,最好继承BertPreTrainedModel,这样就可以很方便的使用from_pretrained和save_pretrained加载和保存模型。

    我们构建的模型以BERT作为特征提取器,输出的pooled output作为分类器的特征输入。同时我们采用了dropout层以防止过拟合。

    按照前面所介绍的方案,因为本项目中一共有六个标签,[“toxic”, “severe_toxic”, “obscene”, “threat”, “insult”, “identity_hate”]。所以最终全连接层的输出是6,输入是pooled output的特征维度,即hidden_size:786

    Pytorch实现

    class BertForMultiLabel(BertPreTrainedModel):
        def __init__(self, config):
            super(BertForMultiLabel, self).__init__(config)
            self.bert = BertModel(config)
            self.dropout = nn.Dropout(config.hidden_dropout_prob)
            self.classifier = nn.Linear(config.hidden_size, config.num_labels)
            self.sigmoid = nn.Sigmoid()
    
        def forward(self, input_ids, token_type_ids=None, attention_mask=None, head_mask=None):
            outputs = self.bert(input_ids, token_type_ids, attention_mask, head_mask)
            pooled_output = outputs[1]
            pooled_output = self.dropout(pooled_output)
            logits = self.classifier(pooled_output)
            return self.sigmoid(logits)
    

    模型训练

    训练方案一,冻结BERT的全部层参数,只训练分类器

    损失函数

    因为定义模型结构的时候已经把sigmoid定义到了模型结构中,因此损失函数不必考虑sigmoid,并且我们训练的的n个二元分类器,所以损失函数采用的是二元的交叉熵损失函数,在pytorch的nn模块里定义是BCELoss()

    loss = nn.BCELoss()
    
    优化器

    Bert原模型训练时采用的优化器是AdamW,AdamW是在Adam+L2正则化的基础上进行改进的算法。
    使用Adam优化带L2正则的损失并不有效。如果引入L2正则项,在计算梯度的时候会加上对正则项求梯度的结果。因此在Adam上,权重衰减和L2正则并不等同,故而AdamW就是一种Adam与权重衰减结合的产物。

    因为我们只训练分类器,所以在这采用Adam优化器

    利用pytorch定义优化器如下,学习率设为0.01

    optimizer = optim.Adam(model.parameters(),lr=lr,eps=adam_epsilon)
    
    训练过程

    训练集

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    验证集

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    训练方案二,解冻BERT的全部层参数,作fine-tuning

    损失函数

    损失函数仍然采用二元交叉熵损失函数

    优化器

    使用跟Bert预训练一致的AdamW优化器,初始学习率lr定义为2e-5

    optimizer = optim.AdamW(optimizer_grouped_parameters, lr=lr, eps=adam_epsilon)
    
    训练技巧(tricks)

    在一些稍完整的项目中,在模型训练时会做更多的考虑。比如如何节省显存(混合精度训练),如何防止梯度爆炸(梯度裁剪),如何增大batch_size却不增加显存占用(梯度累积)等等

    在本项目中采用了梯度裁剪、学习率预热、权重衰减

    梯度裁剪

    grad_clip为梯度阈值,设为1,超过1的梯度会强制设为1。weight_decay 设为 0.01

    在每次反向传播计算梯度后,都要执行下方的语句裁剪梯度

    clip_grad_norm_(model.parameters(), grad_clip)
    
    权重衰减

    权重衰减是很常见的防止过拟合的训练策略,通过惩罚参数让模型更稳定平滑。在模型中,除bias和layernorm之外的参数均设定了weight-decay,为0.01

    对参数做权重衰减是为了使函数平滑,然而bias和layernorm的权重参数不影响函数的平滑性。他们起到的作用仅仅是缩放平移,因此不需要权重衰减

    param_optimizer = list(model.named_parameters())
    no_decay = ['bias', 'LayerNorm.weight']
    optimizer_grouped_parameters = [
        {'params': [p for n, p in param_optimizer if not any(nd in n for nd in no_decay)],
         'weight_decay': weight_decay},
        {'params': [p for n, p in param_optimizer if any(nd in n for nd in no_decay)], 'weight_decay': 0.0}
    ]
    
    学习率预热

    由于刚开始训练时,模型的权重是随机初始化的,此时若选择一个较大的学习率,可能带来模型的不稳定(振荡),选择Warmup预热学习率的方式,可以使得开始训练的几个epoches或者一些steps内学习率较小,在预热的小学习率下,模型可以慢慢趋于稳定,等模型相对稳定后再选择预先设置的学习率进行训练,使得模型收敛速度变得更快,模型效果更佳。

    项目中设定的warmup_proportion为0.1,按step进行预热

    warmup_proportion = 0.1
    warmup_steps = int(t_total * warmup_proportion)
    optimizer = optim.AdamW(optimizer_grouped_parameters, lr=lr, eps=adam_epsilon)
    scheduler = get_linear_schedule_with_warmup(optimizer, num_warmup_steps=warmup_steps, num_training_steps=t_total)
    

    训练过程

    训练集

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    验证集

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    模型对比评估

    分类指标

    对多标签文本分类,我们常用的标准有准确率,精确率(查准率),查全率,hamming loss,AUC score

    准确率

    a c c u r a c y = T P + T N T P + T N + F P + F N accuracy = \frac{TP+TN}{TP+TN+FP+FN} accuracy=TP+TN+FP+FNTP+TN

    查准率

    在预测为正的样本中实际为正所占的比例
    p r e c i s i o n = T P T P + F P precision = \frac{TP}{TP+FP} precision=TP+FPTP

    查全率

    在实际为正的样本中预测为正所占的比例
    r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP

    F1-score

    precision和recall的综合考虑
    F 1 _ s c o r e = 2 ∗ p r e c i s i o n ∗ r e c a l l p r e s i o n + r e c a l l F1\_score = \frac{2*precision*recall}{presion+recall} F1_score=presion+recall2precisionrecall

    Hamming Loss

    hamming loss衡量的是预测与实际的偏离程度。例如,假设我们实际的样本的多标签分类为1,0,1,而预测的样本分类为1,1,0。那么hamming loss = 2/3,当有多个样本的时候,所有样本的hamming loss取平均即可

    AUC Score

    在了解AUC之前必须先了解什么ROC曲线

    混淆矩阵

    预测为正预测为负
    实际为正TPFN
    实际为负FPTN

    ROC的横轴为在所有实际不是某类的样本中,被错误的预测为该类的比例FPR,即
    F P R = F P F P + T N FPR = \frac{FP}{FP+TN} FPR=FP+TNFP
    纵轴为在所有实际为某一分类的样本中,被正确地预测为该分类之比率TPR,即
    T P R = T P T P + F N TPR = \frac{TP}{TP+FN} TPR=TP+FNTP
    由于预测的分类不仅仅取决于输入,还需要我们设定一个阈值,例如设置阈值为0.5,输出小于0.5个我们认为不是该分类,大于0.5是该分类。或者设置阈值为1,那么所有的样本都会被预测为不是该分类。

    于是随着阈值设置的变化,FPR,TPR也跟着变化,从而形成了ROC曲线。根据TPR和FPR的定义,我们显然希望TPR越大越好,希望FPR越小越好。即ROC曲线越靠近左上角越好。这个靠近的程度我们用ROC曲线下的面积即AUC来衡量,AUC越大表示模型越好。

    在这里插入图片描述

    训练时长

    跟预想的基本一致,第一个方案,冻结了大部分层,参数少,从而计算量小,节省显存,可以设置更大的batch。同时,因为只训练最后一层参数以及分类器参数,因此可以采用更大的学习率,从而收敛更快。

    第一个方案的每轮训练时间是12分钟左右,验证时间3分钟左右,4轮训练总时长约60分钟

    第二个方案的每轮训练时间是36分钟左右,验证时间3分钟左右,4轮训练总时长约160分钟

    模型得分

    准确率

    方案一模型准确率为96%,方案二模型准确率为99%

    AUC score

    方案一模型得分0.76057,方案二模型得分0.97910,如下为kaggle得分截图

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 由于这两篇都是比较传统意义上的多标签文本分类,所以在此进行一些对比: 这篇论文是19年CIKM上的一篇论文,刚刚的两篇论文标签文本分类任务的处理其实是比较传统,甚至说是easy点的,而多标签文本分类任务的...
  • 【论文笔记】融合标签向量到BERT:对文本分类进行改进
  • TextCNN进行文本分类标签分类

    千次阅读 热门讨论 2020-03-20 17:32:59
    • 深层次抽取信息丰富 但是也存在如下缺点: • 数据量有要求 • 需要大量计算资源 : gpu • 难以直观解释 ** TextCNN与文本分类 ** 上图是TextCNN的结构模型,对于输入层来说可以有以下几种: • CNN-rand 设计...
  • Bert模型做多标签文本分类

    千次阅读 多人点赞 2021-12-01 20:48:04
    注意,本文的重点是Bert的应用,标签文本分类的介绍并不全面 单标签文本分类 对应单标签文本分类来说,例如二元的文本分类,我们首先用一层或多层LSTM提取文本序列特征,然后接一个dropout层防止过拟合,最后...
  • 标签文本分类研究进展概述

    千次阅读 2021-04-28 18:56:23
         基于标签语义注意力的多标签...传统的多标签文本分类算法将标签视为没有语义信息的符号,然 而,在许多情况下,文本的标签是具有特定语义的,标签的语义信息和文档的内容信息是有对应关系的
  • 1 前言 今天分享一篇做层级性多元标签文本分类任务的paper,题目为:,论文是发表在2019年CIKM上,下载地址为:https://base.ustc.edu.cn/pdf/Wei-Huang-CIKM2019.pdf,论文也公开了源码:...从题目也能看出,论文的...
  • NLP之文本分类(五)---多标签分类实践

    千次阅读 2022-05-07 10:43:25
    标签分类
  • 使用深度学习对文本数据进行分类

    千次阅读 2021-04-22 17:57:44
    导入数据导入工厂报告数据...要将文本数据作为字符串导入,请将文本类型指定为 'string'。filename = "factoryReports.csv";data = readtable(filename,'TextType','string');head(data)ans=8×5 tableDescription ...
  • 本文将介绍如何使用PyTorch训练多标签文本分类模型。
  • 标签文本分类标签文本分类简介三种神经网络结构网络模型文本分类网络模型多标签文本分类网络模型 多标签文本分类简介 NLP(自然语言处理),即让计算机去理解人类的自然语言(文本、语音等),进而完成各种各样...
  • java文本分类.zip

    2021-11-19 10:14:37
    文本分类,根据添加的语料进行文本分类
  • 文本标签分类模型开发记录

    千次阅读 2022-03-28 10:26:03
    文本分类是NLP应用领域中最常见也最重要的任务类型,也是机器学习领域的经典应用场景之一。 本文通过笔者工作中的一个真实案例,讨论通过机器学习实现文本多标签分类的过程以及一些优化经验。 对于文中涉及到的一些...
  • NLP(三十六)使用keras-bert实现文本标签分类任务

    千次阅读 热门讨论 2020-12-27 14:32:23
    本文将会介绍如何使用keras-bert实现文本标签分类任务,其中BERT进行微调。 项目结构 数据集介绍 模型训练 模型评估 模型预测 总结
  • 自然语言处理—文本分类综述/什么是文本分类

    千次阅读 多人点赞 2021-11-22 15:11:42
    最近在学习文本分类,读了很多博主的文章,要么已经严重过时(还在一个劲介绍SVM、贝叶斯),要么就是机器翻译的别人的英文论文,几乎看遍全文,竟然没有一篇能看的综述,花了一个月时间,参考了很多文献,特此写下此...
  • 介绍 在本文中,我们将看到如何开发具有多个输出的文本分类模型。...在本文结尾,您将能够数据执行多标签文本分类。 数据集 数据集包含来自Wikipedia对话页编辑的评论。 评论可以属于所有这些类别......
  • 利用lda对文本进行分类LDA, or Latent Dirichlet Allocation, is one of the most widely used topic modelling algorithms. It is scalable, it is computationally fast and more importantly it generates simple...
  • PyTorch Bert文本分类

    千次阅读 2022-03-31 23:39:16
    最近pytorch大火,而目前很少有博客完整的给出pytorch-bert的应用代码,本文从最简单的中文文本分类入手,一步一步的给出每段代码~ (代码简单清晰,读者有兴趣可上手实践) 首先安装pytorch-bert库, 即:pip ...
  • 使用python和sklearn的文本标签分类实战开发

    万次阅读 多人点赞 2019-03-04 20:41:40
    文本分类一般可以分为二分类、多分类、多标签分类三种情况,二分类是指将一组文本分成两个类(0或1),比较常见的应用如垃圾邮件分类、电商网站的用户评价数据的正负面分类等,多分类是指将文本分成若干个类中的某一个类,...
  • NLP(二十八)多标签文本分类

    千次阅读 多人点赞 2020-04-10 10:49:43
    标签文本分类之从电影简介预测影片类型
  • 笔者利用hugging face的Transformers实现多标签文本分类。笔者的tensorflow版本为2.4.0,transformers的版本为4.2.0 数据处理 利用transformers中的BertTokenizer数据进行Tokenizer。代码如下: def get_model_...
  • 本文转载自:https://blog.csdn.net/liuchonge/article/details/77585222上一篇博客中我们已经总结了文本分类中常用的深度学习模型,因为知乎的本次竞赛是多标签文本分类任务,这也是我第一次接触多标签分类,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,574
精华内容 53,829
热门标签
关键字:

对没有标签的文本进行分类