余弦相似度匹配

2022-07-07 15:06:15 字數 1510 閱讀 8379

今天的產品涉及到乙個相似度匹配演算法,上網查了這類演算法很多。跟研發討論,研發推薦使用余弦值相似度演算法。

余弦值相似度演算法是個什麼演算法?

余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。

余弦值越接近1,也就是兩個向量越相似,這就叫"余弦相似性",余弦值越接近0,也就是兩個向量越不相似,也就是這兩個字串越不相似。

是不是更加雲裡霧裡了?沒關係,我數學這麼差的人都能理解,相信你通過下面的例子也能理解的。

舉乙個例子來說明,用上述理論計算文字的相似性。為了簡單起見,先從句子著手。

句子a:這只皮靴號碼大了。那只號碼合適。

句子b:這只皮靴號碼不小,那只更合適。

怎樣計算上面兩句話的相似程度?

基本思路是:如果這兩句話的用詞越相似,它們的內容就應該越相似。因此,可以從詞頻入手,計算它們的相似程度。

第一步,分詞。

句子a:這只/皮靴/號碼/大了。那只/號碼/合適。

句子b:這只/皮靴/號碼/不/小,那只/更/合適。

第二步,計算詞頻。(也就是每個詞語出現的頻率)

句子a:這只1,皮靴1,號碼2,大了1。那只1,合適1,不0,小0,更0

句子b:這只1,皮靴1,號碼1,大了0。那只1,合適1,不1,小1,更1

第三步,寫出詞頻向量。

句子a:(1,1,2,1,1,1,0,0,0)

句子b:(1,1,1,0,1,1,1,1,1)

第四步:運用上面的公式:計算如下:

計算結果中夾角的余弦值為0.81非常接近於1,所以,上面的句子a和句子b是基本相似的。

上面這個例子是網上最常用的例子,理解了這個演算法,這個演算法就能包容所有,有沒有優缺點呢?

句子a:女

句子b: 女性

按照感官看,他們是乙個概念,應該是100%匹配。按照理性,分字詞的邏輯理解,應該是50%的匹配,我們用余弦值計算,得出結果70.7%,很相似但是達不到100%相似,因為電腦無法去理解語意。

這裡扯個題外話,發現英文中有很多輔助工作的外掛程式和軟體,如書寫郵件,幫助提高辦公用語的書寫規範等等,但是搜尋半天,沒有發現任何一款類似的中文工具,難道是因為中文的語義太複雜。

如何設定相似度大於等於80%,這條就不匹配了。

再看乙個例子:

句子a:太好了。

句子b:太好了太好了太好了。

如果按照余弦值計算,相似度才5%左右,完全不達標。

如果出現語義一樣的一句話,但是重疊數很多,可能計算會不達標,優點對單字分組的相似度匹配很高,忽略字的順序影響。

經過這個演算法的學習,更加認識到人類的思維真是乙個複雜的東西,沒有乙個演算法就能解決所有問題,如果ai成功,需要乙個很大很大的架構模型,還是任重道遠的。

參考:

余弦相似度

余弦距離 歐氏距離和傑卡德相似性度量的對比分析 1 余弦距離 余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理...

余弦相似度

基於餘弦定理計算相似度的應用很多,比如推薦系統中的協同過濾,計算文字的相似性等等。它用計算兩者空間向量的夾角來表示兩者的相似性。先看一下餘弦定理的公式 wu v u ivi u2i v 2i 上訴公式表示uv兩者的相似度,ui表示u在i緯度的數值。在使用者行為資料 使用者只有操作和未操作兩種狀態,也...

余弦相似度

余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。公式如下 python實現如下 import numpy as np from scipy.spatial.distance i...