使用余弦相似度計算文字相似度

2022-04-11 09:20:20 字數 4618 閱讀 7605

1. 使用simhash計算文字相似度

2. 使用余弦相似度計算文字相似度

3. 使用編輯距離計算文字相似度

4. jaccard係數計算文字相似度

余弦相似性:兩個向量的夾角越接近於0,其餘弦值越接近於1,表面兩個向量越相似。

向量夾角余弦計算:co

sα=x

1⋅x2

+y1⋅

y2x1

2+y1

2×x2

2+y2

2cos

α=x1

2​+y

12​​

×x22

​+y2

2​​x

1​⋅x

2​+y

1​⋅y

2​​文字相似度計算大致流程:

對於兩段文字a和b,對其進行分詞,得到兩個詞列表:a=

[t1,

t2,⋯

,ti]

a=[t

1​,t

2​,⋯

,ti​

]b=[

t1,t

2,⋯,

tj]b

=[t1

​,t2

​,⋯,

tj​]

對兩個詞列表進行合併去重,得到輸入樣本中的所有詞:t(

a,b)

=t(a

)+t(

b)=[

t1,t

2,⋯,

tk]t

(a,b

)=t(

a)+t

(b)=

[t1​

,t2​

,⋯,t

k​]計算特徵值:

選取詞頻作為特徵值。f(

a)=[

fa1,

fa2,

⋯,fa

k]f(

a)=[

fa1​

​,fa

2​​,

⋯,fa

k​​]

f(b)

=[fb

1,fb

1,⋯,

fbk]

f(b)

=[fb

1​​,

fb1​

​,⋯,

fbk​

​]向量化a⃗=

(fa1

,fa2

,⋯,f

ak)a

=(fa

1​​,

fa2​

​,⋯,

fak​

​)b⃗

=(fb

1,fb

2,⋯,

fbk)

b=(f

b1​​

,fb2

​​,⋯

,fbk

​​)計算余弦值:co

sα=∑

i=1k

fai⋅

fbi∑

i=1k

(fai

)2⋅∑

i=1k

(fbi

)2co

sα=∑

i=1k

​(fa

i​​)

2​⋅∑

i=1k

​(fb

i​​)

2​∑i

=1k​

fai​

​⋅fb

i​​​

樣本1( a ):今天天氣真好,適合去逛街,也適合曬太陽。

樣本2( b ):今天天氣不錯,適合去玩,也適合去曬太陽。

樣本3( c ):小明不喜歡和小紅玩,因為小明不喜歡太陽。

分詞:

a=

[今天, 天氣, 真好, 適合, 去, 逛街, 也, 適合, 曬太陽]

b=[今天, 天氣, 不錯, 適合, 去, 玩, 也, 適合, 去, 曬太陽]

c=[小明, 不, 喜歡, 和, 小, 紅, 玩, 因為, 小明, 不, 喜歡, 太陽]

合併並去重:

[今天, 天氣, 真好, 適合, 去, 逛街, 也, 曬太陽, 小明, 不, 喜歡, 和, 小, 紅, 玩, 因為, 太陽, 不錯]
特徵值(詞頻)計算:

f

(a)=

[今天:

1, 天氣:

1, 真好:

1, 適合:

2, 去:

1, 逛街:

1, 也:

1, 曬太陽:

1, 小明:

0, 不:

0, 喜歡:

0, 和:

0, 小:

0, 紅:

0, 玩:

0, 因為:

0, 太陽:

0, 不錯:0]

f(b)

=[今天:

1, 天氣:

1, 真好:

0, 適合:

2, 去:

2, 逛街:

0, 也:

1, 曬太陽:

1, 小明:

0, 不:

0, 喜歡:

0, 和:

0, 小:

0, 紅:

0, 玩:

1, 因為:

0, 太陽:

0, 不錯:1]

f(c)

=[今天:

1, 天氣:

1, 真好:

0, 適合:

2, 去:

2, 逛街:

0, 也:

1, 曬太陽:

1, 小明:

2, 不:

2, 喜歡:

2, 和:

1, 小:

1, 紅:

1, 玩:

2, 因為:

1, 太陽:

1, 不錯:

1]

向量化:a⃗

=(1,

1,1,

2,1,

1,1,

1,0,

0,0,

0,0,

0,0,

0,0,

0)a=

(1,1

,1,2

,1,1

,1,1

,0,0

,0,0

,0,0

,0,0

,0,0

)b⃗=

(1,1

,0,2

,2,0

,1,1

,0,0

,0,0

,0,0

,1,0

,0,1

)b=(

1,1,

0,2,

2,0,

1,1,

0,0,

0,0,

0,0,

1,0,

0,1)

c⃗=(

1,1,

0,2,

2,0,

1,1,

2,2,

2,1,

1,1,

2,1,

1,1)

c=(1

,1,0

,2,2

,0,1

,1,2

,2,2

,1,1

,1,2

,1,1

,1)計算余弦:co

sa⃗b

⃗=0.8058229640253802co

sab=

0.80

5822

9640

2538

02co

sa⃗c

⃗=0.0cos

ac=0

.0co

sb⃗c

⃗=0.06299407883487121co

sbc=

0.06

2994

0788

3487

121a

⃗b⃗a

b的夾角的余弦更趨近於1,所以相似度更高。

余弦相似度對於短文本的相似度計算還是比較準確的,但是對於大文字計算時,速度不如simhash快。

字元數simhash耗時/ms

余弦相似度耗時/ms

201.7

0.4200

4.21.8

2000

20.0

10.7

20000

24.1

34.0

200000

176.7

668.5

另外測試了10000個字元,步長100的線性資料,繪製結果如下:

當字元數量大約大於3000時,simhash的效率高於余弦相似度的相率。(中間有段時間突增是因為啟動了其他程式,占用了cpu導致的)

所以短文本使用余弦相似度來計算文字相似度還是比較適合的。而對於準確度來說,這兩種方法的準確度差不多,最主要的還是取決於特徵值或者的計算方式。通過簡單的詞頻計算作為特徵值,雖然簡單,但是僅僅只能通過詞語本身來衡量其特性,而沒有語境(即上下文)來更準確的確定乙個詞的特徵。因此也演變出了一些新的優化方法或者模型,例如td-idf等等,後面再陸續總結下。

all efforts, only for myself, no longer for others

使用余弦相似度演算法計算文字相似度

在求相似度的時候經常會有以下一些方法,1.基於詞向量 2.基於字元的 3.基於概率統計的 4.基於詞嵌入模型的 在求文字相似度的時候經常會使用余弦相似度來求,下面來記錄一下余弦相似度的原理。余弦相似度量 計算個體間的相似度。相似度越小,距離越大。相似度越大,距離越小。假設有3個物品,item1,it...

使用餘弦定理計算文字相似度

文字相似度 學過向量代數的人都知道,向量實際上是多維空間中有方向的線段。如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理計算向量的夾角了。餘弦定理對我們每個人都不陌生,它描述了三角形中任何乙個夾角和三個邊的關係,換句話說,給定三角形的三條邊...

計算文字相似度

計算文字相似度 推薦2收藏 簡單講解 文字相似度計算在資訊檢索 資料探勘 機器翻譯 文件複製檢測等領域有著廣泛的應用。比如 控制,我們假設你開發了乙個微博 並且已經把世界上罵人的句子都已經收錄進了資料庫,那麼當乙個使用者發微博時會先跟罵人句子的資料庫進行比較,如果符合裡面的句子就不讓使用者發出。通常...