在使用Keras中的神经网络(NNs)时,如何在训练过程中使用词嵌入非常明确,你可以简单地做如下操作:
embeddings = ...model = Sequential(Embedding(...), layer1, layer2,...)
但我不知道如何在sklearn中的算法如SVM、NB和逻辑回归中实现这一点。我知道有一个Pipeline
方法,操作非常简单(http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html),如下所示:
pip = Pipeline([(Countvectorizer()), (TfidfTransformer()), (Classifier())])pip.fit(X_train, y_train)
但是,如何在这个pipeline中包含已加载的词嵌入呢?或者应该在pipeline之外以某种方式包含它?我在网上找不到关于如何做这件事的很多文档。
谢谢。
回答:
你可以使用FunctionTransformer类。如果你的目标是拥有一个转换器,它接受一个索引矩阵并输出一个包含词向量的3D张量,那么这应该足够了:
# 这假设你使用的是numpy的ndarraysword_vecs_matrix = get_wv_matrix() # 伪代码def transform(x): return word_vecs_matrix[x]transformer = FunctionTransformer(transform)
请注意,与Keras不同的是,词向量不会通过某种梯度下降方法进行微调