我在手动计算 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 或类似的东西。
关于python - 逆文档频率公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32279651/