pytorch 对来自另一个有噪声的数据集的数据赋予较小的权重

prdp8dxp  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(151)

我有两个数据集,一个包含干净数据,另一个包含不干净数据。我在干净数据集上训练Roberta模型,然后取得不干净数据集的预测。几率大于0.9的那些预测会移至干净数据集。然后,我会使用这个新数据集(干净+不干净移至干净)重新训练Roberta模型。
对于重新训练,我使用MAE损失函数(对噪声标签更鲁棒),并且我使用权重来为从脏数据集传递到干净数据集的数据给予更小的值,如下所示:

loss = torch.mean(torch.abs(y_true - y_pred) * weights)

最初,我对传递到干净数据集中的所有脏数据使用了0.5的任意权重,但是,我想以一种更学术的方式给它们分配一个权重,而不是那么任意。
我怎么能那样做呢?

fcg9iug3

fcg9iug31#

选择权重的一种方法是基于您对脏数据的置信度并相应地分配权重。例如,如果您认为90%的脏数据被正确标记,则选择0.9作为噪声数据的权重是一个合理的选择。
此外,还有一整套关于从噪声标签中学习的文献,您可以查看此调查以了解更多信息:https://arxiv.org/abs/2007.08199

hgc7kmma

hgc7kmma2#

出于好奇,为什么不直接使用cleanlab来查找数据集中的标签错误和其他数据问题呢?https://github.com/cleanlab/cleanlab
它在几行代码中处理了ML的大多数数据问题,例如:

在1行代码中查找标签问题

from cleanlab.classification import CleanLearning
from cleanlab.filter import find_label_issues

# Option 1 - works with sklearn-compatible models - just input the data and labels ツ

label_issues_info = CleanLearning(clf=sklearn_compatible_model).find_label_issues(data, labels)

# Option 2 - works with ANY ML model - just input the model's predicted probabilities

ordered_label_issues = find_label_issues(
    labels=labels,
    pred_probs=pred_probs,  # out-of-sample predicted probabilities from any model
    return_indices_ranked_by='self_confidence',
)

训练模型,就像数据集没有错误一样-- 3行代码

from sklearn.linear_model import LogisticRegression
from cleanlab.classification import CleanLearning

cl = CleanLearning(clf=LogisticRegression())  # any sklearn-compatible classifier
cl.fit(train_data, labels)

# Estimate the predictions you would have gotten if you trained without mislabeled data.

predictions = cl.predict(test_data)

相关问题