日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

句子相似度--余弦相似度算法的实现

發(fā)布時(shí)間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 句子相似度--余弦相似度算法的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 1、余弦相似度

余弦距離,也稱為余弦相似度,是用向量空間中兩個(gè)向量夾角的余弦值作為衡量?jī)蓚€(gè)個(gè)體間差異的大小的度量。余弦值越接近1,就表明夾角越接近0度,也就是兩個(gè)向量越相似,這就叫"余弦相似性"。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

上圖兩個(gè)向量a,b的夾角很小可以說(shuō)a向量和b向量有很高的的相似性,極端情況下,a和b向量完全重合。如下圖:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

如上圖可以認(rèn)為a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者說(shuō)是相等的。如果a和b向量夾角較大,或者反方向,可以說(shuō)a向量和b向量有很低的的相似性,或者說(shuō)a和b向量代表的文本基本不相似。

向量a和向量b的夾角 的余弦計(jì)算如下:

? ? ??

擴(kuò)展,如果向量a和b不是二維而是n維,上述余弦的計(jì)算法仍然正確。假定a和b是兩個(gè)n維向量,a是? ,b是? ,則a與b的夾角 的余弦等于:

?

  • 2、如下舉例說(shuō)明利用余弦計(jì)算句子相似度

句子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ì)算詞頻。(下面程序用的jieba分詞工具所以結(jié)果不一樣但不影響計(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

第四步,寫(xiě)出詞頻向量。

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

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

第五步,利用上述公式計(jì)算

  • 3、python代碼實(shí)現(xiàn)
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon Jul 30 09:35:54 2018 4 5 @author: Administrator 6 """ 7 8 import jieba 9 import numpy as np 10 11 def get_word_vector(): 12 """ 13 w = np.ones((3,4)) 14 q = np.ones((3,4")) 15 print(w) 16 print(np.sum(w * q)) 17 """ 18 19 s1 = input("句子1:") 20 s2 = input("句子2:") 21 22 cut1 = jieba.cut(s1) 23 cut2 = jieba.cut(s2) 24 25 list_word1 = (','.join(cut1)).split(',') 26 list_word2 = (','.join(cut2)).split(',') 27 print(list_word1) 28 print(list_word2) 29 30 key_word = list(set(list_word1 + list_word2))#取并集 31 print(key_word) 32 33 word_vector1 = np.zeros(len(key_word))#給定形狀和類型的用0填充的矩陣存儲(chǔ)向量 34 word_vector2 = np.zeros(len(key_word)) 35 36 for i in range(len(key_word)):#依次確定向量的每個(gè)位置的值 37 for j in range(len(list_word1)):#遍歷key_word中每個(gè)詞在句子中的出現(xiàn)次數(shù) 38 if key_word[i] == list_word1[j]: 39 word_vector1[i] += 1 40 for k in range(len(list_word2)): 41 if key_word[i] == list_word2[k]: 42 word_vector2[i] += 1 43 44 print(word_vector1)#輸出向量 45 print(word_vector2) 46 return word_vector1, word_vector2 47 48 def cosine(): 49 v1, v2 = get_word_vector() 50 return float(np.sum(v1 * v2))/(np.linalg.norm(v1) * np.linalg.norm(v2)) 51 52 print(cosine())
  • 4、運(yùn)行結(jié)果

轉(zhuǎn)載于:https://www.cnblogs.com/Jm-15/p/9406425.html

總結(jié)

以上是生活随笔為你收集整理的句子相似度--余弦相似度算法的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。