有许多不同的方法可以计算tf和idf。我想知道gensim在其LSA模型中使用了哪个公式。我一直在浏览它的源代码lsimodel.py
,但对于我来说,创建文档术语矩阵的位置并不明显(可能是因为内存优化)。
在one LSA paper中,我读到文档术语矩阵的每个单元格是该文档中该单词的对数频率,除以该单词的熵:
tf(w, d) = log(1 + frequency(w, d))
idf(w, D) = 1 / (-Σ_D p(w) log p(w))
但是,这似乎是tf-idf非常不寻常的表述。更熟悉的tf-idf形式是:
tf(w, d) = frequency(w, d)
idf(w, D) = log(|D| / |{d ∈ D: w ∈ d}|)
我还注意到有一个question on how the TfIdfModel
itself is implemented in gensim。但是,我没有看到lsimodel.py
导入TfIdfModel
,因此只能假设lsimodel.py
有自己的tf-idf实现。
答案 0 :(得分:1)
据我了解,lsimodel.py
没有预先形成tf-idf编码步骤。您可以在gensim的API documentation中找到一些详细信息 - 这是一个专用的tf-idf模型,可用于编码后来可以输入LSA模型的文本。从tfidfmodel.py
source code看来,后面列出了您列出的两个tf-idf定义。