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

时间:2016-10-12 22:04:13

标签: python machine-learning keras deep-learning noise-reduction

我有一个包含句子和相应的多标签的数据集(例如,一个句子可以属于多个标签)。在语言模型(Word2Vec)上结合使用卷积神经网络和递归神经网络,我能够获得良好的准确性。但是,它很擅长于输出建模,因为很多标签都是错误的,因此输出也是如此。这意味着评估(即使是正规化和辍学)给人一种错误的印象,因为我没有基本的事实。清理标签将非常昂贵。所以我离开去探索去噪"某种程度上的标签。我已经看过像"Learning from Massive Noisy Labeled Data for Image Classification"之类的东西了,但是他们假设在输出上学习某种噪声协变矩阵,我不确定如何在Keras中做。

之前有没有人在多标签文本分类设置中处理过嘈杂标签的问题(理想情况下使用Keras或类似设备)并且对如何学习带有噪音标签的健壮模型有很好的想法?

1 个答案:

答案 0 :(得分:2)

我专门为之设计的cleanlab Python软件包pip install cleanlab正是为此目的而设计的:https://github.com/cgnorthcutt/cleanlab/这是一个专业软件包,用于清除/去除数据集中的标签并进行学习。带有嘈杂的标签。它可以与任何现成的scikit学习模型一起使用,并且可以与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)的工作示例。