我有一组特征用于构建标注函数(集合A),另一组特征用于训练sklearn分类器(集合B)
生成模型将输出一个概率标签集,我可以用这些标签来训练我的分类器。
我是否需要将用于标注函数的特征(集合A)添加到我的分类器特征中(集合B)?还是只使用生成的标签来训练我的分类器?
我在参考snorkel垃圾邮件教程时,没有看到他们使用标注函数集中的特征来训练新的分类器。
如在cell 47
中所见,特征提取完全使用CountVectorizer完成:
from sklearn.feature_extraction.text import CountVectorizervectorizer = 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模型的拟合:
# 定义一个简单的逻辑回归模型,使用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,
)
回答:
我在snorkel的GitHub页面上问了同样的问题,以下是回应:
你不需要将用于LFs的特征(集合A)添加到分类器特征中。为了防止最终模型简单地过度拟合到标注函数,最好是LFs和最终模型的特征(集合A和集合B)尽可能不同
https://github.com/snorkel-team/snorkel-tutorials/issues/193#issuecomment-576450705