使用gensim进行Tf-idf计算

时间:2017-06-13 08:37:05

标签: python tf-idf gensim

我在ISI论文中有一个tf-idf示例。我试图通过这个例子来验证我的代码。但是我的代码得到了不同的结果。我不知道原因是什么!

纸张的术语 - 文件矩阵:

acceptance     [ 0 1 0 1 1 0
information      0 1 0 1 0 0
media            1 0 1 0 0 2
model            0 0 1 1 0 0
selection        1 0 1 0 0 0 
technology       0 1 0 1 1 0]

纸张的Tf-idf矩阵:

acceptance     [ 0   0.4   0   0.3   0.7  0
information      0   0.7   0   0.5   0    0
media            0.3  0   0.2   0    0    1
model            0    0   0.6   0.5  0    0
selection        0.9  0   0.6   0    0    0 
technology       0   0.4   0   0.3   0.7  0]

我的tf-idf矩阵:

acceptance     [ 0   0.4   0   0.3   0.7  0
information      0   0.7   0   0.5   0    0
media            0.5  0   0.4   0    0    1
model            0    0   0.6   0.5  0    0
selection        0.8  0   0.6   0    0    0 
technology       0   0.4   0   0.3   0.7  0]

我的代码:

tfidf = models.TfidfModel(corpus)   
corpus_tfidf=tfidf[corpus]

我尝试了另外这样的代码:

transformer = TfidfTransformer()
tfidf=transformer.fit_transform(counts).toarray() ##counts is term-document matrix

但我没有得到适当的答案

1 个答案:

答案 0 :(得分:1)

您提到的结果之间存在差异的原因是有很多方法可以在论文中计算TF-IDF。如果您阅读Wikipedia TF-IDF page,则提到TF-IDF计算为

  

tfidf(t,d,D)= tf(t,d)。 IDF(吨,d)

并且可以使用将改变TF_IDF值的最后结果的不同函数来计算tf(t,d)和idf(t,D)两者。实际上,在不同的应用程序中使用它们的功能是不同的。

Gensim TF-IDF Model可以计算tf(t,d)和idf(t,D)的任何函数,如其文档中所述。

  

通过将本地组件(术语频率)乘以来计算tf-idf   全局组件(逆文档频率),并将其标准化   结果文件到单位长度。非标准化权重的公式   在D文件的语料库中的文件j中的术语i:

     

#include <iostream> using namespace std; int main() { int i, j, f = 1; int t, a[100]; cin >> t;//enter test cases for (i = 0; i < t; i++) cin >> a[i];//enter all the cases one by one for (i = 0; i < t; i++) { for (j = 1; j <= a[i]; j++) f = f*j; cout << f;//displays each factorial } return 0; }

     

或者更一般地说:

     

weight_{i,j} = frequency_{i,j} * log_2(D / document_freq_{i})

     

所以你可以插入你自己的自定义wlocal和wglobal函数。

     

wlocal的默认值是identity(其他选项:math.sqrt,math.log1p,   ...)和wglobal的默认值是log_2(total_docs / doc_freq),给出   上面的公式。

现在,如果您想要准确到达纸张结果,您必须知道它用于计算TF-IDF矩阵的函数。

此外,Gensim google group中还有一个很好的示例,说明如何使用自定义函数计算TF-IDF。