计算文本文档间余弦相似度的一种常用方法是计算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\u master是一个包含所有文档的文本内容的数据框。
正如Chris Clark here所解释的,TfidfVectorizer产生归一化向量;因此线性核结果可用作余弦相似性。你知道吗
cosine_sim_content = linear_kernel(tfidf_matrix_content, tfidf_matrix_content)
这就是我的困惑所在。
实际上,两个向量之间的余弦相似性为:
InnerProduct(vec1,vec2) / (VectorSize(vec1) * VectorSize(vec2))
线性核计算内积,如here所述
所以问题是:
为什么我不把内积除以向量大小的积呢?
为什么标准化免除了我的这个要求?
如果我想计算ts-ss相似度,我还能用吗 标准化tf-idf矩阵和余弦值(由 仅线性内核)?
多亏了@timleathart的回答here,我终于知道了原因。你知道吗
归一化向量的震级为1,因此,是否显式除以震级并不重要。这两种方法在数学上都是等价的。你知道吗
tf-idf矢量器将单个行(矢量)标准化,使它们的长度都为1。由于余弦相似性只与角度有关,所以向量的大小差异无关紧要。你知道吗
使用ts-ss的主要原因是同时考虑了向量的角度和大小的差异。因此,尽管使用标准化向量没有什么错,但是,这超出了使用三角形相似性分量的全部目的。你知道吗
相关问题 更多 >
编程相关推荐