簡(jiǎn)介:余弦相似度呻待,即兩物體之間的cos$值,值越大队腐,表示兩物體的相似度越大带污。
1、向量空間余弦相似度:即向量空間中兩夾角的余弦值香到。其值在0-1之間鱼冀,兩向量越接近,其夾角越小悠就,余弦值越接近于1千绪。
2、n維空間的余弦公式:
3梗脾、python中的工具:
numpy中提供了范數(shù)的計(jì)算工具:linalg.norm()荸型,假定X、Y均為列向量炸茧,
則: ? ?num = float(X.T * Y)#若為行向量則 X * Y.T
? ? ? ? ? ?denom = linalg.norm(X) * linalg.norm(Y)
? ? ? ? ? ?cos = num / denom#余弦值
? ? ? ? ? ?sim =0.5+0.5* cos#歸一化
? ? ? ? ? ?dist = linalg.norm(X - Y)
? ? ? ? ? sim =1.0/ (1.0+ dist)#歸一化
4瑞妇、例子:
***文本相似度****
sim?=1.0/?(1.0+?dist)#歸一化
句子A:這只皮靴號(hào)碼大了稿静。那只號(hào)碼合適
句子B:這只皮靴號(hào)碼不小,那只更合適
怎樣計(jì)算上面兩句話的相似程度辕狰?
基本思路是:如果這兩句話的用詞越相似改备,它們的內(nèi)容就應(yīng)該越相似。因此蔓倍,可以從詞頻入手悬钳,計(jì)算它們的相似程度。
第一步偶翅,分詞默勾。
句子A:這只/皮靴/號(hào)碼/大了。那只/號(hào)碼/合適聚谁。
句子B:這只/皮靴/號(hào)碼/不/小母剥,那只/更/合適。
第二步形导,列出所有的詞媳搪。
這只,皮靴骤宣,號(hào)碼,大了序愚。那只憔披,合適,不爸吮,小芬膝,很
第三步,計(jì)算詞頻形娇。
句子A:這只1锰霜,皮靴1,號(hào)碼2桐早,大了1癣缅。那只1,合適1哄酝,不0友存,小0,更0
句子B:這只1陶衅,皮靴1屡立,號(hào)碼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)
到這里惧盹,問題就變成了如何計(jì)算這兩個(gè)向量的相似程度。我們可以把它們想象成空間中的兩條線段瞪讼,都是從原點(diǎn)([0, 0, ...])出發(fā)钧椰,指向不同的方向。兩條線段之間形成一個(gè)夾角符欠,如果夾角為0度嫡霞,意味著方向相同、線段重合,這是表示兩個(gè)向量代表的文本完全相等希柿;如果夾角為90度诊沪,意味著形成直角,方向完全不相似曾撤;如果夾角為180度娄徊,意味著方向正好相反。因此盾戴,我們可以通過夾角的大小寄锐,來判斷向量的相似程度。夾角越小,就代表越相似橄仆。
使用上面的公式(4)
計(jì)算兩個(gè)句子向量
句子A:(1剩膘,1,2盆顾,1怠褐,1,1您宪,0奈懒,0,0)
和句子B:(1宪巨,1磷杏,1,0捏卓,1极祸,1,1怠晴,1遥金,1)的向量余弦值來確定兩個(gè)句子的相似度。
計(jì)算過程如下:
計(jì)算結(jié)果中夾角的余弦值為0.81非常接近于1蒜田,所以稿械,上面的句子A和句子B是基本相似的
由此,我們就得到了文本相似度計(jì)算的處理流程是:
(1)找出兩篇文章的關(guān)鍵詞冲粤;
(2)每篇文章各取出若干個(gè)關(guān)鍵詞美莫,合并成一個(gè)集合,計(jì)算每篇文章對(duì)于這個(gè)集合中的詞的詞頻
(3)生成兩篇文章各自的詞頻向量色解;
(4)計(jì)算兩個(gè)向量的余弦相似度,值越大就表示越相似餐茵。