餘弦相似性簡介
餘弦距離,也稱為餘弦相似度,是用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小的度量。
向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理計算向量的夾角。
餘弦定理描述了三角形中任何一個夾角和三個邊的關係。給定三角形的三條邊,可以使用餘弦定理求出三角形各個角的角度。假定三角形的三條邊為a,b和c,對應的三個角為A,B和C,那麼角A的餘弦為:
如果將三角形的兩邊b和c看成是兩個向量,則上述公式等價於:
其中分母表示兩個向量b和c的長度,分子表示兩個向量的內積。
假如X和Y對應向量分別是:x1, x2, ..., x6400和y1, y2, ..., y6400 。那麼,它們之間的餘弦距離可以用它們之間夾角的餘弦值來表示:
餘弦值越接近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度,意味著方向正好相反。因此,我們可以通過夾角的大小,來判斷向量的相似程度。夾角越小,就代表越相似。
使用上面的公式,計算兩個句子向量:
句子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、C進行了打分(此處根據不喜歡到喜歡範圍在-5分到5分),根據它們的打分結果,我們可以得出三個人對三個物品的喜愛程度的向量(假設):
甲:(3,-1,-1)
乙:(5,1,-5)
丙:(-5,3,3)
那麼根據夾角餘弦公式,得出 A君B君夾角的餘弦是0.81 , A君C君夾角的餘弦是-0.97。 0度角(表示兩人完全一致)的餘弦是1, 180%角(表示兩人截然相反)的餘弦是-1。 從中可以看出,甲和乙的相似性挺高,那麼如果甲還喜歡另一個物品D,那麼可以就可以把它推薦給乙。
以上是三維的情況,如法炮製N維的情況都是一樣的。
以上是基於用戶來推薦的,同樣的,我們也可以基於內容來推薦,利用夾角餘弦來計算物品之間的相似性。如果甲購對一個物品打出高分,那麼就可以給他推薦與此物品餘弦相似性更接近1的物品。
當然實際的推薦系統絕不會如此簡單,可能是多種方法的融合,才會取得良好的效果,能夠適應不同的使用場景。
餘弦相似性
- DataCastle -