心法利器[44] | 样本不均衡之我见
心法利器
本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布。
往期回顾
样本不均衡这个问题最近问我的人不少,有关这块,总结一些我的经验吧。
样本不均衡的现象
样本不均衡问题,多半只有分类问题才会出现(NER属于序列标注,也是分类对吧),来看看所谓的不均衡通常是什么样的:
分类问题,某个类的量特别多或者特别少。 “效果差”,一个非常模糊的现象,反正就是指标不太好,不太满意吧。(看看这篇文章以后就不要这么聊发现的问题了哈:bad case分析传送门)
这个时候,就会出现通常所谓的”样本不均衡“问题。
分析思路
此时,我们不该想的是"用什么模型",怎么增减样本之类的,而是找一些比较细节的信息,通过信息来判断我们改怎么进一步做点什么。
首先,先自行找到这几个问题的答案。
比例。所谓的不均衡,有多不均衡,1:10,1:100,1:1000还是更多?很多人所谓的不均衡其实并不差多少,一般情况,差的不是很大其实并不影响计算。 少的类,有多少,几条几十条还是更多? 测试集呢,比例是否均衡,指标是否有考虑不均衡的问题,少的那一类效果咋样,准招,这里注意不能只看整体的准招。
OK,回答完这几个问题后,可以这么进行思考:
如果是差别真的很大,差几个零那种,那时候该想到的是,可以通过loss之类的手段来调整,让loss更关注一下类目少的那一些。 绝对量少,肯定是因为模型根本没吃饱,尤其是几条几十条的那种,那一方面考虑用规则,数量太少根本不够模型塞牙缝,另一方面考虑挖掘样本吧,要不一样的样本,用于让模型能绘出分类边界。 测试集问题。样本不均衡下,得多看看测试集,里面是否比例一致,里面各个类的效果又是咋样的,这里面其实能分析出很多问题。
有关测试集这里,还想多聊一些:
测试集要看每个类的效果,再次强调。 如果每个类效果都很差,大概率就不是不均衡问题,好好优化数据和模型吧。 多的类差,少的类好,那其实就是别的问题了,暂时别惦记样本不均衡了。 少的差,多的还行,那这个可以当做样本不均衡问题来解决。但是如果差的不是很多,其实也是一般地分析case按照bad case分析流程去做其实就差不多了。
解决方案
首先,根据上面的分析,首先要看测试集和指标,如果有问题赶紧看赶紧解决,这个东西出问题,别说别的问题,就是现在有没有问题,都不确定。
如果数量少的类目,绝对量少的话,尤其是非常匮乏的情况,那就是得尝试扩展样本(如果确定是非要模型不可的话),这个拓展,要注意的是,增多、复制本身意义不是很大,空间边界不明显,模型根本就不够足够的论据来进行分类,所以我想说的是扩大样本空间,而不只是增加样本本身。
如果比例差距大,那对于类少的,可以通过数据增强,loss修改倾向性的方式来进行调整,甚至是有一些类似focal loss之类的不均衡的操作,而对多的类,那就是负采样就好了,这个其实反而简单了。
数据增强
我知道很多人都在希望我聊这个,我先说3个关键点,然后把我以前的文章放出来吧:
数据增强的目的不是增多,数量本身很简单,要弄清楚你数据不够要增强的目的,有的时候甚至dropout都能整一些出来。 基于任务,有的时候并不一定追求同义,尤其是在分类任务,所以这样扩增样本的方式灵活性更高。 数据不见得缺才要用数据增强,例如增加模型鲁棒性。
好了,文章在这里:NLP.TM[32] | 浅谈文本增强技术
小结
这里其实聊了一个比较小也比较常见的问题,这里希望大家的是,不要着急跳过一些必要的思路流程,这些流程能让自己更好地分析好问题从而解决,我们手里的方法很多,但是不见得要马上都都出来,找到弱点然后一击致命更为省时省力对吧。