计算基于文本的文档之间的余弦相似度的常用方法是计算 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在这里所解释的,TfidfVectorizer生成归一化向量;因此,linear_kernel 结果可以用作余弦相似度。
cosine_sim_content = linear_kernel(tfidf_matrix_content, tfidf_matrix_content)
这就是我的困惑所在。
实际上,两个向量之间的余弦相似度为:
InnerProduct(vec1,vec2) / (VectorSize(vec1) * VectorSize(vec2))
线性内核计算 InnerProduct 如此处所述
所以问题是:
为什么我不将内积与向量大小的乘积相除?
为什么规范化免除了我的这个要求?
现在如果我想计算 ts-ss 相似度,我还能使用归一化的 tf-idf 矩阵和余弦值(仅由线性核计算)吗?
