python - 逆文档频率公式

标签 python statistics nlp scikit-learn nltk

我在手动计算 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/

相关文章:

database - 您如何正确地对 ColdFusion 执行时间进行基准测试?

r - R 中的级别 - 根据新数据集正确设置

python - 如何使用无监督方法将句子分类到预定义的主题桶之一

python - 如何使用 numpy 以行和列形式将数据保存在 .csv 文件中

python - 如何提高HDF5读取数据的性能?

python - 从 Arduino C 到 Raspberry pi python - 线程内的 volatile 变量访问

python - 有人可以检测到此代码中的错误以使用 python 实现 dijkstra 算法吗?

python - 为什么模式总是1?

machine-learning - 命名实体识别和命名实体提取有什么区别?

python - 如何在 python 中编辑 .csv 以进行 NLP