![](/img/trans.png)
[英]String Matching Using TF-IDF, NGrams and Cosine Similarity in 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,如此處所述
所以問題是:
為什么我不將內積與向量大小的乘積相除?
為什么規范化免除了我的這個要求?
現在如果我想計算 ts-ss 相似度,我還能使用歸一化的 tf-idf 矩陣和余弦值(僅由線性 kernel 計算)嗎?
感謝@timleathart在這里的回答,我終於知道了原因。
歸一化向量的幅度為 1,因此是否明確除以幅度並不重要。 無論哪種方式,它在數學上都是等價的。
tf-idf 向量化器對各個行(向量)進行歸一化,使它們的長度都為 1。由於余弦相似度只與角度有關,因此向量的大小差異無關緊要。
使用 ts-ss 的主要原因是同時考慮向量的角度和大小的差異。 因此,即使使用歸一化向量沒有任何問題; 但是,這超出了使用三角形相似度組件的全部目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.