【问题标题】:Cosine Similarity and TS-SS similarity among documents using tf-idf - Python使用 tf-idf 的文档之间的余弦相似度和 TS-SS 相似度 - Python
【发布时间】:2020-02-20 01:58:14
【问题描述】:

计算基于文本的文档之间的余弦相似度的常用方法是先计算 tf-idf,然后计算 tf-idf 矩阵的线性核。

TF-IDF 矩阵使用 TfidfVectorizer() 计算。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix_content = tfidf.fit_transform(article_master['stemmed_content'])

这里 article_master 是一个数据框,其中包含所有文档的文本内容。
正如 Chris Clark here 所解释的,TfidfVectorizer 会生成归一化向量;因此linear_kernel结果可以用作余弦相似度。

cosine_sim_content = linear_kernel(tfidf_matrix_content, tfidf_matrix_content)


这就是我的困惑所在。

两个向量之间的余弦相似度实际上是:

InnerProduct(vec1,vec2) / (VectorSize(vec1) * VectorSize(vec2))

线性内核按照here 所述计算InnerProduct

所以问题是:

  1. 为什么我不将内积与向量大小的乘积相除?

  2. 为什么规范化免除了我的这个要求?

  3. 现在如果我想计算 ts-ss 相似度,我还能用吗 归一化 tf-idf 矩阵余弦值(计算公式为 仅线性内核)?

【问题讨论】:

  • 您可以在data science stack exchangestats stack exchange 上提出这个问题,这是解决此类机器学习问题的好地方,这些问题比实际实施更具学术性!
  • 我还在 Stats Stack Exchange 中发布了这个问题;但仍然在那里等着。

标签: python machine-learning tf-idf cosine-similarity tfidfvectorizer


【解决方案1】:

感谢@timleathart的回答here我终于知道原因了。

归一化向量的大小为 1,因此是否明确除以大小无关紧要。无论哪种方式,它在数学上都是等价的。

tf-idf vectoriser 对各个行(向量)进行归一化,使它们的长度都为 1。由于余弦相似度只与角度有关,因此向量的大小差异无关紧要。

使用 ts-ss 的主要原因是同时考虑向量的角度和大小的差异。因此,即使使用归一化向量没有任何问题;但是,这超出了使用三角形相似度组件的全部目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 2017-02-03
    • 2014-02-25
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多