导读:本文是“数据拾光者”专栏的第二十八篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从理论到实践详解了使用半监督和自监督学习框架解决文本分类中的样本不均衡问题,对于希望通过半监督和自监督方式解决样本不均衡问题的小伙伴可能有所帮助。
欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。
知乎专栏:数据拾光者
公众号:数据拾光者
摘要:本篇从理论到实践详解了使用半监督和自监督学习框架解决文本分类中的样本不均衡问题。首先,讲了下为啥要用半监督和自监督学习框架;然后,结合论文从理论到实验结果重点介绍了半监督和自监督框架下的不均衡学习;最后将半监督和自监督学习框架应用到我们实际的文本分类任务中并取得了不错的效果提升。对于希望通过半监督和自监督方式解决样本不均衡问题的小伙伴可能有所帮助。
下面主要按照如下思维导图进行学习分享:
01 为啥要用半监督和自监督框架
1.1 前期回顾
之前在《广告行业中那些趣事系列24:从理论到实践解决文本分类中的样本不均衡问题》中讲了下机器学习中的样本不均衡问题以及从数据层面和模型损失函数层面如何解决,这里咱们简要回顾下。当我们要完成一个猫和狗识别任务,因为猫和狗都属于日常中比较常见的动物,我们能够拿到的训练样本是比较均衡的,所以得到的模型能较好的识别出这两种动物。但是现在需要完成一个狗和狼识别任务,因为相比于狗来说,狼是比较少见的,那么能够拿到的狗和狼的训练样本就非常不均衡,这就是机器学习中的样本不均衡现象。样本不均衡会带来一个非常严重的问题,直接通过不均衡样本得到的模型在样本数量较大的类别上识别效果很好,但是在那些样本数量很少的类别上识别效果很差,而实际应用中经常希望模型能够在那些样本数量较少的类别上达到好的效果。
对于样本不均衡问题,从数据层面主要通过欠采样和过采样的方式人为控制样本数量从而使得训练样本达到均衡的状态;从模型损失函数层面主要有基于类别加权的loss、Focal loss和GHM loss来解决样本不均衡问题。之前的那篇文章中最后提了下通过半监督和自监督的方式解决样本不均衡问题,经过一番尝试在实际文本分类任务中效果有一定提升,这里和小伙伴分享下。
1.2 什么是半监督学习和自监督学习
在介绍半监督和自监督方式解决样本不均衡问题之前首先讲下半监督学习和自监督学习,其实也很好理解。有监督学习是完全用带标签的样本,半监督学习是用一部分带标签的样本和更多的无标签样本,自监督学习则是完全使用无标签的样本。因为机器学习任务中标注样本的成本是非常高的,所以如何利用无标签样本来帮助我们提升模型的任务就非常重要,这也是本篇研究半监督学习和自监督学习解决样本不均衡问题的主要原因。
1.3 不均衡标签样本的好处和坏处
不均衡标签样本同时有好处和坏处,好处在于不平衡的标签样本相比于无标签样本会提供有价值的监督信息,而这些有价值的监督信息往往可以提升模型的准确性,这也是通常有监督学习任务比无监督学习任务有更好效果的原因。但是不均衡标签样本同时也存在之前说的缺点,会使得模型在训练样本数量多的类别表现较好而样本少的类别效果较差。针对不均衡标签样本的好处来说,通过半监督学习可以同时利用有标签样本和无标签样本,利用有标签样本提供的监督信息来给无标签样本打上伪标签,从而一定程度上缓解不均衡样本,最终提升模型的分类效果。针对不均衡标签样本的坏处来说,先暂时“舍弃”标签信息,通过自监督学习使得模型具有更好的初始点,最终也能提升模型的分类效果。
02 半监督和自监督框架解决样本不均衡论文详解
2.1 论文介绍
NeurIPS 2020有一篇论文《Rethinkingthe Value of Labels for Improving Class-Imbalanced Learning》提出了一种通用的半监督和自监督框架来解决样本不均衡问题。论文重点介绍了一种通用的半监督框架下的不均衡学习和自监督框架下的不均衡学习方案,我们实际业务中的文本分类任务也主要参考了该框架。
2.2 半监督框架下的不均衡学习
2.2.1 半监督框架流程
论文首先通过理论研究证明了伪标签数据对于模型效果的提升是有积极效果的,这个其实和我在实际的工作实践中更多的训练数据会简单有效的提升模型效果的结论是一致的。证明了伪标签数据的有效性之后,整体来看半监督框架流程非常简单:
首先用有标签样本训练一个初始分类器f0;
然后通过自训练的半监督学习方法使用初始分类器去给更多的无标签数据打上伪标签;
最后用有标签样本和伪标签样本一起去训练新的分类器。
需要注意的是,半监督框架流程中最重要的步骤是如何获得相关性和多样性更好的伪标签数据,这也是实际业务中最难的部分。
2.2.2 实验介绍及结果分析
论文的实验中使用CIFAR-10-LT和SVHN-LT数据集分别设置不同的样本不均衡率下的有标签样本和伪标签样本、使用不同的损失函数CE和LDAM-DRW下模型的效果。下面是半监督框架下不均衡学习实验结果图:
图1 半监督框架下不均衡学习实验结果图
从上图中我们可以得到以下几个重要的实验结论:
第一,有标签样本训练集中样本越均衡,模型的分类效果越好。上图中红色方框表示使用交叉熵CE在不同的有标签样本不均衡率下模型测试集的错误率,当不均衡率为10时(有标签样本中数量最多的类别样本是数量最少的类别样本10倍)测试集的错误率为13.61%,而不均衡率为100时测试集的错误率上升到了29.64%。测试集的错误率越低模型效果越好;
第二,增加伪标签样本可以有效提升模型的效果,并且伪标签样本的不均衡率越低模型效果越好。上图中蓝色框是增加了伪标签样本后模型的效果,当有标签样本的不均衡率为10时不添加伪标签样本模型测试集的错误率为13.61%,而增加伪标签样本后模型测试集的错误率均低于13.61%。同时发现增加的伪标签样本中不均衡率也为10时模型测试集的错误率为10.86%,不均衡率为1是模型测试集的错误率为10.22%,说明伪标签样本的不均衡率越低模型效果越好;
第三,不同的损失函数对模型效果的影响不同,LDAM-DRW效果优于CE。上图中红色框和绿色框中,带标签样本的不均衡率为10时LDAM-DRW的测试集错误率为11.84%,而CE的测试集错误率为13.61%,说明LDAM-DRW的效果优于CE。
上面是从实验结果数据说明添加伪标签数据可以有效提升模型的分类效果,下面对训练集和测试集进行t-SNE可视化可以更直观的看出效果提升:
图2 t-SNE可视化对比添加伪标签数据的效果
上图中左边部分是没有添加伪标签样本,右边部分是添加了伪标签样本。从图中可以发现添加伪标签样本后模型识别各个类的边界更加清晰,尤其对于样本数量较少的类别,类别之间的差异性更大。因为伪标签数据可以提升低密度区域数据的样本数量添加了更强的正则化,所以使得模型建立的类边界效果更好。
2.2.3 无标签样本的相关性对半监督学习的影响
论文通过实验的方式证明了半监督框架可以一定程度上解决样本不均衡问题,再此基础上作者研究了无标签样本和有标签样本的相关性对半监督学习的影响。还拿上面狗和狼识别任务举例,当增加的无标签数据既不属于狗也不属于狼,那么相当于额外的增加了多余信息,从而对模型可能有逆向作用。论文中证明了无标签样本和有标签样本的相关性对模型效果的影响:
图3 无标签样本的相关性对模型效果的影响
上图中横坐标是无标签样本和有标签样本的相关性,纵坐标是模型测试集效果。可以发现当无标签样本的相关性越高,测试集错误率越低,模型的效果也越好。当无标签样本的相关性低于0.5时,加入伪标签样本对于模型的效果还不如不加呢。这里又引出了一个新的问题,如何识别无标签样本的相关性?一般情况可以通过模型对无标签样本的预测概率来评估相关性。在我们实际的文本分类任务中可以通过无标签样本的预测概率,还可以通过SimBERT计算文本的语义相似度来评估相关性。
论文中同时证明了在保证无标签样本的相关性0.6的前提下,伪标签样本的不均衡率越低,模型的效果越好。下面是伪标签样本不平衡率对模型效果的影响:
图4 伪标签样本不平衡率对模型效果的影响
上图中横坐标表示伪标签样本的不均衡率,纵坐标是测试集错误率。可以发现,当无标签数据和有标签数据的相关性在0.6时,伪标签样本的不均衡率越低,模型的效果越好。这个结合我们的业务实践说明下,最开始我们只会通过半监督的方式添加样本数量较少的类别,后来发现同时增加正负类别的伪标签样本对模型的效果提升更好。
2.2.4 半监督学习存在的问题
对于一些特定的不均衡学习任务,即使从无标签数据中也很难添加样本数量较少类别的伪标签样本,或者得到的伪标签样本相关性较低。这种情况下添加的伪标签样本对模型可能有反向效果。这时需要从不均衡标签样本的坏处来解决,也就是通过自监督学习的方式来解决。
2.3 自监督框架下的不均衡学习
2.3.1 自监督框架流程
为了克服不均衡标签样本的坏处,自监督框架会暂时“放弃”样本的标签信息。通常情况下,自监督学习会利用一些辅助任务从无标签数据中预训练出自身的监督信息,而这些监督信息和原来的标签是无关的。利用预训练模型学习到的监督信息来获得模型好的初始状态从而提升最终模型的分类效果。自监督学习的辅助任务主要分成三类:第一类是基于上下文的。这类辅助任务的一个典型代表就是自然语言处理中的语言模型,可以通过海量的文本数据学习语言学知识。比如Word2vec模型可以根据上下文来猜某个词或者根据某个词来猜上下文;第二类是基于时序的;第三类是基于对比的。CV领域中了解到主要通过拼图重组和旋转预测来构建辅助任务。
2.3.2 实验介绍及结果分析
论文的实验中使用CIFAR-10-LT和SVHN-LT数据集分别设置不同的样本不均衡率下的数据集、使用四种不同的损失函数CE、Focal、CE-DRW和LDAM下模型的效果。下面是自监督框架下不均衡学习实验结果图:
图5 自监督框架下不均衡学习实验结果图
从上图中可以得到如下重要的结论:
第一,使用自监督预训练SSP可以有效提升模型的效果。CIFAR-10-LT数据集中样本不均衡率为10时使用CE测试集的错误率为13.61%,使用自监督预训练流程后测试集的错误率降低为11.57%,模型效果有较明显的提升;
第二,不同损失函数对于模型效果的影响不同,CE效果最差,LDAM效果最好。CIFAR-10-LT数据集中样本不均衡率为10时使用CE测试集的错误率为13.61%,使用LDAM测试集的错误率为13.04。
小结下,论文通过理论和实验相结合的方式论证了半监督学习框架和自监督学习框架都能一定程度上提升模型的分类效果。
03 文本分类任务实践
上一节详细讲了论文通过理论和实验的方式证明了半监督学习框架和自监督学习框架的确可以提升模型的分类效果。但是对于我们实际的项目是否有提升还需要通过实践来论证。
3.1 半监督学习框架下文本分类任务实践
将论文中提出的半监督学习框架应用到我们实际的文本分类任务中,流程图如下所示:
图6 半监督学习框架下文本分类流程图
流程1:使用带标签样本训练初始分类器f0,同时评估并记录初始分类器效果;
流程2:将线上真实分布的query数据集分别经过SimBERT和初始分类器得到伪标签样本。相比于论文中仅通过初始分类器得到伪标签样本,实际项目中会分别使用谷歌中文版BERT权重、RoBERTa权重和Ernie权重三个模型针对同一个标签训练三个分类器,然后将三模型中两个及以上预测为正例的样本作为伪标签正例。通过这种方式得到的伪标签样本相关性较高。除此之外还会基于SimBERT通过语义相似度来获取伪标签样本,通过这种方式得到的伪标签样本的多样性会有所提高。需要说明的是将上面两种方式得到的伪标签样本都加入到候选数据集库中;
流程3:接下来是自训练流程。从候选数据集中选择一批数据、有效伪标签数据集库中的样本(初始状态可能为空)和带标签样本一起训练新的分类器f1,同时评估新的分类器效果是否有提升,如果有提升则把这批伪标签样本加入有效伪标签数据集库,否则丢弃这批伪标签样本。这里候选数据集中会删除被选中的数据;
流程4:查看剩下的候选数据集是否还有数据,如果有则继续跳转到流程3,否则程序结束。
通过这种自训练的半监督学习方式可以实时反馈小批次伪标签数据对模型效果是否有提升,如果有提升则保留该批伪标签数据集,否则丢弃。虽然模型的训练周期较长,但是通过自动化的方式可以有效评估伪标签样本数据对模型效果的提升情况,并最终只保留对模型有提升的伪标签样本数据。
通过线上实验发现这种半监督学习框架对于分类器效果具有较大的提升,尤其对于我们比较重要的JY类标签有50%以上的效果提升。
3.2 自监督框架下文本分类任务实践
因为我们主要使用RoBERTa来进行文本分类任务,所以自监督框架下文本分类任务实践其实就是使用我们线上真实query数据对RoBERTa模型进行微调。
因为RoBERTa模型是使用标准数据集训练得到的模型权重,所以模型的通用性很好。不同行业的人都可以使用原始的RoBERTa权重,使用下游任务相关的数据对模型进行微调。但是因为我们实际项目中因为业务的特殊性和性能的考量并不会对RoBERTa模型进行微调,仅把它作为特征抽取器来获取特征,所以在这种情况下就需要使用线上真实数据对原始RoBERTa进行微调,然后作为公共的编码器去完成下游文本分类任务。我们尝试过使用真实分布的数据集、类别均衡的真实分布数据集等不同分布的数据集进行微调,整体来看在样本数量较多的标签上有较大提升,在样本数量较少的标签上有下降。目前线上还是使用原始的RoBERTa模型权重,后期会进一步研究短文本场景下BERT预训练权重微调流程。
总结及反思
本篇从理论到实践详解了使用半监督和自监督学习框架解决文本分类中的样本不均衡问题。首先,讲了下为啥要用半监督和自监督学习框架;然后,结合论文从理论到实验结果重点介绍了半监督和自监督框架下的不均衡学习;最后将半监督和自监督学习框架应用到我们实际的文本分类任务中并取得了不错的效果提升。对于希望通过半监督和自监督方式解决样本不均衡问题的小伙伴可能有所帮助。
参考资料
[1] 《Rethinking theValue of Labels for Improving Class-Imbalanced Learning》
[2] https://github.com/YyzHarry/imbalanced-semi-self
[3] https://www.mit.edu/~yuzhe/imbalanced-semi-self.html
[4] 知乎文章《NeurIPS2020 | 数据类别不平衡/长尾分布?不妨利用半监督或自监督学习》
最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。
码字不易,欢迎小伙伴们关注和分享。