【问题标题】:Understanding why two TF-IDF vectors are similar理解为什么两个 TF-IDF 向量相似
【发布时间】:2018-10-27 12:57:26
【问题描述】:

我想要一些关于理解 TF-IDF 向量结果的方法以及可能的替代方法的反馈。

现在,我有两个文本语料库。目标是找出每个语料库中的哪些文档最相似。

当我找到一个有趣的匹配时,我想知道为什么,所以我实现了一个名为why_match() 的简单函数,但我想帮助了解它是否是一种有效的方法。

它是这样工作的:

def why_match(doc_vector_a, doc_vector_b, sklearn_tfidfvectorizer):
    distance = abs(doc_vector_a - doc_vector_b)
    nearest_words = np.array((distance != 0) & (distance < 0.0015))
    vocab = np.array(vectorizer.get_feature_names())
    keywords = vocab[nearest_words]
    return keywords

这个想法应该是返回所有比某个阈值 (0.0015) 更接近的关键字,而不是 0(很可能是因为该词不在任一文档中)。

这是在 TF-IDF 中“解释”亲密度的有效方式吗?我的结果是不错的,但它似乎对非常通用的词赋予了很大的价值,这很不幸,但对我的任务很有说服力。

【问题讨论】:

    标签: text scikit-learn nlp


    【解决方案1】:

    这当然是解释向量相似性的一种方式。您的方法计算两个 TF-IDF 向量之间的曼哈顿距离(或 L1 距离)。就像欧几里得距离(或 L2 距离)一样,曼哈顿距离受其中一个向量中的“大”值的过度影响。因此,更常用的方法是使用余弦相似度来测量两个向量之间的角度

    使用余弦相似度的最小示例如下:

    from scipy.spatial.distance import cosine
    
    sim = 1 - cosine(doc_vector_a, doc_vector_b)
    

    1 - cosine(...) 是必需的,因为scipy 函数返回距离,而不是相似度

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 2017-07-27
      • 1970-01-01
      • 2012-11-20
      • 2018-01-28
      • 1970-01-01
      • 2017-03-31
      • 2017-09-04
      • 2017-02-03
      相关资源
      最近更新 更多