1. 程式人生 > >nlp中文字相似度計算問題

nlp中文字相似度計算問題

文章的目的:文字相似度計算一直是nlp中常見的問題,本文的目標是總結並對比文字相似度計算方法。當然文字的相似度計算會有進一步的應用,比如文字的分類、聚類等。
文章結構:本文先介紹最直接的字面距離相似度度量,而後介紹語義主題層面的度量,最後介紹目前一些新的相似度計算方法

一、字面距離相似度度量:這一種相似性度量的方法比較簡單,文字是由字片語成,重點是各種距離的度量方法。其中SimHash方法目前使用廣泛。
1,餘弦相似性:計算兩個文字向量表示的餘弦值。值越大越相似。
這裡寫圖片描述
問題是如何計算兩個文字的向量,這是另一個問題,後面會有一定的介紹。

2,簡單共有詞:通過計算兩篇文件共有的詞的總字元數

除以最長文件字元數來評估他們的相似度。

3,萊文斯坦距離(編輯距離):
編輯距離:是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數(許可的編輯操作:將一個字元替換成另一個字元,插入一個字元,刪除一個字元;編輯距離越小,兩個串的相似度越大;動態規劃計算編輯距離)
相似度:(1-編輯距離 / 兩者之間的最大長度;0-1之間)

4,Jaccard相似性係數:*Jaccard係數等於樣本集交集與樣本集合集的比值,即J = |A∩B| ÷ |A∪B|(交併比*)

5,歐幾里得距離:
距離計算:兩個文件所有的詞(不重複)在A文件的詞頻作為x,在B文件的作為y進行計算。距離(A,B)=平方根((x1-x2…)^2+(y1-y2….)^2)
相似度:

1 ÷ (1 + 歐幾里德距離)

6、曼哈頓距離:
距離計算: d(i,j)=|x1-x2…|+|y1-y2…|,同理xn和yn分別代表兩個文件所有的詞(不重複)在A和B的詞頻。
相似度: 1 ÷ (1 + 曼哈頓距離)

7,SimHash + 漢明距離: simhash是谷歌發明的演算法,可以將一個文件轉換成64位的位元組(可以簡單想象成一種hash表示文字策略);然後我們可以通過判斷兩個位元組的漢明距離就知道是否相似了;simhash更適用於較長的文字
文字的SimHash值計算過程:分詞:提取文件關鍵詞得到[word,weight]這個一個數組。(舉例 [美國,4]);hash:

用hash演算法將word轉為固定長度的二進位制值的字串[hash(word),weight]。(舉例 [100101,4]);加權: word的hash從左到右與權重相乘,如果為1則乘以1 ,如果是0則曾以-1。(舉例4,-4,-4,4,-4,4);合併:接著計算下個數,直到將所有分詞得出的詞計算完,然後將每個詞第三步得出的陣列中的每一個值相加。(舉例美國和51區,[4,-4,-4,4,-4,4]和[5 -5 5 -5 5 5]得到[9 -9 1 -1 1 9]);降維:對第四步得到的陣列中每一個值進行判斷,如果>0記為1,如果<0記為0。(舉例[101011])

漢明距離:兩個等長字串之間的漢明距離(Hamming distance)是兩個字串對應位置的不同字元的個數。這裡就是兩個SimHash值不同字元的個數。(漢明距離小於3的文字是相似的)

相似度: 1 - 漢明距離 / 最長關鍵詞陣列長度。

二、語義相似性:度量兩個短文字或者說更直接的兩個詞語的相似性時,直接通過字面距離是無法實現的,如:中國-北京,義大利-羅馬,這兩個短語之間的相似距離應該是類似的,因為都是首都與國家的關係。這部分主要介紹一些詞向量方法
1,基礎概念:
統計語言模型:利用貝葉斯理論計算句子出現的概率。句子:這裡寫圖片描述,那麼其聯合概率,就是句子的概率:這裡寫圖片描述,通過貝葉斯理論有:
這裡寫圖片描述

n-gram模型:一般的模型中這裡寫圖片描述引數很難計算,既然每個單詞依賴的單詞過多,從而造成了引數過多的問題,那麼我們就簡單點,假設每個單詞只與其前n-1個單詞有關,這便是n-1階Markov假設,也就是n-gram模型的基本思想。
這裡寫圖片描述
概率計算:通過詞的評率去估計

2,One-hot詞向量:用詞語的出現,向量化文字
One-hot表示:詞語是否出現的0-1向量;容易造成維度災難,並且還是不能刻畫語義的資訊。
BOW模型(詞袋):詞語出現的次數表示;檔表示過程中並沒有考慮關鍵詞的順序,而是僅僅將文件看成是一些關鍵詞出現的概率的集合,每個關鍵詞之間是相互獨立的。
TF-IDF模型:字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。詞頻 (term frequency, TF) 指的是某一個給定的詞語在該檔案中出現的次數。這個數字通常會被歸一化,以防止它偏向長的檔案。逆向檔案頻率 (inverse document frequency, IDF) 是一個詞語普遍重要性的度量。某一特定詞語的IDF,可以由總檔案數目除以包含該詞語之檔案的數目,再將得到的商取對數得到

3,主題模型:在長文字的篇章處理中,主題模型是一種經典的模型,經常會用在自然語言處理、推薦演算法等應用場景中。本節從LDA的演變過程對LDA進行闡述,然後就LDA在長文字相似性的判斷聚類上做簡要說明。(這個部分需要看其他文獻,簡單認為是文件詞彙的一層低維表示
LSA(潛在語義分析):一篇文件Document,詞語空間的一個詞頻向量(每個維度表示某一詞語term在該文件中出現的次數);LSA的基本思想,便是利用最基本的SVD奇異值分解,將高維語義空間對映到低維空間;但LSA的顯著問題便是隻考慮詞頻,並不區分同一詞語的不同含義。

PLSA模型: LSA基於最基本的SVD分解,但缺乏嚴謹的數理統計邏輯,於是Hofmann提出了PLSA,其中P便是Probabilistic,其基本的假設是每個文件所表示的詞頻空間向量w服從多項式分佈(Multinomial distribution);PLSA假設每篇文件的詞頻向量服從Categorical分佈,那麼對於整個訓練樣本的詞頻矩陣W則服從多項式分佈。PLSA利用了aspect model,引入了潛在變數z(即所謂主題),使其變成一個混合模型(mixture model)。

LDA模型:每個文件中詞的Topic分佈服從Multinomial分佈,其先驗選取共軛先驗即Dirichlet分佈;每個Topic下詞的分佈服從Multinomial分佈,其先驗也同樣選取共軛先驗即Dirichlet分佈。

4,Word2Vec模型:可以簡單的認為是用神經網路學習詞向量的方法;目前應用廣泛,有CBOW和Skip-gram模型。
具體介紹可以參考:word2vec原理(一) CBOW與Skip-Gram模型基礎

三、語義相似度計算——DSSM:(也是基於語義的度量方法)
DSSM [1](Deep Structured Semantic Models)的原理很簡單,通過搜尋引擎裡 Query 和 Title 的海量的點選曝光日誌,用 DNN 把 Query 和 Title 表達為低緯語義向量,並通過 cosine 距離來計算兩個語義向量的距離,最終訓練出語義相似度模型。該模型利用神經網路同時學習預測兩個句子的語義相似度,又學習獲得某句子的低緯語義向量表達
詳細介紹參考:深度學習解決NLP問題:語義相似度計算——DSSM

四、結論:本文目標是如何度量兩個文字之間的相似性,從字面和語義兩個角度對模型演算法進行整理歸納。先總結如下:對於長文字,海量資料的分析,選擇SimHash方法去操作,計算快;對於簡單的本文分類等問題,可以採用one-hot方法解決(進一步採用貝葉斯等方法);對於複雜的長文字分析,可以採用主題模型;在深度學習中,對詞語的表示可以採用Word2Vec模型;DSSM方法目前主要用於搜尋查詢問題。
參考文獻:
http://www.voidcn.com/article/p-acflyzfb-gb.html
http://www.voidcn.com/article/p-ypvgmpze-bn.html
https://blog.csdn.net/huanghanqian/article/details/78732392
https://blog.csdn.net/u013074302/article/details/76422551