Last Updated on 2021-06-19 by Clay
Cosine Similarity (餘弦相似度) 是在計算文本相似度時相當常見的一種計算方法,原理也相當易懂,基本上就是計算『兩向量』之間的 Cosine 夾角。
夾角越大,代表兩個向量越是不像;
夾角越小,代表兩個向量越是相像。
像是以上這三組向量,要說道和 B 向量何者更像的話,我們通常都會選擇 C 向量而非 A 向量吧!
那至於 Cosine Similarity (餘弦相似度) 要怎麼計算呢?雖然最上方給出了公式,但接下來還是使用程式直接實現一次。
程式碼
要計算 Cosine Similarity,我們需要計算 A、B 兩向量的 dot 值、以及 A、B 兩向量的長度。
Python Script:
from sklearn.metrics.pairwise import cosine_similarity # Vectors vec_a = [1, 2, 3, 4, 5] vec_b = [1, 3, 5, 7, 9] # Dot and norm dot = sum(a*b for a, b in zip(vec_a, vec_b)) norm_a = sum(a*a for a in vec_a) ** 0.5 norm_b = sum(b*b for b in vec_b) ** 0.5 # Cosine similarity cos_sim = dot / (norm_a*norm_b) # Results print('My version:', cos_sim) print('Scikit-Learn:', cosine_similarity([vec_a], [vec_b]))
Output:
My version: 0.9972413740548081
Scikit-Learn: [[0.99724137]]
程式碼前面的部份都是對於上方 Cosine Similarity 公式的實現,最下面則是直接呼叫 Scikit-Learn 當中的函式來完成。可以看到,兩邊計算出的分數基本上是一致的。