多标签文本分类介绍,以及对比训练

HelloNLP

共 2267字,需浏览 5分钟

 ·

2022-02-09 17:36

今天我为大家主要介绍几种多标签文本分类的方法。


一、文本分类介绍

首先,我介绍下多元文本分类多标签文本分类的的区别。

1、Multi-Class:多分类/多元分类(二分类、三分类、多分类等)

  • 二分类:判断邮件属于哪个类别,垃圾或者非垃圾
  • 二分类:判断新闻属于哪个类别,机器写的或者人写的
  • 三分类:判断文本情感属于{正面,中立,负面}中的哪一类
  • 多分类:判断新闻属于哪个类别,如财经、体育、娱乐等

2、Multi-Label:多标签分类

  • 文本可能同时涉及任何宗教,政治,金融或教育,也可能不属于任何一种。
  • 电影可以根据其摘要内容分为动作,喜剧和浪漫类型。有可能电影属于romcoms [浪漫与喜剧]等多种类型。

3、二者区别

  • 多分类任务中一条数据只有一个标签,但这个标签可能有多种类别。比如判定某个人的性别,只能归类为"男性"、"女性"其中一个。再比如判断一个文本的情感只能归类为"正面"、"中面"或者"负面"其中一个。
  • 多标签分类任务中一条数据可能有多个标签,每个标签可能有两个或者多个类别(一般两个)。例如,一篇新闻可能同时归类为"娱乐"和"运动",也可能只属于"娱乐"或者其它类别。

例子:

假设个人爱好的集合一共有6个元素:运动、旅游、读书、工作、睡觉、美食

二、多标签文本分类

下面,我会介绍3种文本多标签分类的方法。

1、改变输出概率(probabilities)的计算方式和交叉熵的计算方式

  • tf.nn.sigmoid_cross_entropy_with_logits测量离散分类任务中的概率误差,其中每个类是独立的而不是互斥的。这适用于多标签分类问题。
  • tf.nn.softmax_cross_entropy_with_logits测量离散分类任务中的概率误差,其中类之间是互斥的(每个条目恰好在一个类中)。这适用多分类问题。
  • 在简单的二进制分类中,sigmoid和softmax没有太大的区别,但是在多分类的情况下,sigmoid允许处理非独占标签(也称为多标签),而softmax处理独占类。


2、改变输出的全连接层。

  • 在输出层设置多个全连接层,每一个全连接层对应一个标签。
  • 损失函数为所有标签损失函数的平均值。

3、使用框架:Attention + seq2seq(Beam Search)

  • 上下文语义信息 -> 多标签之间的关系。多标签一般去看下并非独立。
  • 将多标签当作一个序列(类似一句话)。
Attention 结构图

三、实践

以上3种方法,都有自己的优缺点。可能不同的人会有不同的想法,有的人会觉得第1种方法最好,有的人会觉得第2种会更种好,还有剩下一部分人会觉得第3种方法最好。我们有自己不同的理解,是因为我们都有自己的想法。(有想法可以留言评论)

至于哪一种方法最好呢,实践出真理。所以,之后,我会在同一个Pretraining LM的基础上,通过修改下游任务的框架,按照以上3种方法逐一实现(附代码)。


四、文章

1、改变输出概率(probabilities)的计算方式和交叉熵的计算方式

  • 下游任务使用全连接层:
HelloNLP:多标签文本分类 [ALBERT](附代码)
  • 下游任务使用TextCNN:
HelloNLP:多标签文本分类 [ALBERT+TextCNN](附代码)


2、改变输出的全连接层

HelloNLP:多标签文本分类 [ALBERT+Denses](附代码)


3、基于Seq2Seq+Attention框架

HelloNLP:多标签文本分类 [ALBERT+Seq2Seq+Attention]

四、模型对比

接下来的实验结果是基于一个多标签的文本分类,其中标签数量为96个。

1、损失函数图

一共训练了4个模型,分别是ALBERT、ALBERT+TextCNN、ALBERT+Seq2Seq+Attention和ALBERT+Denses,他们在上图中的对应关系分别为:CML、CML_TextCNN、CML_SeqSeq和CML_Denses。训练过程中,每一个框架使用的同样的batch_size、learning_rate。

在上图中,从表面上看,基于ALBERT、ALBERT+TextCNN和ALBERT+Denses这三种框架下的Loss收敛的很快,这个是因为计算loss时,会考虑到标签为0的情况,即标签为空的情况(在项目中,很多样本为空标签)。


2、精确率、召回率和F1值

2.1、 评估方法

这里的精确率、召回率和F1值都是针对有标签的。

在TP的情况下,存在两种情况,一种是预测标签和真实标签完全一致,另一种是预测标签和真实标签只有部分一致。这两种情况下我们计算的方式为:

# 第一种情况
TP = TP + 1
# 第二种情况
TP = TP + 0.5
FN = FN + 0.5

这样做的目前主要是因为多标签分类中,存在标签部分召回或者过多召回(某一个样本)。


2.2、评估值

从上表中可以看到,基于ALBERT+Denses的效果远远好于基于ALBERT的。另外,基于ALBERT+TextCNN较好于的ALBERT+Denses的效果。

  • ALBERT+TextCNN和ALBERT+Seq2Seq_Attention的效果接近
  • 在推理速度上面,前面三个框架基本接近,ALBERT+Seq2Seq_Attention的速度比他们慢3倍。


3、结论

  • 如果对推理速度的要求不是非常高,基于ALBERT+Seq2Seq_Attention框架的多标签文本分类效果最好。
  • 如果对推理速度和模型效果要求都非常高,基于ALBERT+TextCNN会是一个不错的选择。
浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报