【发布时间】: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
所以问题是:
为什么我不将内积与向量大小的乘积相除?
为什么规范化免除了我的这个要求?
现在如果我想计算 ts-ss 相似度,我还能用吗 归一化 tf-idf 矩阵和 余弦值(计算公式为 仅线性内核)?
【问题讨论】:
-
您可以在data science stack exchange 或stats stack exchange 上提出这个问题,这是解决此类机器学习问题的好地方,这些问题比实际实施更具学术性!
-
我还在 Stats Stack Exchange 中发布了这个问题;但仍然在那里等着。
标签: python machine-learning tf-idf cosine-similarity tfidfvectorizer