【发布时间】:2018-08-22 18:19:37
【问题描述】:
我想使用一个管道,它使用 Vectorizer,然后是 LDA 预处理步骤。 LDA 预处理步骤需要 Vectorizer 的词汇表。
如何将已拟合 Vectorizer 步骤的词汇表传递给下一个 LDA 步骤?我试图将管道本身传递给 LDA 步骤,但不幸的是这不起作用。
pipe_full = Pipeline(
[('vect', StemmedCountVectorizer(strip_accents='unicode', analyzer='word')),
('lda', SklLdaModel_mod()),
('clf', SGDClassifier(loss='log', penalty='elasticnet', n_iter=5, random_state=42, class_weight={0: 1, 1: 2}))])
param_grid_full = [{'vect__ngram_range': ((1, 1), (1, 2)), 'vect__stop_words': (None, 'english'),
'vect__token_pattern': (r'(?u)\b\w\w+\b', r'(?u)\b([a-zA-Z]{3,})\b'),
'vect__stemmer': (None, SnowCastleStemmer(mode='NLTK_EXTENSIONS')),
'lda': (None, SklLdaModel_mod(id2word=pipe_full, num_topics=10), SklLdaModel_mod(id2word=pipe_full, num_topics=20)),
# 'lda__topics': (100, 200),
# 'lda__topics': (10, 20), # for testing purposes only
'clf__alpha': (1e-4, 5e-4)}]
...在 SklLdaModel_mod 的 fit 方法中,我有:
if isinstance(self.id2word, Pipeline):
try:
self.id2word = {v: k for k, v in self.id2word.named_steps['vect'].vocabulary_.items()}
有什么建议吗?
【问题讨论】:
-
如果矢量化器是管道的第一步,您可以尝试将其移出管道,然后拟合数据,并在管道内使用
vocabulary_。