簡體   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