Skip to content

Cosine Similarity (餘弦相似度) 的計算方法及程式碼

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 當中的函式來完成。可以看到,兩邊計算出的分數基本上是一致的。


References

Tags:

Leave a Reply