【手把手】如何使用置信学习cleanlab对数据集进行去噪

2023-11-16

开源代码

https://gitee.com/qq874455953/cleanlab_nlp_keras/
目前可能是数据集选的不好, 数据集本身没什么噪声 所以有点小问题 不过总体框架是搭建起来的

前言

在做一个项目的时候,发现数据集噪声非常多,项目是是一个文本分类问题, 但是数据集中经常出现 label 错误的情况, 也就是所谓的

label noise问题,在这样的数据集对模型进行训练效果非常差。关于label noise感兴趣可以看 Noisy Label 20 篇论文纵览 ,也是一个研究的热门方向,且对于工业界意义很大。

笔者在经过一些相关的调研之后, 从实现难度,教程数量, 原理理解这些方面角度,最终选取置信学习这种方式对数据集合进行去噪

置信学习相关介绍

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

置信学习主要包括3个部分

  • Count:估计噪声标签和真实标签的联合分布
  • Clean:找出并过滤掉错误样本
  • Re-training:过滤错误样本后,重新训练

其中count 阶段

  • 可以理解为 找到 可能是噪声的集合,

  • 如何判断是否可能为噪声 则是根据是否大于平均概率得到的,

  • 平均概率则是所有label 为class a 的平均概率

    例子:在这里插入图片描述

类别0的平均概率则是mean([0.9 , 0.9, 0.5, 0.3, 0.3])

所以我们进行置信学习 需要的有

  1. 每个样本在每个类别的概率 —> count 阶段用
  2. 每个样本实际属于哪个类别 —> count 阶段用

Clean阶段则是

  • 对于Count 阶段得到的 不可信集合中 以一定的策略进行可信度排序
  • 然后根据顺序取出最不可信的样本
  • 文章给了5种策略 感兴趣可以阅读https://zhuanlan.zhihu.com/p/146557232 这个作者的例子举的很好

置信学习开源工具:cleanlab

作者对这个置信学习框架进行了开源, 地址如下

https://github.com/cgnorthcutt/cleanlab

文档地址如下:

https://l7.curtisnorthcutt.com/cleanlab-python-package

我们就是通过cleanlab 工具 对带躁数据集合进行去噪声

实战

鉴于网上都没有给出完整的一个置信学习流程, 而且有的话也是非常简略, 什么参数都不告诉你怎么来的,特别是基于tensorflow pytorch kears 深度学习框架 则是完全没有,唯一的一个详细的教程竟然需要收费。 作者靠着自己的摸索,给出一个相对完整的教程,一起相互需学习。本文是使用keras 搭建的神经网络模型

如何去噪

官方原话: 我们使用cheanlab。只需要一行代码即可对数据进行去噪

这一行代码如下

# Compute psx (n x m matrix of predicted probabilities) 
#     in your favorite framework on your own first, with any classifier.
# Be sure to compute psx in an out-of-sample way (e.g. cross-validation)
# Label errors are ordered by likelihood of being an error.
#     First index in the output list is the most likely error.
from cleanlab.pruning import get_noise_indices

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
 )

numpy_array_of_noisy_labels : 每个样本实际属于哪个类别

numpy_array_of_predicted_probabilities: 模型预测每个样本在每个类别的概率

sorted_index_method: 选择是否是噪声数据的策略

1. 安装cleanlab

Pip install cleanlab

2. 计算概率

这里就学问大了, 如何计算每个样本的概率呢, 原文的说法是进行K轮交叉验证

K轮交叉验证的具体意思则是

  • 把数据分为K份(这里我使用的是5。最好大于5)
  • 其中选一份为测试集, 其余K-1份为 训练集,训练一个模型
  • 把测试集 输入 训练的模型, 得到测试集每个样本的预测每个类的概率 得到我们需要的 每个样本在每个类别的概率
  • 测试集 每个样本 自身的label 则是 每个样本实际属于哪个类别

这样通过K轮交叉验证 我们得到了工具包所需的所有参数,具体怎么做可以看我开源的工程

BERT + mulit-CNN -> 文本分类

3. 调工具包得到 噪声数据位置

# Compute psx (n x m matrix of predicted probabilities) 
#     in your favorite framework on your own first, with any classifier.
# Be sure to compute psx in an out-of-sample way (e.g. cross-validation)
# Label errors are ordered by likelihood of being an error.
#     First index in the output list is the most likely error.
from cleanlab.pruning import get_noise_indices

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
 )

4. 去除噪声数据

在上一步训练的过程中我们得到 ordered_label_errors

也就是 所有不可信数据的置信排序, 最不可信到最可信

然后我们则可以对验证集合进行遍历, 如果index 在这个 ordered_label_errors里面 , 说明这个index 的数据是噪声数据

我们取出,否则保留, 得到这一份验证集的去噪版本

重复K次, 把每一份验证集的去噪声版本进行合并则得到我们最终的去噪数据集

参考文献

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【手把手】如何使用置信学习cleanlab对数据集进行去噪 的相关文章

随机推荐

  • 实验三 虚拟局域网的配置

    一 实验目的和要求 1 理解以太网交换机IEEE802 1q扩展帧的转发 过滤 机制 2 理解虚拟局域网的功能和划分方法 3 理解STP协议工作机制 3 掌握单个交换机和跨交换机的VLAN配置 4 掌握三层交换机的配置 二 实验设备 1 双
  • 高防IP是什么?有什么作用?

    最近不少来咨询的客户都问什么是高防IP 客户接入这个高防IP的话需要做些什么准备 今天就给大家科普一下什么是高防IP 他的原理是什么 客户接入需要做些什么 高防IP是指高防机房所提供的IP段 主要是针对网络中的DDOS攻击进行保护 在网络世
  • CompiledEffect Direct3D9 Sample fxc.exe

    转载于 https www cnblogs com Agravity p 5138141 html
  • 微信小程序——自定义日期时间组件实现

    目前 微信小程序选择器提供了日期选择器 时间选择器等 但没有日期时间一体的选择器 当项目中需要进行日期时间选择时 我们只有自定义组件了 首先 我们需要先了解一下小程序的picker组件 详细使用见链接 https developers we
  • UDP通过广播的形式发送、接收结构体

    UDP是一种无连接的 面向数据包的传输协议 通过广播的方式可以向多个接收方发送数据 在C 中 可以使用socket库来实现UDP广播的发送和接收 下面是一篇CSDN博文 介绍了如何使用C 通过广播的形式发送和接收结构体 一 UDP广播的发送
  • 电商的1000+篇文章总结

    电商的1000 篇文章总结 本文收集和总结了有关电商的1000 篇文章 由于篇幅有限只能总结近期的内容 想了解更多内容可以访问 http www ai2news com 其分享了有关AI的论文 文章 图书 query 6 合并大舞台的背后
  • cocos2dx:瓦片地图加载失败及黑线问题

    问题 1 瓦片地图加载失败 运行时 获取瓦片地图的层失败 调试发现 获取的层是一个 NULL 遇到这个问题 我第一反应是图片路径有问题 但经过检查发现 路径没有问题 然我就怀疑 是我的代码有问题 然而并没有 调试无果 我就把目光转向瓦片地图
  • 23种设计模式之模板方法模式

    文章目录 模板方法模式 模板方法模式的优缺点 使用场景 模板方法模式 模板方法模式法 Template Method 定义一个操作中的算法骨架 而将算法的一些步骤延迟到子类中 使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤
  • pushd命令

    1 功能pushd命令常用于将目录加入到栈中 加入记录到目录栈顶部 并切换到该目录 若pushd命令不加任何参数 则会将位于记录栈最上面的2个目录对换位置2 语法 1 格式 pushd 目录 N N n 2 选项目录 将该目录加入到栈顶 并
  • 边界框回归的魔法:揭秘精准高效的MPDIoU损失函数

    文章目录 摘要 1 简介 2 相关工作 2 1 目标检测和实例分割 2 2 场景文本识别 2 3 边界框回归的损失函数 3 点距最小的并集交点 4 实验结果 4 1 实验设置 4 2 数据集 4 3 评估协议 4 4 目标检测的实验结果 4
  • 图神经网络与因果推理

    传统的因果推理基于线性结构方程模型 深度因果推理模型 这是基于图神经网络的模型 利用扁粉自动编码机来学习模型 其中 网络结构 因果推理模型为
  • iOS的终端命令和linux命令,iOS 终端 shell 操作,Mac 操作快捷键

    shell 操作命令 简单的shell 命令操作指令 pwd 当前工作目录 cd 不加参数 进root cd folder 进入文件夹 cd 上级目录 cd 返回root cd 返回上一个访问的目录 rm 文件名 删除 文件 rm 删除当前
  • vscode 配置文件

    将设置放入此文件中以覆盖默认设置 editor fontSize 18 editor fontFamily Source Code Pro Noto Sans CJK SC Consolas editor rulers 120 editor
  • 监听文件读取进度,中断文件读取

  • 使某个dom元素匀速滑动到容器顶部

    需求 我有个侧面的菜单 点击对应的菜单标题 可以让左侧的容易里对应标题滑到最顶上 于是我封装了一个缓动函数 这个函数接受3个参数 需要滚动的最外层的容器 滚动到什么距离 滚动时间 注意点 第一个参数的最外层的容器 需要滚动条 没滚动条是没有
  • Java AOP有5种增强方式注解——前置@Before,后置@After,返回@AfterReturning,异常@AfterThrowing,环绕@Around

    执行顺序 前置增强 gt 目标函数 gt 后置增强 gt 返回增强 异常增强 注意 Before After AfterRunning和 AfterThrowing修饰的方法没有返回值 而 Around修饰的方法必须有返回值 Aspect
  • 使用html制作3D循环相册

    使用 html 制作简单3D循环相册 注 img 标签中的 src 属性为你图片资源路径
  • typescript学习笔记

    typescript学习笔记 一 简介 typescript是js的超集 主要学习ts里面的原始类型 字面量类型 数组类型 函数类型 类类型 接口类型 类型别名 联合交叉类型 枚举类型 泛型等类型元素 以及类型推断 类型断言 类型缩小 类型
  • 开发BLE蓝牙手机上位机软件竟是如此的简单

    做安卓手机APP通常使用高端大气的Android Studio 开发语言是Java 该开发IDE就是体积大 学习成本高 入手慢 这里给大家推荐一款国产的软件 体积小 运行和编译速度快 最重要的是编程语言是中文 这个软件就是E4A 本次我将向
  • 【手把手】如何使用置信学习cleanlab对数据集进行去噪

    开源代码 https gitee com qq874455953 cleanlab nlp keras 目前可能是数据集选的不好 数据集本身没什么噪声 所以有点小问题 不过总体框架是搭建起来的 前言 在做一个项目的时候 发现数据集噪声非常多