使用深度学习处理文本分类中的嘈杂训练标签

Posted

技术标签:

【中文标题】使用深度学习处理文本分类中的嘈杂训练标签【英文标题】:Dealing with noisy training labels in text classification using deep learning 【发布时间】:2017-02-21 21:03:11 【问题描述】:

我有一个由句子和相应的多标签组成的数据集(例如,一个句子可以属于多个标签)。在语言模型(Word2Vec)上使用卷积神经网络和递归神经网络的组合,我能够达到很好的准确性。然而,它/too/擅长对输出进行建模,因为很多标签可以说是错误的,因此输出也是如此。这意味着评估(即使有正则化和辍学)给人的印象是错误的,因为我没有基本事实。清理标签会非常昂贵。所以我不得不以某种方式探索“去噪”标签。我看过"Learning from Massive Noisy Labeled Data for Image Classification" 之类的东西,但是他们假设在输出上学习某种噪声协方差矩阵,我不确定如何在 Keras 中做到这一点。

之前是否有人处理过多标签文本分类设置中的噪声标签问题(理想情况下使用 Keras 或类似工具),并且对如何学习具有噪声标签的稳健模型有很好的想法?

【问题讨论】:

【参考方案1】:

cleanlab Python 包,pip install cleanlab,我是其作者,旨在解决此任务:https://github.com/cgnorthcutt/cleanlab/。这是一个专业的软件包,用于查找数据集中的标签错误并使用嘈杂的标签进行学习。它适用于任何开箱即用的 scikit-learn 模型,并且可以与 PyTorch、FastText、Tensorflow 等一起使用。

在数据集中查找标签错误。

from cleanlab.latent_estimation import estimate_cv_predicted_probabilities

# Find the indices of label errors in 2 lines of code.

probabilities = estimate_cv_predicted_probabilities(
    X_train_data, 
    train_noisy_labels, 
    clf=LogisticRegression(),
)
label_error_indices = get_noise_indices(
    s = train_noisy_labels, 
    psx = probabilities, 
)

用于使用嘈杂的标签进行学习。

# Code taken from https://github.com/cgnorthcutt/cleanlab
from cleanlab.classification import LearningWithNoisyLabels
from sklearn.linear_model import LogisticRegression

# Learning with noisy labels in 3 lines of code.

# Wrap around any classifier. Works with sklearn/pyTorch/Tensorflow/FastText/etc.
lnl = LearningWithNoisyLabels(clf=LogisticRegression())
lnl.fit(X = X_train_data, s = train_noisy_labels)
# Estimate the predictions you would have gotten by training with *no* label errors.
predicted_test_labels = lnl.predict(X_test)

鉴于您正在使用 NLP 分类和图像分类,以下是使用 FastText (NLP) 和 PyTorch (MNIST AlexNet CNN) 的工作示例。

其他文档可在此处获得:https://l7.curtisnorthcutt.com/cleanlab-python-package

【讨论】:

我想知道是否可以翻转二进制分类中的嘈杂标签,而不是完全删除它们。 您可以,只是请注意,如果您的模型精度较低,这将引入更多错误,并且会以某种方式受到您的模型的影响。如果您反复执行此操作,您可能会陷入糟糕的最小值 谢谢!还有一个问题:CL 中的噪声标签是指随机噪声(例如,某人将猫标记为狗只是错误地标记了狗),还是它也将由于对象的难度而错误标记的数据视为噪声标签(例如,很难假设图像是猫或狗,我们可能选择了错误的标签)? @Sarah 两者都不是,但比随机噪声更接近第二个。 CL 模拟类条件噪声。所以这意味着,对于每个类,它都知道它被错误标记为任何其他类的概率。这个假设是常用的,因为它是合理的。例如,在 ImageNet 中,“老虎”比“长笛”更容易被误贴为“猎豹”。 @hafiz031 嗯,这很奇怪。让我们将讨论移至github.com/cleanlab/cleanlab/issues - 你可以在这里发布问题吗? Cleanlab 支持 fasttext,它应该适合你。以下是亚马逊评论数据集和 fasttext 说明的示例:github.com/cleanlab/cleanlab/tree/master/examples/…

以上是关于使用深度学习处理文本分类中的嘈杂训练标签的主要内容,如果未能解决你的问题,请参考以下文章

《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与CPU 下的微调 fine tune)

《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与使用windows11 在WSL GPU 下的微调 fine tune)

中文文本分类大概的步骤

使用深度学习改进多标签文本分类问题的结果 [关闭]

文本分类方法都有哪些

用深度学习解决自然语言处理中的7大问题,文本分类语言建模机器翻译