Snorkel:我可以在数据集中使用不同的功能来生成标记函数VS训练分类器吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Snorkel:我可以在数据集中使用不同的功能来生成标记函数VS训练分类器吗?相关的知识,希望对你有一定的参考价值。

我具有一组用于构建标签功能的功能(A组)以及一组用于训练sklearn分类器的功能(B组)

生成模型将输出一组概率标签,我可以用它们来训练我的分类器。

我是否需要将用于标签功能的功能(A组)添加到分类功能中? (B组)还是只使用生成的标签来训练我的分类器?

我正在参考snorkel spam tutorial,但我没有看到它们使用标签功能集中的功能来训练新的分类器。

[在cell 47中似乎,功能化完全使用CountVectorizer:

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(ngram_range=(1, 2))
X_train = vectorizer.fit_transform(df_train_filtered.text.tolist())

X_dev = vectorizer.transform(df_dev.text.tolist())
X_valid = vectorizer.transform(df_valid.text.tolist())
X_test = vectorizer.transform(df_test.text.tolist())

然后直接拟合一个keras模型:

# Define a vanilla logistic regression model with Keras
keras_model = get_keras_logreg(input_dim=X_train.shape[1])

keras_model.fit(
    x=X_train,
    y=probs_train_filtered,
    validation_data=(X_valid, preds_to_probs(Y_valid, 2)),
    callbacks=[get_keras_early_stopping()],
    epochs=50,
    verbose=0,
)
答案
从链接的浮潜教程中,标签功能(将输入映射到标签(“ HAM”,“ SPAM”,“弃权”)用于提供

labels而不是features

IIUC,这个想法是在您没有高质量的人类标签时生成标签。尽管这些“自动生成的”标签会非常嘈杂,但可以将其用作标签数据集的起点。学习过程是获取该数据集并学习一个模型,该模型对嵌入在这些标记函数中的知识进行编码。希望该模型可以更通用,并且可以将模型应用于看不见的数据。

如果给定

足够的训练数据

,在某些情况下,如果其中某些标记功能(可以看作是固定规则)非常稳定(关于预测准确性),则您的模型应该能够学习。但是,在生产系统中,为了克服模型不稳定性的可能性,一个简单的解决方法是对带有可见数据的人为标签的机器预测进行[覆盖]。如果您认为这些标记功能可以用于某些特定的输入(模式),则也可以应用相同的想法。在这种情况下,标签功能将用于直接获取标签以覆盖机器预测。该过程可以作为您的机器学习模型运行之前的预检查来实施。

以上是关于Snorkel:我可以在数据集中使用不同的功能来生成标记函数VS训练分类器吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以在 BigQuery 中从不同数据集中查询表

从大型数据集中提取最小/最大/平均数据的宏

加入两个表来生成图形,但它们没有公共列

Sklearn Pipeline 添加新功能

如何使用 python 减少 kaggle Mushroom Classification 数据集中的特性数量?

如何在 Weka 中构建 SVM 分类器以仅考虑数据集中的某些特征?