2017-06-13 636 views
0

我有一个来自ISI论文的tf-idf示例。我试图通过这个例子验证我的代码。但是我从我的代码中得到了不同的结果。我不知道原因是什么!从纸使用gensim的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] 

我的代码:

从纸

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矩阵

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

我尝试另一个像这样的代码:

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

但是,正如你提到的是,有许多方法来计算TF我没有得到合适的答案

+0

什么是你的语料库? –

+0

@Mahmood Kohansal - 词典:'{u'media':0,u'technolog':3,u'accept':4,u'inform':2,u'model':5,u'select': (1,1)'和语料库:[[(0,1),(1,1)],[(2,1),(3,1),(4,1)],[(0,1),( (1,1,1),(5,1)],[(2,1),(3,1),(4,1),(5,1)],[(3,1),(4,1) ],[(0,2)]]' – mahshid

回答

0

结果之间的这种差异的原因-IDF在论文中。如果读Wikipedia TF-IDF page它提到,TF-IDF作为

TFIDF(T,d,d)= TF计算(T,d)。 idf(t,D)

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

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

计算TF-IDF乘以本地组件(词频)与 全局分量(逆文档频率),和归一化所得的 文件单元长度。公式中的文件Ĵ 学期我的非标准化重量d文档的文集:

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

,或者更一般地说:

weight_{i,j} = wlocal(frequency_{i,j}) * wglobal(document_freq_{i}, D)

这样你就可以在自己的自定义wlocal塞和全球功能。

默认为wlocal是身份(其他选项:math.sqrt,math.log1p, ...)和默认wglobal是log_2(total_docs/doc_freq),得到 上述公式。

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

另外在Gensim google group中有一个很好的例子,它显示了如何使用自定义函数来计算TF-IDF。

+0

您是否认为此答案有帮助? –

+0

谢谢你的回答。我之前猜到这是因为算法,但我尝试了3或4种不同的算法,并且我无法得到所提到的答案......对我来说这很奇怪的事情是,对tf-idf使用任何算法都不会导致完全文本聚类的最终答案不同!但每次我改变tf-idf算法,我都会得到不同的簇! (我使用SVD来提取因子) – mahshid

+0

我认为答案对tf-idf方法的依赖性很明显。无论如何,如果你认为正确,你可以接受答案。 –