class gensim.models.tfidfmodel.TfidfModel(corpus=None, id2word=None, dictionary=None, wlocal=<function identity at 0x114b0d758>, wglobal=<function df2idf at 0x1152e6488>, normalize=True)
基类:gensim.interfaces.TransformationABC
该类的对象,实现了从词-文档之间的协矩阵(integer)转换成一个locally/globally权重的TF_IDF矩阵(正,float型)。
主要的函数有:
- 1.构造函数:用于计算在训练语料中的所有term的逆文档数 idf。
- 2.[]方法,它将一个简单的count表示转换成tfidf空间.
调用:
1
2
3
>>> tfidf = TfidfModel(corpus)
>>> print(tfidf[some_doc])
>>> tfidf.save('/tmp/foo.tfidf_model')
模型的持久化,可以通过它的load/save方法来完成。
计算tf-idf通过一个本地组件(tf)和一个全局组件(idf)进行相乘,并将结果文档归一化到单位长度上。在一个包含D文档的语料中,对于在文档j中的未归一化的term i的权值计算公式如下:
1
weight_{i,j} = frequency_{i,j} * log_2(D / document_freq_{i})
或者,更进一步说:
1
weight_{i,j} = wlocal(frequency_{i,j}) * wglobal(document_freq_{i}, D)
因此,你可以插入自己定制实现的wlocal函数或者wglobal函数。
缺省的wlocal是指定的(其它选项有:math.sqrt,math.log1p,…),缺省的wglobal是 log_2(total_docs/doc_freq),通过上面的公式给定。
normalize: 表示最终被转换的vector是如何归一化的。normalize=True意味着设置成单位长度(缺省方式);若设为False,意味着不进行归一化。你可以将normalize设置成你自己实现的函数,并接受和返回一个稀疏矩阵。
如果指定了dictionary,它必须是一个corpora.Dictionary对象,并且它将直接用来构建 idf映射关系(如果指定,那么将忽略corpus)
initialize(corpus)
1
计算逆文档权值,它可以被用来修改term的文档频率
classmethod load(fname, mmap=None)
1
2
3
从文件中加载一个之前保存的对象。
同其它。。。
save(fname, separately=None, sep_limit=10485760, ignore=frozenset([]))
1
2
3
将对象保存到文件中.
同其它。。。
gensim.models.tfidfmodel.df2idf(docfreq, totaldocs, log_base=2.0, add=0.0)
1
2
3
计算缺省的逆文档频率,其文档频率为doc_freq:
idf = add + log(totaldocs / doc_freq)
gensim.models.tfidfmodel.precompute_idfs(wglobal, dfs, total_docs)
1
为所有term进行预计算idf。