首页 > 解决方案 > 如何使用管道获取 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])
    ]
)

标签: pythonscikit-learnpipelinecountvectorizer

解决方案


创建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。


推荐阅读