处理文本分类中样本不均衡的问题

    一个文本二分类的项目中遇到了严重的数据倾斜(data skew),想到两种解决的思路: (1) 仿照数据增强,打乱词序增加正样本数量,以及样本直接复制扩充(增加loss中的影响,但也会影响到train集中的准确率) ;(2) 设计一个新的loss函数,增加对少样本的损失占比。
    总结一下已有做法:

尝试其它评价指标 

  样本不均衡时,loss对各类别的反映程度也不均衡,因此准确度这个评价指标在类别不均衡的分类任务中并不能work,甚至进行误导(分类器不work,但是从这个指标来看,该分类器有着很好的评价指标得分)。因此在类别不均衡分类任务中,需要使用更有说服力的评价指标来对分类器进行评价。如何对不同的问题选择有效的评价指标参见这里。 

  上面的超链接中的文章,讲述了如何对乳腺癌患者复发类别不均衡数据进行分类。在文中,推荐了几个比传统的准确度更有效的评价指标:

        混淆矩阵(Confusion Matrix):使用一个表格对分类器所预测的类别与其真实的类别的样本统计,分别为:TP、FN、FP与TN。

        精确度(Precision)

        召回率(Recall)

        F1得分(F1 Score):精确度与找召回率的加权平均。

    个人认为对于不均衡样本召回率是很好的评价方式,混淆矩阵也可以直观反映出样本训练的效果。

对数据集进行重采样以及欠采样

  可以使用一些策略该减轻数据的不平衡程度。该策略便是采样(sampling),主要有两种采样方法来降低数据的不平衡性。

            对小类的数据样本进行采样来增加小类的数据样本个数,即过采样(over-sampling ,采样的个数大于该类样本的个数)。

            对大类的数据样本进行采样来减少该类数据样本的个数,即欠采样(under-sampling,采样的次数少于该类样本的个素)。

  采样算法往往很容易实现,并且其运行速度快,并且效果也不错。更详细的内容参见这里 

  一些经验法则:

            考虑对大类下的样本(超过1万、十万甚至更多)进行欠采样,即删除部分样本;

            考虑对小类下的样本(不足1为甚至更少)进行过采样,即添加部分样本的副本;

            考虑尝试随机采样与非随机采样两种采样方法;

            考虑对各类别尝试不同的采样比例,比一定是1:1,有时候1:1反而不好,因为与现实情况相差甚远;

            考虑同时使用过采样与欠采样。



数据增强

        CV中常用到数据增强的方式提升模型的效果,联系到nlp中,可以对文本进行一些句子顺序打乱以句内词序打乱的操作进行小类的数据增强,同时这个方法对于大类也可以进行。其他的方法还有进行同义词替换,我觉得这是一个很棒的方式。

        将数据增强结合过采样是比较直观有效的做法。


Loss解决样本不均衡问题 

RBG和Kaiming给出的相当牛逼的方法,这里不做详细介绍。
详情见链接:http://blog.csdn.net/u014380165/article/details/77019084


参考:https://blog.csdn.net/heyongluoyao8/article/details/49408131

https://blog.csdn.net/u014535908/article/details/79035653




阅读更多
个人分类: nlp
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭