- LawsonAbs的认知与思考,不一定完善和准确,还请各位读者怀批判思维阅读。
- 持续更新
1.需求
想使用cleanlab 这个工具,找出数据中错误的人工标注的标签。
普通的标签任务有两种:
- 单标签
- 多标签
单标签的任务使用 cleanlab 较好实现,这里主要介绍一 使用cleanlab完成多标签任务中错误标注标签的查找
实现这个任务,只需要6行代码。如下所示:
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
)
针对之前对cleanlab的学习,分别调整好s,psx的值就可以作为参数传入了。但是它们的格式该怎么控制呢?
2.数据格式这里以我做的一个任务为例,介绍一下s,psx取值的情况。
有1000个样本,153中标签,每个样本可以有多个标签。
- 原始标签 s
在 一个实体可以分为很多类 的这种任务中,s是一个list of list,但是必须其中的每个list都必须是numpy array类型,那么最后得到的s长如下的样子:
- 概率矩阵 psx
是一个n*m的矩阵,不过依然是用numpy 中的arraay存储。格式如下:
得到的结果中,如果是为True
,则说明该人工标注的标签可能存在问题。
可能在运行的过程中出现如下问题:cleanlab ValueError: operands could not be broadcast together with shapes (10,195),(2,)
这种问题的原因就是 标签数对应不上导致出错。上面的这个报错(10,195),(2,)
指的是你想做一个10*195的分类,但实际存在的标签只有2个,这个工作就无法进行下去所以报错了。也就是 {总标签集合}的个数 > {实际出现的标签集合}的个数
修改的方法就是:只将人工标注的标签的集合总数作为m值。
- https://github.com/cgnorthcutt/cleanlab/issues/41