如何用tf-idf对新文档进行分类



如果我使用sklearn中的TfidfVectorizer生成特征向量为:

features = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)).fit_transform(myDocuments)

然后我如何生成特征向量来对新文档进行分类?因为你不能计算单个文档的tf-idf。

提取特征名是正确的方法吗?

feature_names = TfidfVectorizer.get_feature_names()

,然后根据feature_names ?

计算新文档的词频。

但是这样我就不会得到包含单词重要性信息的权重

您需要保存TfidfVectorizer的实例,它将记住用于适合它的术语频率和词汇表。如果不使用fit_transform,而单独使用fittransform,可能会使事情更有意义:

vec = TfidfVectorizer(min_df=0.2, ngram_range=(1,3))
vec.fit(myDocuments)
features = vec.transform(myDocuments)
new_features = fec.transform(myNewDocuments)

我宁愿使用带有潜在语义索引的gensim作为原始语料库的包装器:bow->tfidf->lsi

tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=300)
corpus_lsi = lsi[corpus_tfidf] # create a double wrapper over the original corpus: bow->tfidf->fold-in-lsi

如果您需要继续培训:

new_tfidf = models.TfidfModel(corpus)
new_corpus_tfidf = new_tfidf[corpus]
lsi.add_documents(another_tfidf_corpus) # now LSI has been trained on corpus_tfidf + another_tfidf_corpus
lsi_vec = model[tfidf_vec] # convert some new document into the LSI space

其中语料库为词袋

你可以在他们的教程中读到:
LSI培训的独特之处在于,我们可以在任何时候继续"培训",只需提供更多的培训文件。这是通过对底层模型的增量更新来完成的,这个过程被称为在线培训。由于这个特性,输入文档流甚至可以是无限的——只要在新文档到达时不断地向LSI提供新文档,同时使用计算的转换模型作为只读的!

如果你喜欢sci-kit, gensim也可以兼容numpy

相关内容

  • 没有找到相关文章

最新更新