導航:首頁 > 計算方法 > 詞語相似度計算方法

詞語相似度計算方法

發布時間:2022-12-13 02:26:34

① 文本相似度 之餘弦夾角 度量演算法

相似度度量(Similarity),即計算個體間的相似程度,相似度度量的值越小,說明個體間相似度越小,相似度的值越大說明個體差異越大。

對於多個不同的文本或者短文本對話消息要來計算他們之間的相似度如何,一個好的做法就是將這些文本中詞語,映射到向量空間,形成文本中文字和向量數據的映射關系,通過計算幾個或者多個不同的向量的差異的大小,來計算文本的相似度。下面介紹一個詳細成熟的向量空間餘弦相似度方法計算相似度

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

上圖中:可以認為a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者說是相等的。如果a和b向量夾角較大,或者反方向。

如上圖三: 兩個向量a,b的夾角很大可以說a向量和b向量有很底的的相似性,或者說a和b向量代表的文本基本不相似。那麼是否可以用兩個向量的夾角大小的函數值來計算個體的相似度呢?

向量空間餘弦相似度理論就是基於上述來計算個體相似度的一種方法。下面做詳細的推理過程分析。

想到餘弦公式,最基本計算方法就是初中的最簡單的計算公式,計算夾角的餘弦定值公式為:

但是這個是只適用於直角三角形的,而在非直角三角形中,餘弦定理的公式是
三角形中邊a和b的夾角 的餘弦計算公式為:

在向量表示的三角形中,假設a向量是(x1, y1),b向量是(x2, y2),那麼可以將餘弦定理改寫成下面的形式:

擴展,如果向量a和b不是二維而是n維,上述餘弦的計演算法仍然正確。假定a和b是兩個n維向量,a是 ,b是 ,則a與b的夾角 的餘弦等於:

下面舉一個例子,來說明餘弦計算文本相似度

舉一個例子來說明,用上述理論計算文本的相似性。為了簡單起見,先從句子著手。

句子A

句子B

怎樣計算上面兩句話的相似程度?

基本思路是:如果這兩句話的用詞越相似,它們的內容就應該越相似。因此,可以從詞頻入手,計算它們的相似程度。

句子A

句子B

這只,皮靴,號碼,大了。那隻,合適,不,小,很

句子A

句子B

句子A

句子B

到這里,問題就變成了如何計算這兩個向量的相似程度。我們可以把它們想像成空間中的兩條線段,都是從原點([0, 0, ...])出發,指向不同的方向。兩條線段之間形成一個夾角,如果夾角為0度,意味著方向相同、線段重合,這是表示兩個向量代表的文本完全相等;如果夾角為90度,意味著形成直角,方向完全不相似;如果夾角為180度,意味著方向正好相反。因此,我們可以通過夾角的大小,來判斷向量的相似程度。夾角越小,就代表越相似。

使用上面的多維向量餘弦計算公式

計算兩個句子向量

句子A

和句子B

的向量餘弦值來確定兩個句子的相似度。

計算過程如下:

計算結果中夾角的餘弦值為0.81非常接近於1,所以,上面的句子A和句子B是基本相似的

由此,我們就得到了文本相似度計算的處理流程是:

② 文本挖掘: 詞語關聯挖掘之平行關系發現

那麼, 怎麼如果有條件概率了, 我們怎麼算聯合概率呢? 可以倒騰一下條件概率公式, 得到 P(a, b) = P(b) · P(a|b), 也就是說兩個事件ab共同發生的概率 = a發生的概率 x 已知a發生條件下b發生的概率;
於是, 我們得到了

信息熵 = 不確定性

note: 此處p(x)是x發生的概率.

注意觀察這個定義函數, 就可以發現, 因為p(x)<1, 所以如果p(x)值越小且x數目越多的話, 這個H(X)將增大.

因此, 很容易知道, 漢語的信息熵是比英語大不少的, 因為漢語文字數目大於英語文字數目, 且漢語長尾詞語非常多, 他們相對來說概率都比較小, 很容易拉高H的值.

聯合熵: H(X, Y) = - Σp(x, y) log(p(x, y)), 其實就是把p(x)替換成了p(x,y)代表聯合概率.

條件熵: 在一個隨機變數已知的時候, 另外一個變數的不確定性
H(Y|X) = - Σp(x, y) log(p(y|x))
鏈式規則: H(X, Y) = H(X) + H(Y|X)

互信息: I(X; Y) = Σp(x, y) log p(x, y)/p(x)p(y)
互信息的性質: I(X; Y) = H(X) - H(X|Y)
I指標其實就是表現的兩個實體之間的相關程度. 如果X和Y完全獨立, 那麼I(X; Y) = H(X)- H(X) = 0
舉例子: I(計算機軟體, 軟體) > I(計算機, 汽車)

what:
兩種關系,
聚合關系/平行關系: paradigmatic
組合關系/共同關系: syntagmatic

上下文中A能被B替換, 那這是聚合關系. //平行關系, 比如cat , dog
A和B能放在一起做搭配, 那麼這是組合關系 //共同關系, 互補 比如cat, eat

why?
應用: 信息檢索中的search suggestion, 主題圖譜entity map.

How?
詞語關聯, 對於平行關系詞語來說,他們往往有十分相似的context.

my cat eats fish on Saturday.
my dog eats meat on Monday.
平行關系: 按照常識, 上下文context相似度高的詞是平行關系.
組合關系: 組合關系是一種詞語的搭配關系. 按照常識, 這兩個詞會一起搭配使用. 如果共同出現的概率高, 而獨自出現的概率低, 那麼就是組合關系.

所以我們由此得出的初步結論:
對於平行關系的, 我們獲取每個詞語的context, 然後計算詞語間context的相似度, 相似度高的就是平行關系.
對於組合關系的, 同時出現在某個語段context(比如一句話或者一段話)中的概率高, 而兩個詞語獨自出現的概率比較低, 那麼這兩者就是組合關系.

有意思的是, 如果兩個詞語是平行關系的話, 那麼他們往往有著相同的組合關系詞語來搭配使用. 比如dog eats meat. cat eats meat.

那麼接下去, 我們首先注意到一個問題, 如何獲取每個詞語的context?

我們可以把context轉化為一個我們熟悉的概念 -- document, 這樣我們就可以利用以前學過的文檔相似度計算的很多方法了.
這里, 我們約定Context = pseudo doc = bag of words詞袋
這里詞袋的大小選擇起來有很多種方法
比如下面這個公式
Sim("cat","dog") = Sim(Left1("cat"),Left1("dog")) + Sim(Right1("cat"), Right1("dog")) + ... + Sim(Win8("cat"), Win8("dog"))
其中, Window8("cat") = {"my","his","big", "eats", "fish"}

我們將使用Vector Space Model. 非常常見, 往往用在文本分類, 情感分類上.
當我們定好了詞袋, 也就是我們的doc以後, 我們將會把它轉化為多維度空間中的一個向量.
這個空間有n個維度, 這個維度大小取決於文本庫corpus的總體獨特單詞數, 因此維度數目非常地大.
假設表示一個doc("cat") = {"eats": 5, "ate":3, "is":10 , ...}

doc("cat")可能被表示為如下:

表示成向量後, 我們的下一個問題是: 怎麼計算相似度?

求相似度往往使用餘弦定理: cos(a, b) = a · b / |a||b| ,

但是, 在我們真正開始算之前, 我們得先進行標准化(正規化), 否則各個維度上的向量長度不一, 會出現大數吃小數的現象. 要深刻理解餘弦定理是為了求解向量之間夾角的大小, 或者說a向量在b向量單位化後方向上投影的長度(值是0~1)
因此,
d1 = (x1, x2, ... xn), 其中xi = c(wi, d1)/|d1|, c = count, 換句話說, xi是x在d1中出現的概率

Sim(d1, d2) = d1 · d2 = x1y1 + ... + xnyn = Σ(1~n) xiyi 求解向量內積
如果Sim = cos = 1, 夾角為0°, 那麼就是完全的平行關系, 即同義詞

這個模型還存在的問題:
某些頻繁出現的詞仍然存在壓制其他詞影響力的可能.
存在大量的廢詞, 比如and, or, the 等等...
對空間的浪費, 這個維度數過高了(n如果在這里可能>=10k, 畢竟英語還是漢語的詞語都是非常多的)

為了解決上述簡單模型條件下存在的問題, 我們引入TF-IDF term weighting.

我們首先重新定義怎麼計算TermFrequency. 過去是出現一次我就+1, 所以在詞袋中出現10次, TF=10
現在, 我們決定壓制那些出現次數過多的詞, 因此考慮引入兩種樸素辦法, 0/1 bit法, 或者對數函數法.

此處, 請務必記得我們約定y: 處理後的TF變形值, x : C(wi, d1) 詞語出現頻次

TF transformation method:

第二種對數函數的方法已經比較好用了, 但是我們追求完美! 於是乎我們又整出了第三種更牛逼一點的TF計算方法, 它是BM25演算法的中對於TF部分的計算方法.

y = BM25(x) = (k+1)·x / (x+k), k是認為調整的參數, k是容忍參數. k越大, 對freq words越沒有任何調整. 求導後, 可以看到當k->∞, y->x.
k=0, 其實就是bit hot.
所以, BM25的TF計算完美實現了可以自由設定對高頻詞語維度容忍參數k.

IDF: IDF(word) = log[(M+1)/m] ,
其中m = total number of docs containing word, 是一個變數, 可以看到, m越大, IDF會相應變得越小.
M: total number of docs in collection, 是一個常數

造成效果是: 文檔出現頻率m越高的詞語word, 會相應有一個較低的IDF weight. 當一個詞語幾乎每篇文檔都出現的時候, 那麼 IDFweight會很接近 log(1) = 0. 而一個詞語出現得非常罕見, 比如unicorn, 那麼它的IDFweight會被對數函數限制增長速度, 而不至於變得過大.

我們約定word[i] = wi, document[1] = d1, i指的是第i個元素.
那麼, 現在我們整篇文章的對於平行關系發現的論述就歸於如下兩步:

第一步:

第二步:

再次強調, 現在 xi, yi來自BM25(wi, d1) / ΣBM25(wj, d1) , 即BM25's TF of wi / BM25's TF sum of all, 是∈[0, 1]的標准化量.

相似度的計算例子

End.

③ 自然語言處理方面的詞語相似度計算問題

語音相似,但是某各自的差異,換一個符號,都是會變另外一個意思的,所以說話謹慎。

④ 跪求~高手~~怎樣用c++計算詞語相似度~~C++的計算詞語相似度都有哪些方法

可以這樣來設計:
把有相似度的詞語都放在一個數組裡面作為數組的元素,如設a[n]={"電腦","微機",「計算機」……},檢索的時候通過循環比較,若發現有和檢索詞相同的詞,就輸出數組其他的元素。

⑤ 餘弦相似度計算

餘弦相似度,又稱為餘弦相似性,是通過計算兩個向量的夾角餘弦值來評估他們的相似度。餘弦相似度將向量根據坐標值,繪制到向量空間中,如最常見的二維空間。
餘弦相似度的計算用的很廣泛,在NLP計算中,常用來計算詞語的相似度,因為詞,或者文本表示成分布式向量之後,可以很方便的計算他們的餘弦相似度來評估他們的語義相似性。

⑥ 請問下面相似度計算公式代表什麼意思,他是如何計算的,這個公式的具體解釋是什麼

這好像是機器學習的范疇。。比如兩個文本Ma,Mi所對應的特徵項所組成的向量為V(Ma),V(Mi)。
這里的特徵項指的是,文本中有意義的短語,詞語之類的。
上面這個公式就是計算兩個向量的夾角的餘弦。。如果餘弦值為1, 代表夾角為0,兩者相似度最高。若餘弦值為-1,代表兩者相似度最低。

具體解釋見這里。
http://..com/question/408123084.html

⑦ 如何進行相似度的計算,主要用什麼方式

如何計算句子的語義相似度,很容易想到的是向量空間模型(VSM)和編輯距離的方法,比如A:「我爸是李剛」,B:「我兒子是李剛」,利用VSM方法A(我,爸,是,李剛)B(我,兒子,是,李剛),計算兩個向量的夾角餘弦值,不贅述;編輯距離就更好說了將「爸」,「兒子」分別替換掉,D(A,B)= replace_cost;
這是兩種相當呆的方法,屬於baseline中的baseline,換兩個例子看一下就知道A:「樓房如何建造?」,B:「高爾夫球怎麼打?」,C:「房子怎麼蓋?」,如果用VSM算很明顯由於B,C中有共同的詞「怎麼」,所以BC相似度高於AC;編輯距離同理;
解決這種問題方法也不難,只要通過同義詞詞典對所有句子進行擴展,「如何」、「怎麼」,「樓房」、「房子」都是同義詞或者近義詞,擴展後再算vsm或者edit distance對這一問題即可正解.這種方法一定程度上解決了召回率低的問題,但是擴展後引入雜訊在所難免,尤其若原句中含有多義詞時.例如:「打醬油」、「打毛衣」.在漢字中有些單字詞表達了相當多的意義,在董振東先生的知網(hownet)中對這種類型漢字有很好的語義關系解釋,通過hownet中詞語到義元的樹狀結構可以對對詞語粒度的形似度進行度量.
問題到這里似乎得到了不錯的解答,但實際中遠遠不夠.VSM的方法把句子中的詞語看做相互獨立的特徵,忽略了句子序列關系、位置關系對句子語義的影響;Edit Distance考慮了句子中詞語順序關系,但是這種關系是機械的置換、移動、刪除、添加,實際中每個詞語表達了不同的信息量,同樣的詞語在不同詞語組合中包含的信息量或者說表達的語義信息大不相同.What about 句法分析,計算句法樹的相似度?這個比前兩種方法更靠譜些,因為句法樹很好的描述了詞語在句子中的地位.實際效果要待實驗證實.
對了,還有一種方法translation model,IBM在機器翻譯領域的一大創舉,需要有大量的語料庫進行訓練才能得到理想的翻譯結果.當然包括中間詞語對齊結果,如果能夠利用web資源建立一個高質量的語料庫對兩兩相似句對通過EM迭代詞語對齊,由詞語對齊生成句子相似度,這個.想想還是不錯的方法!

⑧ 文本相似度計算(一):距離方法

距離方法
1、文本的表示
1.1、VSM表示
1.2、詞向量表示
1.3、遷移方法
2、距離計算方法
2.1、歐氏距離 (L 2 范數)、曼哈頓距離 (L 1 范數)、 明氏距離
2.2、漢明距離
2.3、Jaccard相似系數、 Jaccard距離( 1-Jaccard相似系數)
2.4、餘弦距離
2.5、皮爾森相關系數
2.5、編輯距離

場景舉例:
1)計算 Query 和文檔的相關度、2)問答系統中計算問題和答案的相似度、3)廣告系統中計算 Query 和廣告詞的匹配程度、4)推薦系統中 要給某個用戶推薦某件物品,計算這件物品和這個用戶興趣的相似度
更多地,判斷兩個query表達的意思是否相同也可以看作屬於文本相似度的范疇。
相似度一定是指兩個東西(姑且分別用 P 和 Q 表示)的相似程度,而這兩個東西可以是任何形式的,例如文本、圖片、聲音等等。最終要計算相似度,那必須把這些東西抽象成數學形式,說白了 ,就是怎麼用數字把 這些 東西表示出來, 一 般會表示成向量或者矩陣。那如果表示成了向量, 計算相似度就可以使用大家在數學課上學的知識了。
這里希望可以比較清晰全面地介紹一下文本相似度的計算方法,目前來說,大致分為距離、hash、深度學習三種方法。

這些所謂的距離其實都是一些 固定 的公式而己,關鍵在於如何應用。實際應用中可以使用tf-idf、word2vec、LDA等方法實現相似度的距離計算。

很多相似度的第一步其實都是文本的表示問題,即把文本用數字的形式表示出來,這一步目前主要有 VSM(vector space model) ,和 詞向量表示 兩種方式。

這種方法其實靈活性較大,可以基於分詞,對於中文基於字元或n-grams的表示也有一定效果。
1) tf-idf/bow表示 :在給定文檔集合C和詞典D的條件下,將某篇文檔通過詞袋模型表示成一個個的詞,而後根據 TF-IDF 為每個詞計算出一個實數值;
由於詞典D的大小為M,因此 將這篇文檔轉化成一個M維向量 ,如果詞典中某個詞未出現在文檔中,則這個詞的在向量中對應的元素為0,若某個詞出現在文檔中,則這個詞在向量中 對應的元素值為這個詞的tf-idf值 。這樣,就把文檔表示成向量了,而這就是 向量空間模型(vector space model) 。從這里也可看出:向量空間模型並沒有catch住詞(term)與詞(term)之間的關系,它假設各個term之間是相互獨立的。
而有了文檔向量,就可以計算文檔之間的相似度了。
這種表示方法與詞典大小相關,往往會使文本的表示比較稀疏且高維,可以通過PCA緩解這一問題。
2) 主題模型表示 :實際上VSM可以作為一種文本表示的思想:把對文本內容的處理簡化為向量空間中的向量運算,並且它以空間上的相似度表達語義的相似度。
在這個角度,使用LDA,LSA等主題模型同樣可以完成文本的VSM表示:將文本表示為topic的向量空間。
這種方法維度可自定義(topic數),且不稀疏,但是可能存在文本對之間距離相似度分布空間密集的情況導致效果不佳。

這種方法一般直接將文本分詞後 將詞向量相加除以句子長度就可得到 。也可以使用如 smooth inverse frequency的加權方法 將詞向量加權:每個詞嵌入都由a/(a + p(w))進行加權,其中a的值經常被設置為0.01,而p(w)是詞語在語料中預計出現的頻率。
一般來說word2vec的詞向量方法 強於glove方法 ,而對於word2vec,cbow方法強於skip-gram(具體原因並不復雜,感興趣可以從訓練方法角度思考一下~)

更多地,上述文本表示方法其實會損失或無法捕捉到語義信息,通過bert、elmo等預訓練方法的表示更加靠譜,也可以用於無監督的文本相似度計算。

歐氏距離:

曼哈頓距離:

表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字元串進行異或運算,並統計結果為1的個數,那麼這個數就是漢明距離。

(1)雅各相似系數:
兩個集合A和B的交集元素在A,B的並集中所佔的比例,稱為兩個集合的傑卡德相似系數,用符號J(A,B)表示。

傑卡德相似系數是衡量兩個集合的相似度一種指標。
實際使用中,可以用去重與不去重兩種方式計算,更多地,可以轉換為交集的tf-idf值之和除以並集的tf-idf值之和

(2) 傑卡德距離
  與傑卡德相似系數相反的概念是傑卡德距離(Jaccard distance)。
傑卡德距離可用如下公式表示:


傑卡德距離用兩個集合中不同元素占所有元素的比例來衡量兩個集合的區分度。

夾角餘弦取值范圍為[-1,1]。夾角餘弦越大表示兩個向量的夾角越小,夾角餘弦越小表示兩向量的夾角越大。當兩個向量的方向重合時夾角餘弦取最大值1,當兩個向量的方向完全相反夾角餘弦取最小值-1。文本的相似度一般取絕對值。

皮爾森相關系數在推薦系統用的較多,它的公式如下 :

指兩個字元串,由一個變成另一個所需的最少的編輯次數,這個編 就包括替換、插入、刪除操作。

文本相似度的計算一般使用VSM/cbow+cos距離/歐式距離,或jaccard距離

Dice 系數可以計算兩個字元串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。

https://blog.csdn.net/weixin_43526820/article/details/89883640?spm=1001.2014.3001.5501

⑨ 語義相似度

一、語義相似度的簡介

       在很多情況下,直接計算詞語之間的相似度非常的困哪,一般情況下,先計算詞語之間的距離,再轉換為相似度。

        語義之間的距離,通常有兩種計算方式,一種是通過大量的語料庫進行統計,一種是根據某種本體或分類關系。

        利用大規模的語料庫進行統計,這種基於統計的方法主要將上下文信息的概率分布作為詞彙語義相似度的參照依據。基於統計的詞語語義相似度計算方法是一種經驗主義方法,它把詞語相似度的研究建立在可觀察的語言事實上。它是建立在兩個詞語語義相似當且僅當它們處於相似的上下文環境中的這一假設的基礎上。它利用大規模語料庫,將詞語的上下文信息作為語義相似度計算的參照依據。基於統計的定量分析方法能夠對詞彙間的語義相似性進行比較精確和有效的度量,但是這種方法比較依賴於訓練所用的語料庫,計算量大,計算方法復雜,另外,受數據稀疏和數據雜訊的干擾較大,有時會出現明顯的錯誤。

    根據本體或分類關系計算詞語語義距離的方法,一般是利用一部同義詞詞典。一般同義詞詞典都是將所有的片語織在一棵或幾棵樹狀的層次結構中。在一棵樹狀圖中,任何結點之間有且只有一條路徑,於是這條路徑的長度就可以作為這兩個概念的語義距離的一種度量。有些研究者考慮的情況更復雜。除了節點件的路徑長度外,還考慮到了其它一些因素。如:概念層次樹的深度,概念層次樹的區域密度等等。基於本體或分類關系的計算方法比較簡單有效,無需用語料庫進行訓練,也比較直觀,易於理解,但這種方法得到的結果受人的主觀意識影響較大,有時並不能准確反映客觀事實。

 二、基於WordNet語義相似度演算法研究

      WordNet中的概念是由概念間關系連接在一起的,每個概念都通過關系和其他概念相連,而整個WordNet則是由概念和關系組成的巨大的網路。最上面圖是WordNet中部分概念網路結構圖。

       下圖是以"car"和「bag」為主體的概念,得到is_a關系樹狀分類圖

閱讀全文

與詞語相似度計算方法相關的資料

熱點內容
水鍾的製作方法簡單 瀏覽:669
開啟手機功能的方法 瀏覽:322
如何了解消費者調查的方法 瀏覽:620
skf激光對中儀使用方法 瀏覽:170
哪裡有下奶的土方法 瀏覽:647
樁基檢測方法及數量表 瀏覽:453
怎麼清理微信在電腦里的緩存在哪裡設置方法 瀏覽:212
簡易汽車手機支架安裝方法 瀏覽:237
正壓送風口安裝方法 瀏覽:513
手機都有什麼使用方法 瀏覽:402
迷你世界如何製作扁皮的方法 瀏覽:330
鍛煉翹臀的方法 瀏覽:102
玉米澱粉檢測方法 瀏覽:986
鎧甲肌肉鍛煉方法 瀏覽:227
諾特蘭德b族食用方法 瀏覽:26
折紙可愛玫瑰花簡單方法 瀏覽:172
榨菜種植方法百度網盤 瀏覽:257
vivo手機變遙控器的方法 瀏覽:861
拆盲袋的方法和步驟順序 瀏覽:509
小孩的數學教學方法 瀏覽:368