CountVectorizer 读取和写入词汇表

我目前正在开发一个相当简单的情感分类程序。训练阶段一切运行良好。然而,在测试包含未见过的词的新文本字符串时,使用 CountVectorizer 遇到了问题。

因此,我试图在测试阶段为向量化编写一个查找词汇表。然而,我不知道如何创建和检索词汇表对象以将其作为参数传递。

我目前的两个方法如下所示:

def trainingVectorTransformation (messages):    #--> ReviewText to vectors
        vect = CountVectorizer(analyzer=split_into_lemmas).fit(messages['reviewText'])
    messages_bow = vect.transform(messages['reviewText'])
    feature_list = vect.get_feature_names()
    #不确定如何创建词汇表
    with open("vocab.txt", "w") as text_file:
        text_file.write(str(feature_list))
       tfidf_transformer = TfidfTransformer().fit(messages_bow)
    messages_tfidf = tfidf_transformer.transform(messages_bow)
    return messages_tfidf

def testingVectorTransformation (messages):    #--> ReviewText to vectors
    #不确定如何读取已创建的词汇表并适当使用它
       txt = open("vocab.txt")
    vocabulary = txt.read()
    vect = CountVectorizer(analyzer=split_into_lemmas, vocabulary = vocabulary).fit(messages['reviewText'])
    messages_bow = vect.transform(messages['reviewText'])
    tfidf_transformer = TfidfTransformer().fit(messages_bow)
    messages_tfidf = tfidf_transformer.transform(messages_bow)
    return messages_tfidf

如果有人有关于如何正确创建和使用词汇表的建议,我将非常感激。


回答:

你需要使用某种序列化器(例如 pickle)保存你的向量化器的副本,并在测试阶段加载它。你也可以使用 vocabulary_ 属性获取词汇表,详见 这里

另外,看你的代码,在训练时你应该调用 vect.fit_transform 而不是仅仅调用 transform

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注