恒源云(GPUSHARE)_长尾分布的多标签文本分类平衡方法(论文学习笔记)
文章来源 | 恒源云社区(专注人工智能/深度学习云GPU服务器训练平台,官方体验网址:https://gpushare.com/center/)
原文地址 | https://bbs.gpushare.com/topic/709/%E9%95%BF%E5%B0%BE%E5%88%86%E5%B8%83%E7%9A%84%E5%A4%9A%E6%A0%87%E7%AD%BE%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E5%B9%B3%E8%A1%A1%E6%96%B9%E6%B3%95?_=1637562252462
原文作者 | Mathor
长尾分布各位肯定并不陌生,指的是少数几个类别却有大量样本,而大部分类别都只有少量样本的情况,如下图所示
通常我们讨论长尾分布或者是文本分类的时候只考虑单标签,即一个样本只对应一个标签,但实际上多标签在实际应用中也非常常见,例如个人爱好的集合一共有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损失的定义如下:
其中,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定义如下:
实际上论文关于Focal Loss的介绍只有这么多,如果想了解Focal Loss更详细的参数介绍,可以看我的这篇文章Focal Loss详解
Class-balanced focal loss (CB)
通过估计有效样本数,CB Loss进一步重新加权Focal Loss以捕捉数据的边际递减效应,减少了头部样本的冗余信息。对于多标签任务,我们首先计算出每种类别的频率nin_ini,那么对于每个类别来说,都有其平衡项rCBr_{\text{CB}}rCB
其中,β∈[0,1)\beta \in [0,1)β∈[0,1)控制着有效样本数量的增长速度,损失函数变为
Distribution-balanced loss (DB)
通过整合再平衡权重以及头部样本容忍正则化(negative tolerant regularization, NTR),Distribution-balanced Loss首先减少了标签共现的冗余信息(这在多标签分类的情况下是很关键的),然后对"容易分类的"样本(头部样本)分配较低的权重
首先,为了重新平衡权重,在单标签的情况下,一个样本可以通过采样概率PiC=1C1niP_i^C = \frac{1}{C}\frac{1}{n_i}PiC=C1ni1来加权,但是在多标签的情况下,如果采用同样的策略,一个具有多标签的样本会被过度采样,概率是PI=1c∑yik=11niP^I = \frac{1}{c}\sum_{y_i^k=1}\frac{1}{n_i}PI=c1∑yik=1ni1。因此,我们需要结合两者重新平衡权重
我们可以将上述权重变得更光滑一些(有界)
此时,r^DB\hat{r}_{\text{DB}}r^DB的值域为[α,α+1][\alpha ,\alpha + 1][α,α+1]。rebalanced-FL (R-FL) 损失函数为
然后,NTR对同一标签头部和尾部样本进行不同的处理,引入一个比例因子λ\lambdaλ和一个内在的特定类别偏差viv_ivi以降低尾部类别的阈值,避免过度抑制
对于尾部样本来说,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,则
最终,通过整合再平衡权重以及NTR,Distribution-balanced Loss为
RESULT
作者实验的两个数据集如下
使用的模型为SVM,对比不同损失函数的效果
个人总结
这篇论文,创新了但又没创新,所有的损失函数都是别人提出来的,自己的工作只是在多标签数据集上跑了一遍做了个对比。最后,纯爱战士表示很淦
恒源云(GPUSHARE)_长尾分布的多标签文本分类平衡方法(论文学习笔记)相关推荐
- 恒源云(GPUSHARE)_未闻Prompt名(论文学习笔记)
文章来源 | 恒源云社区(专注人工智能/深度学习GPU免费加速平台,官方体验网址:https://gpushare.com) 原文作者 | Mathor 原文地址 | https://gpushare ...
- 恒源云(GPUSHARE)_[SimCSE]:对比学习,只需要 Dropout?
文章来源 | 恒源云社区(恒源云,专注 AI 行业的共享算力平台) 原文地址 | Dropout 原文作者 | Mathor 要说2021年上半年NLP最火的论文,想必非<SimCSE: Sim ...
- 恒源云(GPUSHARE)_语音识别与语义处理领域之 NAG 优化器
文章来源 | 恒源云社区 原文地址 | NAG优化器 原文作者 | 角灰 社区人才济济,小编今天又发现一个宝藏版主'角灰'. 小编是个爱分享的人,看见好文章好作者怎能控制住不分享给大家呢?所以,接下来 ...
- 恒源云(GPUSHARE)_语音识别与语义处理领域之低资源机器翻译综述
文章来源 | 恒源云社区 原文地址 | 低资源机器翻译综述 原文作者 | 角灰 摘要 神经机器翻译效果非常好,但需要大量的平行语料,因此有了低资源翻译的研究. 本文按照按数据的利用对低资源翻译分为3类 ...
- 恒源云(Gpushare)_如何查看显卡占用的情况?技巧大放送2
文章来源 | 恒源云社区 原文地址 | [小技巧-显卡篇] 1.如何看显卡占用的情况? 通过终端执行 nvidia-smi 命令可以查看显卡的情况,可以查看显卡功耗.显存占用等情况. root@I15 ...
- 恒源云(GpuShare)_无监督的QG方法
文章来源 | 恒源云社区 原文地址 | 通过摘要信息问题生成改进无监督问答 原文作者 | Mathor 上海于昨日宣布要开始在全市范围内开展新一轮切块式.网格化核酸筛查![恒源云]云墩墩☁️ 提醒小伙 ...
- 恒源云(GPUSHARE)_人工智能行业 | AI+教育,虚实之间
[引言]2020年以来,在线教育疯狂发展,不少机构把AI引入了课堂,这究竟是噱头,还是进化? 人工智能作为技术革命的新力量,如今已渗透进各行各业,颠覆和创新屡见不鲜,唯独教育领域,和人工智能的结合一直 ...
- 恒源云(Gpushare)_【存储优化】/hy-tmp可以扩/缩容啦
继[会员体系].[活动专区]上线后,为了进一步优化数据存储体验,特升级了[Tmp(/hy-tmp)]的使用规则,其他免费存储方式包括[OSS存储].[共享存储 (/hy-nas )],其免费额度及收费 ...
- 恒源云(GPUSHARE)_可构建AI的「AI」诞生?
文章来源 | 学术头条 原文地址 | 几分之一秒内,就能预测新网络的参数 号外号外,我找到一个宝藏公众号啦,里面都是超赞的干货文章
最新文章
- 如何用git连接mysql_phpstorm神器之连接使用GitMySQL
- 11_短信发送器_快速回复页面实现
- VS2017无法打开文件MSVCRTD.lib
- qt中QTreeWidget控件的使用
- python完全支持面向对象编程思想_面向对象的编程思想和Python的类,访问和属性,继承...
- jquery自定义一个放大镜
- WindowsServer2012 DFS配置出错原因
- angularJS限制 input-text 只能输入数字
- Django 分页查询并返回jsons数据,中文乱码解决方法
- 网游源码完整服务端_【每日源码】微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。...
- php loop循环 拿到键名
- 太极软件qn的代码_多版本QQ内置qn、qx模块
- 禁用EnableViewState和启用EnableViewStat时请注意
- GMP编译make check时出现FAIL t-scan
- 前端项目从计划到上线的大致流程
- 教你如何把qlv转换成mp4格式
- 数字信号处理考试要点
- Linux中tomcat启动后无进程、无法访问
- wps怎么删掉分节符_怎样删除分页符(批量删除wps文档中展示分页符)
- 秋招春招,1v1面试技巧和常见问题
热门文章
- linux命令 dd
- YII2.0的I18N/L10N是干什么的?是如何工作的?底层原理是什么?
- 联通/电信固话如何设置呼叫转移及如何取消呼叫转移
- 晋中市中等职业学校技能大赛
- 全球及中国唇彩行业商业模式分析及投资风险预测报告2022-2028年版
- 一边学计算机一边上班累的说说,上班累了的心情说说_上班的心情说说精选
- 视频教程-零基础学C#编程—C#从小白到大咖-C#
- 2021全球与中国PCIe芯片市场现状及未来发展趋势
- Python3-Spyder-urllib.request抓取搜haohuo平台信息-保存到csv
- Rockchip平台蓝牙名称随机化修改