gensim的LSA模型用的tf-idf的哪个公式?
Which formula of tf-idf does the LSA model of gensim use?
计算 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 实现。
据我了解,lsimodel.py
不会执行 tf-idf 编码步骤。您可能会在 gensim 的 API documentation - there's a dedicated tf-idf model, which can be employed to encode a text that can be later fed into the LSA model. From the tfidfmodel.py
source code 中找到一些详细信息,似乎遵循了您列出的 tf-idf 的两个定义中的后者。
计算 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 实现。
据我了解,lsimodel.py
不会执行 tf-idf 编码步骤。您可能会在 gensim 的 API documentation - there's a dedicated tf-idf model, which can be employed to encode a text that can be later fed into the LSA model. From the tfidfmodel.py
source code 中找到一些详细信息,似乎遵循了您列出的 tf-idf 的两个定义中的后者。