源自:
余弦計算相似度度量
相似度度量(similarity),即計算個體間的相似程度,相似度度量的值越小,說明個體間相似度越小,相似度的值越大說明個體差異越大。
對於多個不同的文字或者短文本對話訊息要來計算他們之間的相似度如何,乙個好的做法就是將這些文字中詞語,對映到向量空間,形成文字中文字和向量資料的對映關係,通過計算幾個或者多個不同的向量的差異的大小,來計算文字的相似度。下面介紹乙個詳細成熟的向量空間余弦相似度方法計算相似度
向量空間余弦相似度(cosine similarity)
余弦相似度用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小。余弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,這就叫"余弦相似性"。
上圖兩個向量a,b的夾角很小可以說a向量和b向量有很高的的相似性,極端情況下,a和b向量完全重合。如下圖:
如上圖二:可以認為a和b向量是相等的,也即a,b向量代表的文字是完全相似的,或者說是相等的。如果a和b向量夾角較大,或者反方向。如下圖
如上圖三: 兩個向量a,b的夾角很大可以說a向量和b向量有很底的的相似性,或者說a和b向量代表的文字基本不相似。那麼是否可以用兩個向量的夾角大小的函式值來計算個體的相似度呢?
向量空間余弦相似度理論就是基於上述來計算個體相似度的一種方法。下面做詳細的推理過程分析。
想到余弦公式,最基本計算方法就是初中的最簡單的計算公式,計算夾角
圖(4)
的余弦定值公式為:
但是這個是只適用於直角三角形的,而在非直角三角形中,餘弦定理的公式是
圖(5)
三角形中邊a和b的夾角 的余弦計算公式為:
公式(2)
在向量表示的三角形中,假設a向量是(x1, y1),b向量是(x2, y2),那麼可以將餘弦定理改寫成下面的形式:
圖(6)
向量a和向量b的夾角 的余弦計算如下
擴充套件,如果向量a和b不是二維而是n維,上述余弦的計算法仍然正確。假定a和b是兩個n維向量,a是 ,b是 ,則a與b的夾角 的余弦等於:
余弦值越接近1,就表明夾角越接近0度,也就是兩個向量越相似,夾角等於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, 0, ...])出發,指向不同的方向。兩條線段之間形成乙個夾角,如果夾角為0度,意味著方向相同、線段重合,這是表示兩個向量代表的文字完全相等;如果夾角為90度,意味著形成直角,方向完全不相似;如果夾角為180度,意味著方向正好相反。因此,我們可以通過夾角的大小,來判斷向量的相似程度。夾角越小,就代表越相似。
使用上面的公式(4)
計算兩個句子向量
句子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是基本相似的
由此,我們就得到了文字相似度計算的處理流程是:
(3)生成兩篇文章各自的詞頻向量;
(4)計算兩個向量的余弦相似度,值越大就表示越相似。
使用余弦相似度計算文字相似度
1.使用simhash計算文字相似度 2.使用余弦相似度計算文字相似度 3.使用編輯距離計算文字相似度 4.jaccard係數計算文字相似度 余弦相似性 兩個向量的夾角越接近於0,其餘弦值越接近於1,表面兩個向量越相似。向量夾角余弦計算 co s x 1 x2 y1 y2x1 2 y1 2 x2 2...
使用余弦相似度演算法計算文字相似度
在求相似度的時候經常會有以下一些方法,1.基於詞向量 2.基於字元的 3.基於概率統計的 4.基於詞嵌入模型的 在求文字相似度的時候經常會使用余弦相似度來求,下面來記錄一下余弦相似度的原理。余弦相似度量 計算個體間的相似度。相似度越小,距離越大。相似度越大,距離越小。假設有3個物品,item1,it...
文字相似度的若干計算方法及Python實現
最近工作中正好遇到文字相似度問題,嘗試了好幾種方法,在這裡稍微總結下吧,也讓自己理解更透徹些。import numpy as np def cos sim vector a,vector b vector a np.mat vector a vector b np.mat vector b num ...