1 前言
今天分享一种利用Dice Loss来解决NLP任务中样本不平衡性问题的方法,该思路来自2020年ACL会议一篇paper《Dice Loss for Data-imbalanced NLP Tasks》。在NLP任务,我们最常见用的目标函数就是交叉熵。在很多数据场景下,存在样本不平性的问题,使用交叉熵会有些缺陷,因为它在计算过程中将每类别的权重视为一样,这样模型在训练中就会偏向样本多的那个类别。针对该问题,也有在交叉熵上加一个权重系数,但这种方法多数是出于人为定义或者根据训练样本数量统计而来的,并不能目标函数在训练中自动去调节偏向权重。
为解决上述问题,有人提出Focal Loss的方法,该方法最先出于图像中目标检测的场景中,也可应用NLP领域,它在imbalanced data问题取得很不错的效果。有兴趣的读者可以阅读《Focal Loss 原理及实践》。
在paper《Dice Loss for Data-imbalanced NLP Tasks》中,作者提出使用Dice Loss去解决NLP中imbalanced data问题。Dice Loss并不是作者首创的,而是很早从 Sørensen–Dice coefficient(Sorensen, 1948) or Tversky index (Tversky,1977) 演变而来的。作者认为,使用Dice Loss代替Cross Entropy,可以降低样本不平衡性的影响。此外,为了进一步降低大量的负样本的训练偏向影响,作者提出Self-adjusting Dice Loss。下面介绍下Dice Loss原理及应用效果。
2 Dice Loss
在介绍Dice Loss时,用二分类任务来展示它的原理及各种变体,也可以很容易推广其他类型的任务。
对于一训练集合, 为其中一个样本,对应的真实值为,为两个类别的预测概率,其中{0,1}, ,前者为取值为0或1,后者取值范围为[0,1]。
2.1 交叉熵
在上述定义的二分类任务上,其交叉熵定义为:
从公式上可以看出,每个样本对目标函数权重是一样的,这对于imbalanced data来说是不合适的,这就引出带权重的交叉熵损失函数。
其中为对应的样本权重,但从实际情况来上,上述该目标函数存在取值困难的问题,当涉及的类别特别多时,不适当的取值都会给目标函数带来偏向的影响。
2.2 Dice Coefficient and Tversky Index
dice coefficient (DSC) 最开始是为了判断两个集合的相似度而定义的一个指标。给定两个集合,则它们的dice coefficient可以定义为:
若把看着是模型预测为正样本的集合,为真实的正样本的集合,那么按照True Positive (TP), False Positive (FP), and False Negative (FN)来看DSC,则:
可以看出,DSC与F1值的评价效果是一致的。难道我们一直常用的F1指标具备解决样本不平衡性问题,这点刷新了我的认知。带这个问题,继续往下介绍。
针对一个具体样例来说,其DSC可以表示为:
上述公式存在一个缺陷,当时,对函数没有影响,则会导致模型对这类样本训练无效。为解决该问题,可在分子与分母同时添加一个调节参数:
在这个基础上,Milletari et al. (2016) 提出了一种变体,具体做法将分母项进行平方,目的是为了加快收敛速度。该变体可定义为DL:
此外,还衍生出Tversky index (TI),其原理跟DSC一致,但不同的是它更灵活去权衡False-Negatives and False Positives之间的影响。
最后作者参考Focal Loss的原理,在DSC基础上添加一个()的调节影响,变为:
以上定义的指标是越大越好,要转成训练的目标函数则需要变成负的,在这基础上,作者又进行+1调节。则上面涉及的目标函数汇总如下,其中FL为Focal Loss:
3 实验效果
作者挑选了NLP领域四种任务:part-of-speech tagging(POS), named entity recognition(NER), machine reading comprehension(MRC) and paraphrase identification(PI),进行试验对比,看看Dice Loss作为损失函数的效果。具体实验结果如下:
从实验结果来看,Dice Loss 两种变体DL与DSC损失函数相对交叉熵,Focal Loss都有明显的提升,其中DSC表现效果最好,最高有2%的提升。实验结果验证了Dice Loss在NLP任务上的优势。
结语
论文中验证了Dice Loss在NLP任务中样本不平衡问题的有效性,根据实验结果来看,具有很强的诱惑力。论文开源了代码:https://github.com/ShannonAI/dice_loss_for_NLP。目前笔者正在测试对比中,实验结果后续可以分享出来。
在回到前面提到的问题:应该这样理解,Dice Loss原理是与F1值是一致的,说明Dice Loss直接由F1导向的,所以训练的结果就偏向相对更为合理的F1评价指标。此外,论文题目是解决NLP任务中样本不平衡问题,其实这个样本不平衡问题存在界定问题,像NER任务中,对与预测的标签来说,就是样本不平衡(大部分是O标签)。此外,如二分类,一类2000个样本,一类1500个样本,这类算不算样本不平衡。所以,我的问题是,Dice Loss仅适合样本不平衡,最好是极度不平衡性问题?还是不论样本是否平衡,都能有效果。若真的适应各种分布下的数据集,那是不是要替换主流的交叉熵。这些问题,还是需要更多的实验来验证。
更多文章可关注:自然语言处理算法与实践
网友评论