逆文档频率公式
Inverse Document Frequency Formula
我在手动计算 tf-idf 的值时遇到了问题。 Python scikit 不断吐出与我预期不同的值。
我一直在读
idf(term) = log(# of docs/ # of docs with term)
如果是这样,如果没有包含该术语的文档,您是否会得到被零除的错误?
为了解决这个问题,我听说你这样做
log (# of docs / # of docs with term + 1 )
但是如果每个文档中都有这个词,你会得到
日志 (n/n+1)
这是消极的,这对我来说真的没有意义。
我没有得到什么?
您描述的技巧实际上称为 Laplace smoothing(或加法,或加一平滑)并假设将相同的被加数添加到分数的另一部分 - 您的情况下的分母或分母在原来的情况下。
换句话说,您应该将文档总数加 1:
log (# of docs + 1 / # of docs with term + 1)
顺便说一句,通常使用较小的加数会更好,尤其是在小语料库的情况下:
log (# of docs + a / # of docs with term + a)
,
其中 a = 0.001 或类似的东西。
我在手动计算 tf-idf 的值时遇到了问题。 Python scikit 不断吐出与我预期不同的值。
我一直在读
idf(term) = log(# of docs/ # of docs with term)
如果是这样,如果没有包含该术语的文档,您是否会得到被零除的错误?
为了解决这个问题,我听说你这样做
log (# of docs / # of docs with term + 1 )
但是如果每个文档中都有这个词,你会得到 日志 (n/n+1) 这是消极的,这对我来说真的没有意义。
我没有得到什么?
您描述的技巧实际上称为 Laplace smoothing(或加法,或加一平滑)并假设将相同的被加数添加到分数的另一部分 - 您的情况下的分母或分母在原来的情况下。
换句话说,您应该将文档总数加 1:
log (# of docs + 1 / # of docs with term + 1)
顺便说一句,通常使用较小的加数会更好,尤其是在小语料库的情况下:
log (# of docs + a / # of docs with term + a)
,
其中 a = 0.001 或类似的东西。