我在手动计算tf-idf值时遇到了麻烦。Python scikit总是输出不同于我预期的值。
我一直在读
idf(term) = log(# of docs/ # of docs with term)
如果是这样,如果没有相关文档,你不会得到一个除以零的错误吗?
为了解决这个问题,我读到你做了
log (# of docs / # of docs with term + 1 )
但是如果这个词出现在每个文档中,你得到log (n/n + 1)这是消极的,这对我来说真的没有意义。
我没有得到什么?
你描述的技巧实际上被称为拉普拉斯平滑(或加法,或加一平滑),并假设将相同的和添加到分数的另一部分-在你的情况下是分母,在原始情况下是分母。
换句话说,你应该在文档的总数上加1:
log (# of docs + 1 / # of docs with term + 1)
顺便说一句,通常使用较小的sum会更好,特别是在语料库较小的情况下:
log (# of docs + a / # of docs with term + a)
,
其中a = 0.001或类似的