繁体   English   中英

使用Gensim进行TF-IDF计算

[英]Tf-idf calculation using 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

但是我没有得到适当的答案

您提到的结果之间存在差异的原因是,论文中有许多计算TF-IDF的方法。 如果您阅读Wikipedia TF-IDF页面,则提到TF-IDF的计算公式为

tfidf(t,d,D)= tf(t,d)。 idf(t,D)

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

Gensim TF-IDF模型可以计算文档中提到的tf(t,d)和idf(t,D)的任何函数。

通过将局部分量(项频率)与全局分量(逆文档频率)相乘,然后将结果文档归一化为单位长度,来计算tf-idf。 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谷歌小组中也有一个很好的例子,展示了如何使用自定义函数来计算TF-IDF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM