别让数据坑了你!用置信学习找出错误标注(附开源实现)

星标/置顶小屋,带你解锁

最萌最前沿的NLP、搜索与推荐技术

文 | JayLou娄杰(NLP算法工程师,信息抽取方向)

编 |  北大小才女小轶

美 | Sonata


1 前言

在实际工作中,你是否遇到过这样一个问题或痛点:无论是通过哪种方式获取的标注数据,数据标注质量可能不过关,存在一些错误?亦或者是数据标注的标准不统一、存在一些歧义?特别是badcase反馈回来,发现训练集标注的居然和badcase一样?如下图所示,QuickDraw、MNIST和Amazon Reviews数据集中就存在错误标注。

为了快速迭代,大家是不是常常直接人工去清洗这些“脏数据”?(笔者也经常这么干~)。但数据规模上来了咋整?有没有一种方法能够自动找出哪些错误标注的样本呢?基于此,本文尝试提供一种可能的解决方案——置信学习

本文的组织架构是:

2  置信学习

2.1 置信学习的定义

那什么是置信学习呢?这个概念来自于ICML2020的一篇由MIT和Google联合提出的paper:《[Confident Learning: Estimating Uncertainty in Dataset Labels][1] 》。论文提出的置信学习(confident learning,CL是一种新兴的、具有原则性的框架,以识别标签错误、表征标签噪声并应用于带噪学习(noisy label learning)。

原文链接:https://arxiv.org/abs/1911.00068 Arxiv访问慢的小伙伴也可以在订阅号后台回复关键词【0630】下载论文PDF。

笔者注:笔者乍一听「置信学习」挺陌生的,但回过头来想想,好像干过类似的事情,比如:在某些场景下,对训练集通过交叉验证来找出一些可能存在错误标注的样本,然后交给人工去纠正。此外,神经网络的成功通常建立在大量、干净的数据上,标注错误过多必然会影响性能表现,带噪学习可是一个大的topic,有兴趣可参考这些文献 https://github.com/subeeshvasu/Awesome-Learning-with-Label-Noise。

废话不说,首先给出这种置信学习框架的优势

  • 最大的优势:可以用于发现标注错误的样本!

  • 无需迭代,开源了相应的python包,方便地快速使用!在ImageNet中查找训练集的标签错误仅仅需要3分钟!

  • 可直接估计噪声标签与真实标签的联合分布,具有理论合理性

  • 不需要超参数,只需使用交叉验证来获得样本外的预测概率。

  • 不需要做随机均匀的标签噪声的假设(这种假设在实践中通常不现实)。

  • 与模型无关,可以使用任意模型,不像众多带噪学习与模型和训练过程强耦合。

笔者注:置信学习找出的「标注错误的样本」,不一定是真实错误的样本,这是一种基于不确定估计的选择方法。

2.2 置信学习开源工具:cleanlab

论文最令人惊喜的一点就是作者这个置信学习框架进行了开源,并命名为cleanlab,我们可以pip install cleanlab使用。

cleanlab

我们要想找出错误标注的样本,通过使用cleanlab操作十分简单,我们仅仅需要提供两个输入,然后只需要1行code就可以找出标注数据中的错误:

from cleanlab.pruning import get_noise_indices
# 输入
# s:噪声标签
# psx: n x m 的预测概率概率,通过交叉验证获得
ordered_label_errors = get_noise_indices(s=numpy_array_of_noisy_labels,psx=numpy_array_of_predicted_probabilities,sorted_index_method='normalized_margin', # Orders label errors)

这个输入是啥?很简单,一个输入是原始的样本标签(由于这些标签可能存在错误,我们称之为「噪声标签」吧~),另一个输入就是通过对训练集交叉验证,来预测的每一个样本在不同标签类别下的概率,这是一个nXm的概率矩阵(n为数据集大小,m为标签类别总数)。

我们来看看cleanlab在MINIST数据集中找出的错误样本吧,是不是感觉很????~

MINIST

如果你不只是想找到错误标注的样本,还想把这些标注噪音clean掉之后重新继续学习,那3行codes也可以搞定,这时候连交叉验证都省了~

from cleanlab.classification import LearningWithNoisyLabels
from sklearn.linear_model import LogisticRegression# 其实可以封装任意一个你自定义的模型.
lnl = LearningWithNoisyLabels(clf=LogisticRegression())
lnl.fit(X=X_train_data, s=train_noisy_labels)
# 对真实世界进行验证.
predicted_test_labels = lnl.predict(X_test)

笔者注:上面虽然只给出了CV领域的例子,但置信学习也适用于NLP啊~此外,cleanlab可以封装任意一个你自定义的模型,以下机器学习框架都适用:scikit-learn, PyTorch, TensorFlow, FastText。

2.3 置信学习的3个步骤

置信学习开源工具cleanlab操作起来比较容易,但置信学习背后也是有着充分的理论支持的。事实上,一个完整的置信学习框架,需要完成以下三个步骤(如置信学习框架图所示):

  1. Count:估计噪声标签和真实标签的联合分布;

  2. Clean:找出并过滤掉错误样本;

  3. Re-Training:过滤错误样本后,重新调整样本类别权重,重新训练;

置信学习框架

接下来,我们对上述3个步骤进行详细阐述。

2.3.1 Count:估计噪声标签和真实标签的联合分布

我们定义噪声标签为 ,即经过初始标注(也许是人工标注)、但可能存在错误的样本;定义真实标签为 ,但事实上我们并不会获得真实标签,所以通常是采取交叉验证对真实标签进行估计。此外,定义样本总数为  ,类别总数为  。

为了估计联合分布,共需要4步:

  • step 1 : 交叉验证:

    • 首先需要通过对数据集集进行交叉验证,并计算第个样本在第 个类别下的概率

    • 然后计算每个人工标定类别下的平均概率 作为置信度阈值;

    • 最后对于样本,其真实标签个类别中的最大概率,并且

  • step 2 : 计算计数矩阵(类似于混淆矩阵),如图1中的 意味着,人工标记为dog但实际为fox的样本为40个。具体的操作流程如下图所示:

计数矩阵C计算流程
  • step 3 : 标定计数矩阵:目的就是为了让计数总和与人工标记的样本总数相同。计算公式如下面所示,其中 为人工标记标签的样本总个数:

  • step 4 : 估计噪声标签 和真实标签的联合分布,可通过下式求得:

看到这里,也许你会问为什么要估计这个联合分布呢?其实这主要是为了下一步方便我们去clean噪声数据。此外,这个联合分布其实能充分反映真实世界中噪声(错误)标签和真实标签的分布,随着数据规模的扩大,这种估计方法与真实分布越接近(原论文中有着严谨的证明,由于公式推导繁杂这里不再赘述,有兴趣的同学可以详细阅读原文~后文也有相关实验进行证明)。

看到这里,也许你还感觉公式好麻烦,那下面我们通过一个具体的例子来展示上述计算过程:

  • step 1 : 通过交叉验证获取第样本在第个类别下的概率;为说明问题,这里假设共10个样本、2个类别,每个类别有5个样本。经过计算每个人工标签类别下的平均概率分别为: .

P[i]和t[j]计算
  • step2: 根据计算流程和上图结果,我们可以很容易得到计数矩阵  为:

计数矩阵C计算
  • step3: 标定后的计数矩阵 为(计数总和与人工标记的样本总数相同,将原来的样本总数进行加权即可,以为例,根据公式(1),其计算为):

标定计数矩阵
  • step4:联合分布为:(根据公式(2)直接进行概率归一化即可)

联合分布Q计算

2.3.2 Clean:找出并过滤掉错误样本

在得到噪声标签和真实标签的联合分布 ,论文共提出了5种方法过滤错误样本。

  • Method 1: ,选取 的样本进行过滤,即选取最大概率对应的下标与人工标签不一致的样本。

  • Method 2:,选取构造计数矩阵过程中、进入非对角单元的样本进行过滤。

  • Method 3: Prune by Class (PBC) ,即对于人工标记的每一个类别选取个样本过滤,并按照最低概率排序。

  • Method 4: Prune by Noise Rate (PBNR) ,对于计数矩阵的非对角单元,选取个样本进行过滤,并按照最大间隔排序。

  • Method 5: C+NR,同时采用Method 3和Method 4.

我们仍然以前面给出的示例进行说明:

  • Method 1:过滤掉i=2,3,4,8,9共5个样本;

  • Method 2:进入到计数矩阵非对角单元的样本分别为i=3,4,9,将这3个样本过滤;

  • Method 3:对于类别0,选取  个样本过滤,按照最低概率排序,选取i=2,3,4;对于类别1,选取个样本过滤,按照最低概率排序选取i=9;综上,共过滤i=2,3,4,9共4个样本;

  • Method 4:对于非对角单元选取i=2,3,4过滤,对选取i=9过滤。

上述这些过滤样本的方法在cleanlab也有提供,我们只要提供2个输入、1行code即可clean错误样本:

import cleanlab
# 输入
# s:噪声标签
# psx: n x m 的预测概率概率,通过交叉验证获得
# Method 3:Prune by Class (PBC)
baseline_cl_pbc = cleanlab.pruning.get_noise_indices(s, psx, prune_method='prune_by_class',n_jobs=1)
# Method 4:Prune by Noise Rate (PBNR)
baseline_cl_pbnr = cleanlab.pruning.get_noise_indices(s, psx, prune_method='prune_by_noise_rate',n_jobs=1)
# Method 5:C+NR
baseline_cl_both = cleanlab.pruning.get_noise_indices(s, psx, prune_method='both',n_jobs=1)

2.3.3 Re-Training:过滤错误样本后,重新训练

在过滤掉错误样本后,根据联合分布 将每个类别i下的损失权重修正为:

其中.然后采取Co-Teaching[2]框架进行。

Co-teaching

如上图所示,Co-teaching的基本假设是认为noisy label的loss要比clean label的要大,于是它并行地训练了两个神经网络A和B,在每一个Mini-batch训练的过程中,每一个神经网络把它认为loss比较小的样本,送给它其另外一个网络,这样不断进行迭代训练。

2.4 实验结果

上面我们介绍完成置信学习的3个步骤,本小节我们来看看这种置信学习框架在实践中效果如何?在正式介绍之前,我们首先对稀疏率进行定义:稀疏率为联合分布矩阵、非对角单元中0所占的比率,这意味着真实世界中,总有一些样本不会被轻易错标为某些类别,如「老虎」图片不会被轻易错标为「汽车」。

真实联合分布和估计联合分布

上图给出了CIFAR-10中,噪声率为40%和稀疏率为60%情况下,真实联合分布和估计联合分布之间的比较,可以看出二者之间很接近,可见论文提出的置信学习框架用来估计联合分布的有效性;当然,论文也对联合估计有着严谨的推导证明。

不同置信学习方法的比较

上图给出了CIFAR-10中不同噪声情况和稀疏性情况下,置信学习与噪声学习中的其他SOTA方法的比较。例如在40%的噪声率下,置信学习比之前SOTA方法Mentornet的准确率平均提高34%。

置信学习发现的 ImageNet标签问题

论文还将提出置信学习框架应用于真实世界的ImageNet数据集,利用置信学习的PBNR方法找出的TOP32标签问题如上图所示,置信学习除了可以找出标注错误的样本(红色部分),也可以发现多标签问题(蓝色部分,图像可以有多个标签),以及本体论问题:绿色部分,包括“是”(比如:将浴缸标记为桶)或 “有”(比如:示波器标记为CRT屏幕)两种关系。

不同置信学习方法和随机去除的对比

上图给出了分别去除20%,40%…,100%估计错误标注的样本后训练的准确性,最多移除200K个样本。可以看出,当移除小于100K个训练样本时,置信学习框架使得准确率明显提升,并优于随机去除。

3 总结

  • 本文介绍了一种用来刻画noisy label、找出错误标注样本的方法——置信学习,是弱监督学习和带噪学习的一个分支。

  • 置信学习直接估计噪声标签和真实标签的联合分布,而不是修复噪声标签或者修改损失权重。

  • 置信学习开源包cleanlab可以很快速的帮你找出那些错误样本!可在分钟级别之内找出错误标注的样本。

接下来,让我们尝试将置信学习应用于自己的项目,找出那些“可恶”的数据噪声吧~

参考文献

[1] Confident Learning: Estimating Uncertainty in Dataset Labels
[2] Co-teaching: Robust Training of Deep Neural Networks with Extremely Noisy Labels


萌屋公告

喜欢本文的小伙伴们,记得扫描下方二维码关注并星标置顶,我才能来到你面前哦。

卖萌屋妹子们的原创技术干货有 ACL2020学术前沿系列、NLP综述系列、NLP论文清单系列、NLP基础入门系列、搜索与推荐系列、深度学习初/中/高级炼丹技巧、机器学习入门系列、算法岗offer收割系列等。订阅号后台回复【干货】即可打包带走。

卖萌屋里有众多顶会审稿人、大厂研究员、知乎大V和美丽小姐姐(划掉????‍♀️),我们成立了 自然语言处理 / 知识图谱 / 深度学习 / 机器学习 / 校招求职 高质量讨论群,订阅号后台回复入群即可上车。

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助力句子变换:35W抽象、43W同义、13W简称三大知识库对外开源

句子变换,是指根据给定中文句子,借助某种语言处理手段,扩展出一定数据规模的中文句子集合,是一个从1到N的过程,目的在于解决搜索(查询扩展)、分类(样本扩充)、抽取&#…

数据结构--红黑树 Red Black Tree

文章目录1.概念2.操作2.1 左旋、右旋(围绕某个节点的左/右旋)2.2 插入2.3 删除3. 代码1.概念 二叉树在频繁动态增删后,可能退化成链表,时间复杂度由 O(lgn) 变成 O(n)。(不平衡)平衡二叉树,树中…

深度学习在用户画像标签模型中的应用

原文地址:https://blog.csdn.net/chaishen10000/article/details/79324016 最近一段时间都在学习深度学习,想着在用户画像标签模型中看能不能用上,终于,用了一个多月的时间,结合实际的场景和数据,搭建了一套…

最强京东Java面试题(共现场4面)

一面(基础面:约1个小时) 自我介绍,主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 Autowired的实现原理 Bean的默认作用范围是什么?其他的作用范围? 索引是什么概念有什么作用?MyS…

工业界求解NER问题的12条黄金法则

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | JayLou娄杰,夕小瑶编 | 可盐可甜兔子酱美 | Sonata众所周知,命名实体识别(Named Entity Recognition,NER)是一项基础而又重要的NLP词法分析任…

POJ 1577 Falling Leaves(二叉查找树)

题目链接:http://poj.org/problem?id1577 题目大意: 二叉查找树按照叶子节点,从下往上抹去该树,给出抹除字符序列,求该二叉树,并前序打印 解题思路: 最后抹除的是根节点,把抹除的…

最新阿里内推高级Java面试题

阿里Java一面题目 osi七层网络模型,五层网络模型,每次层分别有哪些协议 死锁产生的条件, 以及如何避免死锁,银行家算法,产生死锁后如何解决 如何判断链表有环 虚拟机类加载机制,双亲委派模型&…

智能投顾-用户画像、投资组合选择、推荐引擎、大数据挖掘

智能投顾面面观之AI慕课 原文地址:https://www.jianshu.com/p/437c895794e0?utm_campaignharuki&utm_contentnote&utm_mediumreader_share&utm_sourceweixin “最后编辑于 2017.11.14 21:49”>2017.11.13 11:47* 自我介绍 大家好,我是…

论文浅尝 | KG Embedding with Iterative Guidance from Soft Rules

论文链接:https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/download/16369/16011发表会议:AAAI 2018摘要知识图谱表示学习旨在将实体和关系嵌入到向量空间,同时保留知识图谱的内在结构。传统方法主要基于关系三元组学习知识图谱的嵌入…

人工智能轨道交通行业周刊-第69期(2023.12.11-12.24)

本期关键词:集装箱智能管理、智慧工地、智能应急机器人、车辆构造、大模型推理 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨…

可信知识实证在UGC时代情报应用中的思考与探索

可信知识实证在UGC时代情报应用中的思考与探索 在当前互联网高度发达、可发布信息源和信息渠道猛增且多元化的大背景下,信息形态变得广泛且多模。从传统的纸质文档,到中期的电子结构化文档、电子非结构化文本,再到如今的语音信息、图片信息、…

Google | 创造Youtube单次上线最高收益!解决推荐中的信息茧房困境

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 江城编 | 夕小瑶今天分享一下Google在WSDM 2019的一篇将强化学习应用于Youtube推荐的论文,作者宣称是获得了Youtube近两年来单次上线的最高收益。文章仔细介绍了RL在Youtube上的实践方案细节…

POJ 2785 有多少种4个数相加等于0的方案(二分查找 or hash)

文章目录1.二分查找法1.1 思路:1.2 AC代码2.hash查找法2.1 思路:2.2 Wrong Answer 代码2.3 Time Limit Exceeded 代码2.4 偷懒失败,hash_map在poj中不存在2.5 哈希表二叉查找树(超时)2.6 AC代码(哈希数组法…

2018最新阿里Java技术三面(已拿Offer):JVM+高并发性能+单点登录+微服务

一面 1.自我介绍 2.谈一个你觉得你学到最多的项目,使用了什么技术,挑战在哪里 3.Spring的bean的作用域?(比如:singleton,prototype等) 4.Spring的IOC实现原理?没有无参构造函数能…

论文浅尝 | 基于局内去噪和迁移学习的关系抽取

动机在远程监督任务中,除了语料的错误标注问题,还存在句内噪声单词过多的问题,即多数句子都存在一些与表达关系无关的词汇,这个问题未有人关注。当前研究的另一个问题是,句子特征抽取器采用随机初始化的方法&#xff0…

关于知识图谱,我们接下来该研究什么?斯坦福教授们给出了答案

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 舒意恒(南京大学硕士生,知识图谱方向)编 | 北大小才女小轶本文整理了斯坦福大学 CS 520 知识图谱研讨会课程的第 10 集的内容,主要是关于知识图谱未来的研…

POJ 2967 (水题,考察putchar()按位输入)

题目链接:http://poj.org/problem?id2967 题目大意: 给定系列长度,求是否有规定的三角形 (不是所有的都可以组成三角形&&有至少一种组合可以组成三角形)-> 打印通过,否则打印拒绝。 题目有时…

四大银行(工建农中)大数据进展如何?

原文地址:https://cloud.tencent.com/developer/article/1052576 中国建设银行中国建设银行信息技术管理部资深经理林磊明▼▼1、银行压力越来越大从十二五走到十三五期间,银行业面临的各方面的压力越来越大,从我们的年报数字可以看出去年四大…

论文浅尝 | 多内容实体和关系联合抽取的对抗训练

链接:https://arxiv.org/pdf/1808.06876.pdf动机Szegedy 在 14 年发现,对于图像分类问题的神经网络,若是在输入中人为的添加很小尺度的扰动,会让已经训练好的神经网络做出错误的判断,并且可能以很高的置信度输出。很多…

BAT面试进阶:最全Memcached面试30题含答案

【memcached面试题目】 Memcached服务在企业集群架构中应用场景? Memcached服务在不同企业业务应用场景中的工作流程? Memcached服务分布式集群如何实现? Memcached服务特点及工作原理是什么? Memcached内存管理机制原理? Memcached的…