我有一套用来建立标签功能的特征(A组)和另一组用来训练滑雪板分类器(B组)的功能。
生成模型将输出一组概率标签,我可以用来训练我的分类器。
我是否需要在我的分类器特征中添加标记函数所使用的特征(集合A)?(设置B)还是仅仅使用生成的标签来训练我的分类器?
我指的是snorkel垃圾邮件教程,我没有看到他们使用标签函数中的特性来训练新的分类器。
正如在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())然后直接拟合角膜模型:
# 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,
)发布于 2020-01-21 06:59:18
我向snorkel github页面提出了同样的问题,这是回答:
您不需要将用于LFs的特性(集合A)添加到分类器特性中。为了防止末端模型简单地过度拟合到标记函数,如果LFs和end模型(集合A和集合B)的特征尽可能不同,就更好了。
https://github.com/snorkel-team/snorkel-tutorials/issues/193#issuecomment-576450705
发布于 2020-01-21 01:04:59
从链接的snorkel教程中,标签函数(将输入映射到标签("HAM“、”垃圾邮件“、”弃权“)用于提供标签而不是features )。
IIUC,这个想法是在你没有高质量的人类标签的时候产生标签。虽然这些“自动生成”标签会很吵,但它可以作为标记数据集的起点。学习过程是利用这个数据集学习一个模型,该模型对这些标记函数中嵌入的知识进行编码。希望该模型能够更通用,并且该模型可以应用于未见数据。
如果某些标记函数(可以被视为固定的规则)在某些条件下非常稳定(关于预测精度),那么给定足够的训练数据,您的模型应该能够了解这一点。然而,在生产系统中,为了克服模型不稳定的可能性,一个简单的解决方法是在所见数据上用人工标记覆盖机器预测。如果您认为这些标记函数可以用于特定的输入(模式),也可以应用相同的想法。在这种情况下,标记函数将用于直接获取标签以覆盖机器预测。此过程可以在机器学习模型运行之前作为预检查来实现。
https://stackoverflow.com/questions/59816879
复制相似问题