TF-IDF是如何在python的gensim工具中实现的?

TF-IDF是如何在python的gensim工具中实现的?,python,tf-idf,latent-semantic-indexing,gensim,Python,Tf Idf,Latent Semantic Indexing,Gensim,从我从网上找到的文档中,我找到了用于确定术语频率的表达式,并将语料库中术语的逆文档频率权重计算出来 tf-idf(wt)=tf*log(| N |/d) 我正在执行gensim中提到的tf idf。 文档中给出的示例是 >>> doc_bow = [(0, 1), (1, 1)] >>> print tfidf[doc_bow] # step 2 -- use the model to transform vectors [(0, 0.70710678), (

从我从网上找到的文档中,我找到了用于确定术语频率的表达式,并将语料库中术语的逆文档频率权重计算出来

tf-idf(wt)=tf*log(| N |/d)

我正在执行gensim中提到的tf idf。 文档中给出的示例是

>>> doc_bow = [(0, 1), (1, 1)]
>>> print tfidf[doc_bow] # step 2 -- use the model to transform vectors
[(0, 0.70710678), (1, 0.70710678)] 
这显然不符合Tf IDF的标准实施。 这两种模式有什么不同

注:0.70710678是通常用于特征值计算的值2^(-1/2)。 那么特征值是如何进入TF-IDF模型的呢?

来自维基百科:

给定文档中的术语计数只是给定术语在该文档中出现的次数此计数通常是标准化的,以防止偏向较长的文档(无论该术语在文档中的实际重要性如何,其术语计数可能较高)

从第126-127行:

if self.normalize:
        vector = matutils.unitvec(vector)

在一袋单词(doc_bow)中有两个标记t0和t1。我们不知道t0和t1是出现在一个文档中还是出现在两个文档中。我们甚至不知道模型(tfidf)是否构建在包含令牌的文档之上。bag,doc_bow只是一个查询(测试数据)和根据训练数据构建的模型,训练数据可能包含也可能不包含t0或t1中的任何一个

让我们做一个假设。tfidf模型包含两个文档,d0和d1,d0包含t0,d1包含t1。因此,文档总数(N)为2,t0和t1的术语频率和文档频率变为1

Gensim使用log base 2计算IDF作为默认值(请参阅函数),来自doc_bow的转换tfidf向量类似于[(0,1),(0,1)]。(例如tfidf(t0)=1*logu 2(| 2 |/1)=1)

加上,我们需要考虑缺省执行的L2归一化,最终输出变为[(0, 1/2 ^(1/2)),(0, 1/2 ^(1/2))]。