Navigation

    Gpushare.com

    • Register
    • Login
    • Search
    • Popular
    • Categories
    • Recent
    • Tags

    长尾分布的多标签文本分类平衡方法【EMNLP 2021】

    语音识别与语义处理领域
    2
    2
    173
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • 155****7220
      155****7220 last edited by Alice_恒源云

      长尾分布各位肯定并不陌生,指的是少数几个类别却有大量样本,而大部分类别都只有少量样本的情况,如下图所示

      通常我们讨论长尾分布或者是文本分类的时候只考虑单标签,即一个样本只对应一个标签,但实际上多标签在实际应用中也非常常见,例如个人爱好的集合一共有6个元素:运动、旅游、读书、工作、睡觉、美食,一般情况下,一个人的爱好有这其中的一个或多个,这就是典型的多标签分类任务

      EMNLP2021上有一篇名为Balancing Methods for Multi-label Text Classification with Long-Tailed Class Distribution的论文详细探讨了各种平衡损失函数对于多标签分类问题的效果,从最初的BCE Loss到Focal Loss等,感觉这篇文章更像是平衡损失函数的综述。源码在Roche/BalancedLossNLP

      Loss Functions

      在NLP领域,二值化交叉熵损失(Binary Cross Entropy Loss)常被用来处理多标签文本分类问题,给定一个含有NNN个样本的训练集(x1,y1),…,(xN,yN){(x^1,y^1),…,(x^N,y^N)}(x1,y1),…,(xN,yN),其中yk=[y1k,…,yCk]∈0,1Cy^k = [y_1^k,…,y_C^k]\in {0,1}^Cyk=[y1k​,…,yCk​]∈0,1C,CCC是类别数量,假设模型对于某个样本的输出为zk=[z1k,…,zCk]∈Rz^k = [z_1^k,…,z_C^k]\in \mathbb{R}zk=[z1k​,…,zCk​]∈R,则BCE损失的定义如下:

      2b9effb7-4cf7-41b2-ba71-3d9cc3895fe2-image.png

      其中,pik=σ(zik)p_i^k = \sigma(z_i^k)pik​=σ(zik​),对于多标签分类问题来说我们需要将模型的输出值压缩到[0,1]之间,所以需要用到sigmoid函数

      原本单标签问题,真实值yky^kyk相当于一个onehot向量,而对于多标签来说,真实值yky^kyk相当于一个onehot向量中多了一些1,例如[0,1,0,1],表示该样本同时是第1类和第3类

      这种朴素的BCE非常容易收到标签不平衡的影响,因为头部样本比较多,可能所有头部样本的损失总和为100,尾部所有样本的损失加起来都不超过10。下面,我们介绍三种替代方法解决多标签文本分类中长尾数据的类别不均衡问题。这些平衡方法主要思想是重新加权BCE,使罕见的样本-标签对得到合理的"关注"

      Focal Loss (FL)

      通过在BCE上乘一个可调整的聚焦参数γ≥0\gamma \ge 0γ≥0,Focal Loss将更高的损失权重放在"难分类"的样本上,这些样本对其真实值的预测概率很低。对于多标签分类任务,Focal Loss定义如下:

      91895455-d4db-42b9-b9ab-43ce3d6a5b23-image.png

      实际上论文关于Focal Loss的介绍只有这么多,如果想了解Focal Loss更详细的参数介绍,可以看我的这篇文章Focal Loss详解

      Class-balanced focal loss (CB)

      通过估计有效样本数,CB Loss进一步重新加权Focal Loss以捕捉数据的边际递减效应,减少了头部样本的冗余信息。对于多标签任务,我们首先计算出每种类别的频率nin_ini​,那么对于每个类别来说,都有其平衡项rCBr_{\text{CB}}rCB​
      22fc5142-b276-4cf4-95d3-9ce154304e2f-image.png
      其中,β∈[0,1)\beta \in [0,1)β∈[0,1)控制着有效样本数量的增长速度,损失函数变为
      46adad77-7498-4c73-8b4e-f51f8af20f3d-image.png

      Distribution-balanced loss (DB)

      通过整合再平衡权重以及头部样本容忍正则化(negative tolerant regularization, NTR),Distribution-balanced Loss首先减少了标签共现的冗余信息(这在多标签分类的情况下是很关键的),然后对"容易分类的"样本(头部样本)分配较低的权重

      首先,为了重新平衡权重,在单标签的情况下,一个样本可以通过采样概率PiC=1C1niP_i^C = \frac{1}{C}\frac{1}{n_i}PiC​=C1​ni​1​来加权,但是在多标签的情况下,如果采用同样的策略,一个具有多标签的样本会被过度采样,概率是PI=1c∑yik=11niP^I = \frac{1}{c}\sum_{y_i^k=1}\frac{1}{n_i}PI=c1​∑yik​=1​ni​1​。因此,我们需要结合两者重新平衡权重
      c52308f6-c023-42a1-851e-fc322b186261-image.png
      我们可以将上述权重变得更光滑一些(有界)
      a9236c71-ba54-4360-8cdf-2ea496008780-image.png

      此时,r^DB\hat{r}_{\text{DB}}r^DB​的值域为[α,α+1][\alpha ,\alpha + 1][α,α+1]。rebalanced-FL (R-FL) 损失函数为
      c116e2ef-c793-4f3f-a04a-516ab3aa0de5-image.png
      然后,NTR对同一标签头部和尾部样本进行不同的处理,引入一个比例因子λ\lambdaλ和一个内在的特定类别偏差viv_ivi​以降低尾部类别的阈值,避免过度抑制
      449e0abc-050e-401b-845c-894554d5ed89-image.png
      对于尾部样本来说,qik=σ(zik−vi)q^k_i = \sigma(z_i^k - v_i)qik​=σ(zik​−vi​);对于头部样本来说,qik=σ(λ(zik−vi))q_i^k = \sigma(\lambda(z_i^k - v_i))qik​=σ(λ(zik​−vi​))。viv_ivi​可以在训练开始时最小化损失函数来估计,其比例系数为κ\kappaκ,类别先验信息pi=ni/Np_i = n_i/Npi​=ni​/N,则
      768e03a5-2783-43e7-b521-2e9a803e4304-image.png
      最终,通过整合再平衡权重以及NTR,Distribution-balanced Loss为
      60d5f5bb-0ab5-4dcc-95c2-4551445997aa-image.png

      Result

      作者实验的两个数据集如下

      使用的模型为SVM,对比不同损失函数的效果

      个人总结

      这篇论文,创新了但又没创新,所有的损失函数都是别人提出来的,自己的工作只是在多标签数据集上跑了一遍做了个对比。最后,纯爱战士表示很淦

      1 Reply Last reply Reply Quote 1
      • 173****5160
        173****5160 last edited by

        This post is deleted!
        1 Reply Last reply Reply Quote 0
        • Referenced by  Alice_恒源云 Alice_恒源云 
        • Referenced by  Alice_恒源云 Alice_恒源云 
        • Referenced by  Alice_恒源云 Alice_恒源云 
        • First post
          Last post