如何使用管道获取CountVectorizer的词汇

时间:2019-05-29 11:00:29

标签: python scikit-learn pipeline countvectorizer

通常,当我仅使用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])
    ]
)

1 个答案:

答案 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。