赞
踩
首先,我介绍下多元文本分类和多标签文本分类的的区别。
1、Multi-Class:多分类/多元分类(二分类、三分类、多分类等)
2、Multi-Label:多标签分类
3、二者区别
例子:
假设个人爱好的集合一共有6个元素:运动、旅游、读书、工作、睡觉、美食
下面,我会介绍3种文本多标签分类的方法。
1、改变输出概率(probabilities)的计算方式和交叉熵的计算方式
2、改变输出的全连接层。
3、使用框架:Attention + seq2seq(Beam Search)
Attention 结构图
以上3种方法,都有自己的优缺点。可能不同的人会有不同的想法,有的人会觉得第1种方法最好,有的人会觉得第2种会更种好,还有剩下一部分人会觉得第3种方法最好。我们有自己不同的理解,是因为我们都有自己的想法。(有想法可以留言评论)
至于哪一种方法最好呢,实践出真理。所以,之后,我会在同一个Pretraining LM的基础上,通过修改下游任务的框架,按照以上3种方法逐一实现(附代码)。
Github链接: https://github.com/hellonlp/classifier-multi-label
1、改变输出概率(probabilities)的计算方式和交叉熵的计算方式
HelloNLP:多标签文本分类 [ALBERT](附代码)76 赞同 · 42 评论文章编辑
HelloNLP:多标签文本分类 [ALBERT+TextCNN](附代码)126 赞同 · 292 评论文章编辑
2、改变输出的全连接层
HelloNLP:多标签文本分类 [ALBERT+Denses](附代码)65 赞同 · 25 评论文章编辑
3、基于Seq2Seq+Attention框架
HelloNLP:多标签文本分类 [ALBERT+Seq2Seq+Attention]127 赞同 · 68 评论文章编辑
接下来的实验结果是基于一个多标签的文本分类,其中标签数量为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的效果。
3、结论
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。