通常,当我仅使用CountVectorizer
时,我可以使用词汇表作为CountVectorizer
新对象的参数,以便在预测之前处理新数据
cv = CountVectorizer()
X = cv.fit_transform(corpus).toarray()
cv_dict = cv.vocabulary_
test_cv = CountVectorizer(vocabulary = cv_dict)
test_X= test_cv.fit_transform(test_corpus).toarray()
我想知道如何使用管道来做同样的事情? 我写这段代码开始
text_features = dataset['corpus']
text_transformer = Pipeline(
steps=[
('count', CountVectorizer()),
]
)
preprocessor = ColumnTransformer(
transformers=[
('text', text_transformer, text_features[0])
]
)
答案 0 :(得分:1)
创建 test_cv
向量化器的第一个代码片段过于复杂且没有必要。它也可能提供您期望的不同向量。让我们首先简化它,管道部分将变得更容易。您创建了 cv
对象并使用了它的 fit_transform
函数。此函数使向量化器适合数据。在这种情况下,这意味着它学习了数据的词汇并将其内部存储在 vocabulary
实例变量中。然后根据它在拟合时学到的词汇转换输入数据。
如果您现在只是在同一个对象上调用 transform
函数,它也会使用存储的词汇表来转换新数据。您无需创建新对象 test_cv
并将旧词汇表传递给它。
cv = CountVectorizer()
X = cv.fit_transform(corpus).toarray()
test_X= cv.transform(test_corpus).toarray()
现在简化了,管道部分变得更容易理解。您的管道代码已在其当前状态下工作(假设输入正确)。如果您希望矢量化器学习词汇,您现在可以调用 processor.fit(corpus)
。然后您可以调用 processor.transform(test_corpus)
将向量化器应用于 test_corpus。