我目前正在开发一个相当简单的情感分类程序。训练阶段一切运行良好。然而,在测试包含未见过的词的新文本字符串时,使用 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