导读:本文是“数据拾光者”专栏的第四十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇介绍了我们实际项目文本分类任务样本优化实践汇总, 对于希望提升文本分类任务线上效果的小伙伴可能有所帮助。
摘要:本篇介绍了我们实际项目文本分类任务样本优化实践汇总。首先样本层面优化文本分类任务需要解决如何又快又好的获取人工标注数据集、如何解决样本不均衡问题和如何获取更多的训练样本三个问题;然后通过主动学习可以又快又好的获取人工标注数据集以及通过损失函数解决样本不均衡问题;最后重点介绍了我们的半监督和自训练流程项目,主要包括半监督项目的目标以及基本流程。对于希望提升文本分类任务线上效果的小伙伴可能有所帮助。
下面主要按照如下思维导图进行学习分享:
01
样本层面优化文本分类任务需要解决的问题
之前写过一篇在实际工作中总结的文本分类项目模型层面的优化实践《广告行业中那些趣事系列37:广告场景中的超详细的文本分类项目实践汇总》,本篇总结下样本层面的优化实践。样本层面优化文本分类任务需要解决三个主要问题:
02
通过主动学习又快又好获取人工标注数据集
2.1 主动学习的作用
上面也说过NLP文本分类任务属于有监督学习,需要一定数量的人工标注数据作为训练集。如果不使用主动学习的话,一般是随机选择一定数量的样本进行标注。实际工作中可能还会结合一定的业务场景,比如在搜索场景中选择用户搜索量级较大的query进行标注。这种方法的好处是简单,但是缺点也很明显,随机选择的样本可能多样性较差(选出的样本可能有很多是部分重复的),而且是模型易于识别的简单样本。通过一个简单的中学生做习题的例子来说明,小明要完成100道数学题,如果使用随机选择策略的话只需要从练习簿中随机选择100道题即可。但是如果使用主动学习的策略,我们会选择习题种类更多(多样性较好),同时小明容易做错(模型难于识别的样本)的100道习题。虽然都是完成100道习题,但是最终的学习效果确差别很大。这里小伙伴们可能要纠结一个问题,难的数学题小明可能要花费更多的时间,但是在NLP场景对于一个熟练的标注员来说单条文本标注的时间基本上是相同的。
从上面的例子中可以看出,标注一定数量的文本,采用不同的样本选择策略得到的样本质量是不同的,从而最终得到的分类器效果也是不同的。不仅如此,标注成本是非常昂贵的。总结下来主动学习的作用就是在标注人力有限的情况下标注高质量样本从而使模型效果更好。
2.2 主动学习基本流程
主动学习主要包括无标签数据池、样本选择策略、标注者、标签数据集和机器学习模型五个核心部件,基本流程有以下几个步骤:
主动学习就是不断的进行上述三个流程,直到分类器效果达到线上要求。主动学习最重要的核心在于样本选择策略,也就是如何选择高价值样本进行标注。下面是主动学习基本流程图:
图1 主动学习基本流程
2.3 主动学习查询策略的设计原则
主动学习最重要的是如何选择高价值样本进行标注,这里选择策略的设计主要有两个原则:不确定性原则和差异性原则。不确定性原则很好理解,就是选择那些模型不容易判别的样本提交给人工去标注,比如中学生做数学题选一些比较难并且易错的题来完成,这样可以学到更多的知识,相反的长期做简单题带来的提升很有限。差异性原则主要是选择的样本要具有一定的差异性,比如做的数学题尽量覆盖不同的章节和知识点,这样才能学到更全面的知识,相反的如果长期做某一章节某部分知识点的习题能力提升也很有限。总结下来主动学习查询策略的设计原则是尽量选择模型难于识别并且多样性较好的样本。
2.4 线上使用的主动学习策略
为了选择多样性较好的文本数据可以从聚类的角度进行。先获取文本的语义向量embedding表示,然后对语义向量进行聚类操作,最后选择的样本尽量覆盖多个聚类后的类别,通过这种方式可以得到多样性较好的文本数据。这里重点是获取高质量的文本语义向量embedding表示。如果直接用google原生BERT获取语义向量,会发现任意两个句子的向量相似度比较高,也就是说文本之间的区分度很差,那么聚类效果也比较差,主要原因是向量分布的非线性和奇异性使得BERT句向量并没有均匀的分布在向量空间中,对应的信息熵比较低。针对这个问题BERT-flow通过normalizing flow把语义向量映射到规整的高斯分布中,从而语义向量可以分布在相对均匀的空间中。还可以使用BERT-whitening对语义向量分布进行PCA降维操作去除冗余信息,也可以把语义向量映射到更均匀的向量空间中从而提升聚类效果。除此之外,我们还可以使用NLP场景中的对比学习模型SimCSE获取分布更均匀的语义向量。关于对比学习模型SimCSE的详细介绍小伙伴可以参考我之前写的一篇文章《广告行业中那些趣事系列35:NLP场景中的对比学习模型SimCSE》。
通过上述方法可以获得多样性较好的文本数据,接下来是获得模型难以识别的样本数据,主要使用不确定性策略。不确定性策略的重点是如何衡量样本难以识别的程度。主动学习中主要通过置信度最低策略、熵策略、基于委员会的策略等方法来衡量样本难以识别的程度。
首先说下置信度最低策略,也就是选择模型认为置信度最低的样本。这里以二分类任务为例,假如我们已经有一个初步训练好的模型,可以用这个模型去给样本打分,A样本得分为0.55,B样本得分为0.9分,那么可以认为模型对于B样本预测为正例的置信度很高,而对于A样本来说置信度很低,模型并不能很好的识别A样本,所以相比于B样本来说A样本的标注价值更高,可能给模型带来的效果提升也更好;
然后是熵策略,熵策略主要是利用信息论中的熵来判定样本的识别难度,因为信息论中熵是对不确定性的测量。感觉和置信度最低策略类似,主要是从不同的维度来衡量样本的不确定性;
最后是基于委员会的策略。从样本训练集不同或者模型不同构建多个分类器,选择分歧比较大的样本进行标注。比如我们会用google原生中文版BERT、RoBERTa和ernie模型训练三个分类器,让三个分类器去预测同一条样本,如果A样本模型分类是[1,1,1],B样本分类是[0,1,1],因为A样本中三个分类器一致预测为正例,而B样本中两个分类器预测为正例,一个分类器预测为负例,说明B样本的“分歧”比较大,模型难以识别,所以相比于A样本来说B样本的标注价值更高。我们线上也主要使用基于委员会的策略来选择不确定性高的样本进行标注。
小结下,本节主要通过主动学习从而又快又好的获取人工标注数据集,主要介绍了主动学习的作用、基本流程、查询策略的设计原则以及线上使用的主动学习策略。关于主动学习更详细的内容小伙伴们可以查看我之前写过的一篇文章《广告行业中那些趣事系列22:当文本分类遇上了主动学习》。
03
解决样本不均衡问题
我们文本分类项目中还遇到一个棘手问题就是样本不均衡问题,尤其在多层级复杂标签体系的广告场景中,实际上我们广告兴趣类目体系是4级类目多达几百个标签,样本不均衡问题更加严重。为了解决样本不均衡问题,我们线上主要对损失函数进行优化,使用Focal loss和GHM loss来缓解样本不均衡问题,取得不错的线上效果。关于样本不均衡问题的介绍之前也写过一篇文章进行了详细说明,感兴趣的小伙伴可以查看《广告行业中那些趣事系列24:从理论到实践解决文本分类中的样本不均衡问题》
04
半监督和自训练流程项目
4.1 半监督和自训练流程项目目标
为了提升分类器效果,我们线上构建了半监督和自训练流程项目框架。项目目标是使用少量的标注数据集就可以得到很好的分类器模型,整个系统的输入是带标签数据集和业务相关的海量无标签数据集,输出是一个很好的分类器模型。系统的核心思想是利用少量的带标签数据集从海量的无标签数据集中扩展伪标签数据加入到训练样本中,通过自训练流程不断的提升分类器效果。
4.2 半监督和自训练项目基本流程
半监督和自训练项目的基本流程图如下所示:
图2 半监督和自训练流程项目基本流程图
整体来看半监督和自训练流程项目基本流程如下:
整个半监督流程重点是大循环和小循环的进入条件。当enlarge策略得到的D2无效时退出半监督流程,否则进入小循环。当连续N次D4无效时则退出小循环。明确了大循环和小循环的进入条件理解整个流程就变得容易了。半监督流程通过少量人工标注数据集提供的信息去获取更多的训练样本数据集,从而得到好的分类器。整个半监督流程可以应用到更广泛的分类任务中,包括NLP场景、CV场景等等,我们将模型训练、评估和预测流程通过脚本进行定制化,对于使用方来说仅仅需要关注数据流转过程即可。当前我们已经使用半监督流程优化线上文本分类器并取得不错的效果,正在向更简单易用的方向努力,后续可能会做到开源。还需要说明的是,半监督流程不仅仅是从样本层面对分类任务进行优化,模型训练、评估和预测流程中会将之前积累的模型层面的优化添加进来,对于样本不均衡问题也使用了Focal loss和GHM loss等。
05
总结及反思
本篇介绍了我们实际项目文本分类任务样本优化实践汇总。首先样本层面优化文本分类任务需要解决如何又快又好的获取人工标注数据集、如何解决样本不均衡问题和如何获取更多的训练样本三个问题;然后通过主动学习可以又快又好的获取人工标注数据集以及通过损失函数解决样本不均衡问题;最后重点介绍了我们的半监督和自训练流程项目,主要包括半监督项目的目标以及基本流程。对于希望提升文本分类任务线上效果的小伙伴可能有所帮助。