1. 程式人生 > >語言概率模型和Word2Vec簡述

語言概率模型和Word2Vec簡述

1、 概率語言模型

一句話的概率公式:

根據一句話中的前文預測下一個詞:

根據鏈式概率法則:


根據馬爾科夫假設,當前詞只和前n個詞有關係:


2. 大名鼎鼎的 n-gram模型


為模型想要預測的下一個詞,為句子中的歷史詞語。

之後,我們利用極大似然估計優化模型:

說起來極大似然很高階,在實現上就是統計各種情況下出現的次數,然後再除以因子來歸一化。

n-gram的優點:

1. 常見的Bigram,Trgram 實現簡單,能夠很好地應用在一些經典場景中,例如檢查拼寫錯誤(極大似然句子概率)。

2. 常見搜尋引擎的輸入下拉幫助,就是通過n-gram來實現的。

3. 可解釋性強,易於理解和除錯。

4. 易於增量實現和並行訓練。

n-gram的缺點:

1. 需要解決資料稀疏性的問題(沒有出現過的詞語的概率會被置為0),一般有平滑演算法,back-off演算法,Interpolation演算法。

2. 由於是離散型變數,沒有辦法度量詞語之間相似度。

3. 模型巨大,與|V| 詞庫大小呈指數增長。

3. 困惑度(perplexity)


在資訊理論中,perplexity(困惑度)用來度量一個概率分佈或概率模型預測樣本的好壞程度。它也可以用來比較兩個概率分佈或概率模型。(譯者:應該是比較兩者在預測樣本上的優劣)低困惑度的概率分佈模型或概率模型能更好地預測樣本。

在語言概率模型中,我們用來檢測整個語料整體的困惑度。整體困惑度越低,說明模型效果越好。

4. 連續空間語言模型

我們設想把每個詞都在低維向量空間中,有唯一的連續向量對應。我們可以通過比較向量之間的距離來判斷詞之間的距離,解決了詞相似度度量的問題。(例如:Dot product,Cosine similarity,Eucliean distance,但是一般選擇Cosine相似度,因為詞向量的基本都是很小的浮點數,歐氏距離和點乘需要額外的操作)。

所有通過神經網路訓練得到詞向量的都有一個基本的假設:

words that occur in similar contexts tend to have similar meanings

(擁有相似上下文的詞語通常也會有相似的語義)

4.1 NNLM(Neural Network Language Model)

NNLM是一個簡單易懂的模型。首先是我們想要預測的詞,是預測詞的前n-1個詞。表示對應詞w的詞向量。

輸入層就是將n-1個詞向量首尾相連形成一個(n-1)*m的矩陣輸入隱藏層。

隱藏層為一個普通的神經網路隱藏層。之後,使用作為啟用函式。值域為(-1,1)

輸出層為共有|V|個節點。|V|為詞典內詞的數目。在進行線性變換之後,通過softmax歸一化。

整個網路前饋公式如下:

目標函式為極大化函式L:


整個網路結構如下:(綠色為W的值,如果W值為0,代表詞向量不直接進入最後輸出層運算)


優缺點:

1. 模型實現起來效果不錯,但是計算量很大。時間消耗在兩個大型矩陣的乘法,H和U。

2. 沒有解決一詞多義的情況。

3. 網路輸入視窗為固定值,不能更改。

4. 整個網路引數與詞庫大小|V| 呈線性增長,因為需要逐個對U對應的每個引數做更新。

後來作者本人又提出了 Hierarchical Neural Language(分層神經語言模型),簡單來說就是簡歷一棵樹,每個節點都做一個分類判斷,樹的葉子是每個詞。這樣做雖然減少了計算量,從|V|變到了log2|V|,但是分類樹模型構建需要專家知識,而且分層模型比不分層模型要差。

4.2 LBL(Log-Bilinear Language Model)

LBL的模型跟NNLM非常相似,它只是去掉了中間的tanh啟用函式,從非線性變成線性。之後又提出了各種辦法來優化訓練速度。例如分層模型(hierarchical softmax),noisecontrastive estimation (NCE)。


4.3 C&W(Collobert and Weston)

跟LBL比較起來,多了一個非線性層,跟NNLM比較起來多了一個非線性層。無話可說,有時候學術圈就是這麼喜歡排列組合。


4.4 增加語言特點的特徵到語言模型中

例如下圖:增加了單個詞的POS,先從離散的POS features 轉化成向量,再和原來的詞向量分別相乘不同的權重引數,最後融合到z中去,後面的步驟與前幾個模型相同。


4.5 增加WordNet相似性加訓練中


4.6 增加主題資訊在訓練中


4.7 接下去,大神又再接在勵,設計出了RNN語言模型


5. Word2Vec

好啦,以上都是之前的嘗試,其實跟Word2Vec一脈相承,前面已經出現了一層非線性一層線性(NNLM),兩層線性模型(LBL),一層非線性兩層線性(C&W)。而且出現了經典的優化方法,分層二叉樹優化,noise contrastive estimation (NCE) 優化。

5.1 CBOW

CBOW的思想很簡單,就是運用上下文來預測當前詞。目標函式為:


中間層只是一個簡單的累計取平均值為h。輸出層的優化有兩種:層次化softmax(霍夫曼樹)和負取樣(NEG)。


5.1 霍夫曼樹

霍夫曼樹是二叉樹,有正負兩條邊,每個詞語都唯一對應一個霍夫曼編碼(也就是路徑)。所以類似於二分類問題,只是我們由許多個二分類器構成的。我們要求的似然函式就為:


其中為路徑第i個節點所對應的編碼,為路徑第i個節點所對應的向量。

最後我們要優化的極大似然估計為:


下圖為霍夫曼樹作為輸出層的整體網路結構:


5.2 NEG優化

NEG的思想很樸素。以上方法都是直接將目標詞w和整個詞庫的所有詞都做了一次比較。我們能不能挑出一些詞語來作為負樣本,我們只需要將我們的目標詞從負樣本中識別出來就行了。

裡面介紹得非常基礎且詳細。

6. 總結

上面非常樸素地介紹了一遍語言模型的歷史和模型。現在最常用的就是谷歌開發的Word2Vec。也有許多工具可以幫助你訓練自己的詞向量。例如Gensim,Tensorflow中也對詞向量有專門的實現。