【问题标题】:Is the idf for query same as idf for documents?查询的 idf 是否与文档的 idf 相同?
【发布时间】:2014-11-16 07:45:27
【问题描述】:

这是我的代码的一部分。

            idf=self.getInverseDocFre(word)  ##this idf is from the collection
            qi=count*idf
            di=self.docTermCount[docid][word]*idf
            similiarity+=qi*di
            similiarity/=self.docSize[docid]

这是维基百科 https://en.wikipedia.org/wiki/Vector_space_model#Example:_tf-idf_weights

这是一个来自网络的例子 http://www.site.uottawa.ca/~diana/csi4107/cosine_tf_idf_example.pdf

我的问题是,如果查询的 idf 与集合中的 idf 相同?

这就是为什么我必须将相似度乘以 idf 两次吗?

恐怕我对查询部分的idf概念有误。

【问题讨论】:

    标签: python text-processing tf-idf


    【解决方案1】:

    您必须在与集合文档相同的空间中表示您的查询,即单词->向量的转换对于文档和查询都必须相同,否则您会将苹果与橙子进行比较.一旦您提取了术语并从集合中计算了 IDF,此转换就固定了。一旦你有了这个,你就可以在这个表示中表示新的 word 文档。

    假设您的查询正是您的文档之一(例如 d2):

    d2 =    [0 0 0.584 1.584 0 0.584]  # new york post
    query = [0 0     1     1 0     1]  # new york post
    

    在这种情况下,您希望相似度为 1。如果您不将查询 TF 乘以相应的 IDF(您从集合中获得),就不会发生这种情况。只有计数(词频)的向量不会与每个分量乘以其对应的 idf 的向量平行(除非在所有 idf 都相等的特殊情况下)。这就是为什么您也必须乘以查询,因为文档已经乘以。

    【讨论】:

      猜你喜欢
      • 2012-08-20
      • 2015-05-07
      • 2011-06-16
      • 2017-03-31
      • 2017-07-27
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      相关资源
      最近更新 更多