繁体   English   中英

使用 tf-idf 的文档之间的余弦相似度和 TS-SS 相似度 - Python

[英]Cosine Similarity and TS-SS similarity among documents using tf-idf - Python

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

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是一个dataframe 包含所有文档的文本内容。
正如 Chris Clark在这里所解释的, TfidfVectorizer生成归一化向量; 因此,linear_kernel 结果可以用作余弦相似度。

cosine_sim_content = linear_kernel(tfidf_matrix_content, tfidf_matrix_content)


这就是我的困惑所在。

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

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

线性 kernel 计算 InnerProduct,如此所述

线性核公式

所以问题是:

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

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

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

感谢@timleathart在这里的回答,我终于知道了原因。

归一化向量的幅度为 1,因此是否明确除以幅度并不重要。 无论哪种方式,它在数学上都是等价的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM