心法利器[58] | 从长尾问题到以搜代分的机理探索

本文探讨了在文本分类任务中遇到的长尾问题,即低频样本带来的挑战。作者指出,长尾问题的诊断依赖于宏观统计信息和微观badcase分析,并提出了通过增加样本、调整类目划分以及利用检索式分类等方法来解决。此外,文章还强调了理解不同指标的重要性,以及在模型设计时如何应对样本不均衡的问题。
摘要由CSDN通过智能技术生成

心法利器

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

近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布

往期回顾

根据二八法则,我们往往花费20%的精力就能处理80%的问题,而要花费80%的精力解决剩下20%的问题,大部分情况,这20%的难样本经常是不太常见的样本,在频次分布图里,就是出现频次不高的那块,真可爱具体要怎么解决,这周我简单聊一下吧。

这里,以文本分类为例,泛用性嘛,感觉一般,不过有关检索分类和模型分类那块的描述,对任务的理解多少有些好处,大家也可以参考下。

什么是长尾问题

简单地说,针对bad case,给定频次,频次较低的那部分bad case,就是长尾问题。虽然说长尾的case会比较低,但是综合起来,随着我们的方案越来越强,所谓的长尾case是会占bad case的比例越来越多的,体现出来就是很多人看到的bad case很多很杂,但是没有什么很明显的特征,这其实是长尾问题的一个特色现象。

长尾问题的诊断

至于长尾问题,是怎么发现和诊断的,我认为,应该是要从两个地方考虑——宏观的统计信息和微观的bad case信息。

宏观的统计信息在于指标的设计,即在宏平均和微平均上,换个说法,在指标的计算过程是否考虑频次里,如果我们关注的指标计算是需要我们基于频次加权的,那长尾问题可能会没想象中那么重要,高频常见的case会占据指标非常重要的部分,甚至加一两个黑白名单,指标就有好几个点的提升,然而如果关注的是不加权的指标,那长尾问题很可能就会遍布你的bad case,因为长尾case的变化多样,所以这样会让bad case里长尾问题的占比提升。这里,也是大家“是否需要关注长尾问题”的一个关键依据,毕竟用了加权指标,长尾问题就比较不那么重要了。

这里,非常考验对现实问题的理解和对这两种指标意义的把握。至于我们要关注加权还是关注不加权,这是和现实业务和分析需求决定的。举个例子,如果我们最终关注的是应用,产品在线的效果,其实很大程度我们要关注的是加权指标,很简单的道理,用户常用的东西,我们要优先把服务好,而从技术上,我们要重点关注的内容,应该就是从实际出发,关注和实际应用分布一致的数据集,而加权的最合适。然而,从另一侧,例如我们要关注一下长尾问题,探索提升空间,或者是要保证下限的时候,不加权的指标就比较重要了,有一些类目比较少,但是我们也要关注,此时不加权的指标可能会更加适合。

其次是bad case分析。只有深入到case,才能判断得到,哪些是长尾问题,长尾问题占比有多少,我们要如何解决,最终解决方案的分析依据就都来源于此处。

但是需要注意的是,长尾本身只是现象,具体问题的原因,以及解决方案,需要仔细分析问题才能确定,这事和“过拟合”挺类似的。

长尾问题的定位

再次强调,长尾问题本质上只是个现象,还是要找得到这些问题背后的根源,然后从根本上解决,才会比较好。常见的会有这几个关注点。

低级问题

首先先聊几个比较低级的问题吧,出现了可以说是我们的一些失误了,大家尽量避免出现,然后还苦恼很久,道理可能都懂,但是还是想花点篇幅来聊一下。

首先,还是要明确,我们是否真的要花精力来解决这种本身不是很高频的问题。指标可能可以告诉我们我们该怎么做,但是首先得确定好我们需要关注的指标。

第二,是测试集中的样本量不足,不具有统计意义,此时的指标偏低并不代表这个类目的问题非常大,极端的,这个长尾的类只有1个样本,错了的话,准确率就是0了,此时能说明这个类有问题吗,显然不能,此时我们该处理的是测试集,在测试集里为这个类添加一些样本,一定程度地增强监测,更加客观整体地重新评估,而并非开始着手优化效果了。

第三,请深入到case级别去分析。上面有提到指标是宏观信息,case分析是微观,很多人很容易陷在表面指标上的问题,能够发现问题,但是要解决问题,永远离不开对样本的分析,大家需要也值得花这个时间去做,具体怎么分析,可以看看我之前的系列文章:。

第四,是类目的划分问题,长尾的样本,有时候由于不常见,所以在进行类目体系划分的时候就很容易出问题,随着长尾的问题显露,我们需要对类目进行调整,甚至要开始构造“其他”类,毕竟总有可能有些东西没法明确他是什么类。

常见问题

所谓长尾,背后是低频,那么在做效果调优时,具体要用什么样的手段能对效果有提升呢,这里来详细讨论下。

首先,所谓的长尾,本质上是样本量少的问题,至少对于测试集是这样,那我们其实可以去训练集看看,是不是就有这个问题:

  • 长尾的某些问题,在训练集内是否也比较少,样本量严重不足的时候,模型很难明确描述出明确的边界。

  • 这种类型的样本就找不到,很多时候,模型没见过的东西,很难推的出来。

  • 偶然的,要检验是否shuffle到位,样本本就少,集中在一些位置,训练的时候可能模型集中学完以后,后面给忘了。

归根结底,还是一个字“少”,我们需要有一些特定的手段,一方面从数据上在这方面加码,另一方面就是在模型或者策略上提供这块的信息,定向的强化。

一般地,我之前有几篇文章,大家可以好好看看:

长尾问题的解决

从数据层面,最好的方式肯定就是加样本了,最好是能够定向的增加,例如做一些槽位的替换,如“深圳的天气”,把城市这个槽位换成别的城市,又或者,对于口语化之类的句子,可以通过拼接的方式增加一些口语化的说法(心法利器[52] | 口语化句子解析问题)。当然,如果这些处理的难度较大,EDA里面的方法,随机交换、加词之类的,也会有一定情况的提升,但是提升的天花板,不要抱有太大希望。

从模型层面和策略层面,也有一些trick,例如损失上的的策略倾斜,像挑出来然后加权之类的,可以说都是常规操作了,不赘述。

这里想聊的一个点,就是为什么样本少,会导致模型学不好,我的思考是这样的:

  • 少样本下,从损失函数上其实可以看到,模型对样本的理解是一定程度孤立的,有点像黑夜中的一点光,模型只能知道,这个点附近是亮的。

  • 只有足够的样本,无论正反,进行不断的训练,才能逐步描绘出一条比较明确的类目边界。

  • 所以,模型无法在有限的数据下描述足够清晰的类目边界。

举个例子吧,“传闻中的陈芊芊”,这是一部电视剧,搜索里面就是电视剧意图,样本放进去后,模型是比较懵,上面基本没有什么很“电视剧”意图的特征,空间上就是一个点了,“传说中的陈芊芊”是不是,“传说中的火箭队”是不是,模型完全不知道,因为边界非常模糊,模型自然就很容易出错。这个可能就是少样本导致的模型机理。

于是,与其要求模型在少数据量的情况下描绘出类目的边界,不如考虑,对长尾的问题,充分发挥其在语义空间的孤立性的特点,没错,我想聊的就是以搜代分:心法利器[26] | 以搜代分:文本多分类新思路

以搜代分的进一步探索

最近是有人问过一个问题。检索式的分类和模型直接进行分类的区别是什么,我给的答案是,分类模型旨在描绘类目之间分界线,而减缩模型的底层关键,即相似度评估,本质只是一个计算样本之间空间距离的方式,在类目的边界比较难描绘的时候,用后者,样本间空间距离的描绘的模式,可能会更加好。大概逻辑是这样的:

  • 给定一个样本,他和“传闻中的陈芊芊”的语义空间差距很大,则可能说明,他和“传闻中的陈芊芊”可能不是一个类,但可以明确的是,他如果和“传闻中的陈芊芊”非常接近,那他和“传闻中的陈芊芊”就是一个类的。

这种模式,对少样本的特殊情况,不足以支撑描述分类边界的情况下,用相似度来代替描述这个边界,相比之下可靠性就高多了。

所以,其实我是比较建议,对于比较低频,属于长尾问题的时候,一定情况下,可以考虑借助检索,把这部分的分类边界近似的描绘出来,能一定程度解决问题,与之对应的,高频的,我们依旧用分类模型来解决,而分解开,长尾的,我们可以构造检索模块,把训练样本甚至增强后的样本放到检索模块去,用检索的方式实现。

321849229ae1a20c47cf99a22e61065b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值