【问题标题】:TF-IDF Simple Use - NLTK/Scikit LearnTF-IDF 简单使用 - NLTK/Scikit 学习
【发布时间】:2012-08-05 21:34:39
【问题描述】:

好的,所以我有点困惑。然而,这应该是一个简单直接的问题。

在针对整个语料库计算文档的 TF-IDF 矩阵后,我得到的结果与此非常相似:

array([[ 0.85...,  0.  ...,  0.52...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 1.  ...,  0.  ...,  0.  ...],
       [ 0.55...,  0.83...,  0.  ...],
       [ 0.63...,  0.  ...,  0.77...]])

如何使用此结果来获取与搜索查询最相似的文档?基本上我正在尝试为维基百科重新创建一个搜索栏。基于搜索查询,我想从 Wikipedia 返回最相关的文章。在这种情况下,有 6 篇文章(行),搜索查询包含 3 个词(列)。

我是将列中的所有结果相加还是将所有行相加?较大的值是最相关的还是最低的值是最相关的?

【问题讨论】:

    标签: python nlp nltk scikit-learn tf-idf


    【解决方案1】:

    你熟悉cosine similarity吗?对于每篇文章(向量 A),计算其与查询(向量 B)的相似度。然后按降序排列并选择最高的结果。如果你愿意重构,gensim 库非常好。

    【讨论】:

    • 好吧,我实际上正在关注本教程:pyevolve.sourceforge.net/wordpress/?p=1589... 没有意义的是如何在原始文章和搜索查询之间使用 TF-IDF 向量。
    • 如果你使用 tf-idf 作为你的权重方案,你仍然想要标准化你的查询。您的矩阵包含三个术语,所有这些都在查询中表示;因此查询的原始频率向量是(1,1,1)。 sqrt((1^2)+(1^2)+(1^2)) = 1.73,1/1.73 = 0.57。所以你的查询向量是(0.57,0.57,0.57)。现在您可以将查询视为另一个文档。这个查询向量和其他一些文档向量的余弦相似度是它的点积。第一篇文章:((.57*.85)+(.57*0)+(.57*.52)) = 0.2964。对所有文章重复此操作,得分最高的获胜。
    • 所以我不必训练某种分类器?
    • 如果我正确理解了您的教程链接,现在不是。我建议回顾link 中的第 6.2 节,以首先了解 tf-idf 等,然后将其应用于机器学习主题。我不确定你是否同时学习信息检索和机器学习。
    • 手头没有我的代码。但说真的,看看那个 gensim 库。看教程和源代码;你可能会找到你要找的东西。
    猜你喜欢
    • 2018-08-05
    • 2015-06-16
    • 1970-01-01
    • 2015-02-11
    • 2020-01-18
    • 2018-10-21
    • 2016-12-20
    • 2020-06-19
    • 2014-02-02
    相关资源
    最近更新 更多