【问题标题】:Tf-idf calculation using gensim使用 gensim 计算 Tf-idf
【发布时间】:2017-11-14 22:11:52
【问题描述】:

我有一个来自 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

但我没有得到合适的答案

【问题讨论】:

  • 你的语料库是什么?
  • @Mahmood Kohansal -- 字典:'{u'media': 0, u'technolog': 3, u'accept': 4, u'inform': 2, u'model': 5、u'select': 1}' 和语料库:' [[(0, 1), (1, 1)], [(2, 1), (3, 1), (4, 1)], [ (0, 1), (1, 1), (5, 1)], [(2, 1), (3, 1), (4, 1), (5, 1)], [(3, 1 ), (4, 1)], [(0, 2)]] '

标签: python tf-idf gensim


【解决方案1】:

您提到的结果之间存在差异的原因是论文中有很多计算TF-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) 的任何函数。

通过将局部分量(词频)与 一个全局分量(逆文档频率),并将 生成的文档到单位长度。非归一化权重的公式 D 文档语料库中文档 j 中的术语 i:

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 和 wglobal 函数。

wlocal 的默认值是标识(其他选项:math.sqrt、math.log1p、 ...) 并且 wglobal 的默认值为 log_2(total_docs / doc_freq),给出 上面的公式。

现在如果你想得到准确的论文结果,你必须知道它使用什么函数来计算 TF-IDF 矩阵。

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

【讨论】:

  • 这个答案对您有帮助吗?
  • 感谢您的回答。我之前已经猜到这是因为算法,但我尝试了 3 或 4 种不同的算法,但我无法得到提到的答案......对我来说奇怪的是,使用任何算法 tf-idf 都不应该完全导致文本聚类的不同最终答案!但是每次我更改 tf-idf 算法时,我都会得到不同的集群! (我用SVD提取因子)
  • 我认为答案对 tf-idf 方法的依赖性很明显,正如我在回答中所说的那样。无论如何,如果你得到正确的答案,你可以接受。
  • 你是对的。但我认为 TF-IDF 加权只是提高权重的一种辅助方法,所以它不应该影响最终答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2018-03-21
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2014-04-21
相关资源
最近更新 更多