p = Pipeline([
('pre', Preprocessing()),
('clf', KerasClassifier()),
])
安装后Preprocessing它将包含训练有素tokenizer,我想在里面使用那个标记器clf.fit。有什么办法可以通过吗?
检查了源代码,看起来没有办法。可悲的是,我需要事先手动安装标记器并将其传递给每个管道步骤。
或者通过使用丑陋的技巧:preprocessing.transform使用转换后的数据和标记器而不只是数据来返回元组,然后在内部clf.fit解包该元组。
以丑陋的黑客告终:
class Preprocessing(TransformerMixin, BaseEstimator):
...
def transform(self, X):
...
return X, self.tokenizer.word_index
class CustomClassifier(KerasClassifier):
def fit(self, X, y, sample_weight=None, **kwargs):
X, word_index = X
self.sk_params['word_index'] = word_index
return super(NNClassifier, self).fit(X, y, sample_weight, **kwargs)
def predict(self, X, **kwargs):
X, _ = X
return super().predict(X, **kwargs)