1、背景:git
最近在作意看法释分类任务,数据集中出现了严重的类别不均衡的问题,类别1的数目大概只有类别2的七分之一,类别2的数目大概占所有数据集的一大半了。在这种状况下,模型训练容易忽视小类而偏向大类,而小类别信息对咱们来讲也是很是重要的,咱们也但愿能提取更多的小类的特征,提升小类别的准确率。因此如何处理数据类别的不平衡问题,提升模型的宏平均值,也是咱们须要重点关注的问题。github
2、解决办法性能
解决这个问题的一个思路就是但愿在模型训练的时候小类和大类的重要性的同样的,主要能够经过两种方法实现,一个是采样,一个加权,还有数据加强。测试
1. 采样spa
理论:blog
采样分为上采样和下采样。上采样是将小类别复制多份,使得他们的数目与大类别相近。下采样是在大类别中随机剔除一些数据,使得大类别和小类别数目相近。it
这样的方法缺点也很明显了,上采样的话,因为将小类别样本复制了多份,那么模型就容易出现过拟合问题,下采样的话,因为删除了一部分数据,那么模型就有可能学不到一些特征,模型性能就会下降。图像处理
因此综合了上采样和下采样的方法,先是对大类进行屡次下采样,将小类别复制多份与大类别子集合并,从而产生多个训练子集,用多个训练子集分别训练出多个模型,最后用投票的方式获得最后结果。扩展
实践:方法
将类别2随机分红7个子集,每一个子集数目与其余小类别数目相近,而后将每个类别2的子集与其余小类别的数据合并训练一个模型,这样能够同时训练7个模型,最后测试的时候用这个7个模型获得的结果进行投票(加权平均)。
结果:
在小类别上的性能是上升了,可是在大类别上的性能降低了,总体性能与以前差很少,性能没有获得什么提高啊。
2. 加权
针对数据不平衡问题,尝试使用目标检测任务中的方法,用focal loss和pull away term loss对各个类别进行加权,使用加权的方法处理不平衡问题是须要大量的调参的,并且咱们有4个类别,调参组合不少,很难调参。目前使用最简单粗暴的参数设置,Y=2,alpha=0,性能有一点提高,在宏平均上有1%左右的提高,在微平均上与baseline持平。
3. 数据加强
理论:
以前在上采样中提到,若是将小类别复制多份容易产生过拟合问题,要解决这个问题,咱们其实能够在数据中增长一些随机扰动,效果可能会好一些。在图像处理里面,常见的作法是修改RGB值,那么在文本处理里面,我想到可使用同义词替换来构造小类别样本。
实践:
(1)在github上找到了哈工大同义词林的最新版,选取其中的同义词,共计9995对,55846个词。
(2)因为一个词可能会有多个同义词,我采用随机选取的方式构造语料,测试结果以下所示:
发现构造结果很是很差,思考了一下,应该是由于同义词的涉及领域太广了,因此对同义词进行了删选。
(3)用手机领域的背景语料对同义词进行了删选,最后还剩31225个词。为了防止过拟合,对替换的句子进行了筛选,只选取了替换处大于3处的句子。用删选后的同义词构造语料,测试结果以下所示:
发现状况好一些了,可是仍是不肯定这样的语料是否有效。
(4)采用2种方式构造小类别数据,1种是全句替换,另外1种是保留意看法释片断,只替换上下文。尚未跑出结果。
扩展作法:
1. 若是同义词随机替换的方法没有效果,也可采用计算embedding类似度的方法替换,没进行过尝试,之后有时间能够探索一下。
2. 为了使替换的同义词更准确,也能够加入词性分析。
结果:
按照上述步骤处理以后,用新的数据集在baseline模型上进行了测试,模型分类效果显著,获得了目前为止的最高性能。