p = Pipeline([
('pre', Preprocessing()),
('clf', KerasClassifier()),
])
После установки Preprocessing
он будет содержать обученный tokenizer
, и я хочу использовать этот токенизатор внутри clf.fit
.Есть ли способ передать его?
Проверено Исходный код и похоже, что нет пути.К сожалению, мне нужно заранее установить токенизатор вручную и передать его на каждый этап конвейера.
Или с помощью некрасивого хака: make 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)