查看原文
其他

心法利器[44] | 样本不均衡之我见

机智的叉烧 CS的陋室 2022-08-24

心法利器


本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有

近期,我再次总结了我的历史文章,累积起来有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] | 浅谈文本增强技术

小结

这里其实聊了一个比较小也比较常见的问题,这里希望大家的是,不要着急跳过一些必要的思路流程,这些流程能让自己更好地分析好问题从而解决,我们手里的方法很多,但是不见得要马上都都出来,找到弱点然后一击致命更为省时省力对吧。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存