Python 基于gensim的Tf-idf计算
我有一个来自ISI论文的tf idf示例。我试图通过这个例子来验证我的代码。但是我从我的代码中得到了不同的结果。我不知道原因是什么 纸上术语文档矩阵:Python 基于gensim的Tf-idf计算,python,tf-idf,gensim,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
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
但是我没有得到合适的答案,正如你提到的,结果之间存在差异的原因是有很多方法可以计算TF-IDF。如果你读到它提到TF-IDF计算为 tfidft,d,d=tft,d。以色列国防军,D tft,d和idft,d都可以用不同的函数来计算,这些函数将改变TF_IDF值的最终结果。实际上,函数在不同的应用程序中的使用是不同的 可以计算tft、d和idft、d的任何函数,如其文档中所述 将局部分量项频率乘以 全局组件反转文档频率,并规范化 将生成的文档更改为单位长度。非标准重量公式 D文档语料库中文档j中的术语i: 权重{i,j}=频率{i,j}*log_2D/document_freq{i} 或者,更一般地说: 权重{i,j}=wlocalfrequency{i,j}*wglobaldocument{u Frequency{i},D 因此,您可以插入自己的自定义wlocal和wglobal函数 wlocal的默认值是其他选项:math.sqrt、math.log1p、, ... wglobal的默认值是log_2total_docs/doc_freq,给出 上面的公式 现在,如果你想得到精确的论文结果,你必须知道它用于计算TF-IDF矩阵的函数
还有一个很好的例子显示了如何使用自定义函数来计算TF-IDF。你的语料库是什么?@Mahmood Kohansal-字典:“{u'media':0,u'technolog':3,u'accept':4,u'inform':2,u'model':5,u'select':1}”,语料库:“[[0,1,1,1,3,1,4,4,1],[0,1,1,1,1,1,1],[3, 1, 4, 1], [0, 2]]“这个答案对你有帮助吗?谢谢你的回答。我之前猜到这是因为算法,但我尝试了3或4种不同的算法,但我没有得到提到的答案……对我来说奇怪的是,对tf idf使用任何算法都不应该导致文本聚类的完全不同的最终答案!但是每次我改变tf-idf算法,我都会得到不同的聚类!!我使用SVD来提取因子。我认为答案对tf-idf方法的依赖性很明显,正如我在回答中所说的。无论如何,如果答案正确,你可以接受。你是对的。但我认为tf-idf权重只是一种辅助方法,可以提高权重,所以它不会影响最终的结果发誓