【问题标题】:calculate IDF from scratch从头开始计算 IDF
【发布时间】:2021-02-08 22:30:36
【问题描述】:

我正在尝试从头开始计算 IDF 值,以便了解它在幕后的工作原理,但仍然无法获得预期的结果。

我有一组这样的文件

docs = {'d1' :'t3 t3 t3 t6 t6', 
        'd2' :'t1 t2 t3 t3 t6', 
        'd3' :'t3 t3 t4 t5', 
        'd4' :'t4 t5 t6 t6', 
        'd5' :'t1 t2 t3 t5'}

我应该计算一个名为 query_sum_idf 的值,它表示请求中发送的令牌的 IDF 总和值,在本例中为 ['t5', 't2']

这种情况下的期望值是1.4271 ± 1.0e-04,但是在开发微积分时,这是我所做的,我得到了不同的结果: math.log10(5 / float(3)) + math.log10(5 / float(2)) = 0.6197,其中5是文档总数,3是所有文档中t5的计数,最后2是所有文档中t2的计数。

正如你所看到的结果不同,所以我问我是否遗漏了什么。

【问题讨论】:

    标签: python python-3.x nlp tf-idf


    【解决方案1】:

    你有一个有趣的问题。

    我尝试自己完成这项任务,并在维基百科上查找了 IDF 的常见定义。我这样计算 IDF:

    import math
    def idf(docs, term):
        count = 0
        for key, doc in docs.items():
            if term in doc: count += 1
        return math.log(len(docs)/count)
    

    问题是,您使用的是 log10 而不是自然对数。 即使在 wiki 上,也没有定义使用哪个 log。我希望我能帮上忙。

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 2019-03-11
      • 2017-12-15
      • 1970-01-01
      • 2018-02-07
      • 2012-04-23
      • 2010-12-30
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多