Mark Chang's Blog

Machine Learning, Deep Learning and Python

Neural Probabilistic Language Model

Introduction

傳統的語言模型 Ngram ,只考慮一個句子中的前面幾個字,來預測下個字是什麼。

當使用較長的 Ngram 的時候,則在測試資料中,找到和訓練資料相同的機率,就會大幅降低,甚至使機率為0,此種現象稱為 curse of dimensionality 。這類問題,傳統上可用 Smoothing, InterpolationBackoff來處理。

另一種對付 curse of dimensionality 的方法,可以用 Distributional Semantics 的概念,即把詞彙的語意用向量來表示。在訓練資料中,根據這個詞和鄰近周圍的詞的關係,計算出向量中各個維度的值,得出來的值即可表示這個詞的語意。例如,假設在訓練資料中出現 The cat is walking in the bedroomA dog was running in a room 這兩個句子,計算出 dogcat 語意向量中的詞,可得出這兩個詞在語意上是相近的。

所謂的 Neural Probabilistic Language Model ,即是用類神經網路,從語料庫中計算出各個詞彙的語意向量值。

Neural Probabilistic Language Model

給定訓練資料為 一連串的字,每個字都可包含於詞庫 中,即 ,然後,用此資料訓練出語言模型:

其中, 為,給定第 的條件下,出現 的機率,為了簡化計算,通常只考慮 前面 個字,故語言模型的函數為

可用以下兩部分來組成這個式子:

1.建立一個矩陣 其維度為 。此矩陣中的每一列,即代表詞庫 中的每個字所對應之維度為 的語意向量 ,例如, 的語意向量為

2.語料庫中句子的某個字,跟其前面 個字的語意向量 有關, 用函數 來表示字 與前面 個字的關係,公式如下:

用類神經網路,將 當成 input 當成 output ,若 時,求 的機率,如下圖:

Neural Network of Neural Probabilistic Language Model

其中,此類神經網路有個 tanh 函數的 hidden layerinput layerhidden layer 都連結到 output layer ,而 output layer 為一個 softmax 函數,將輸出做正規化,即是將所有 output 的值轉化後,其和為 1softmax 函數如下:

為此類神經網路在 softmax 做正規化之前,所算出的值:

其中, bias,而 為類神經網路從上一層傳到下一層時,各個值所佔的權重比例。此公式中各矩陣(或向量)維度如下圖所示:

在類神經網路中所對應的位置如下圖所示:

於此類神經網路中,可經由訓練而調整的參數為 ,如下:

的維度,可得出共有 個參數可調整。

Training the Neural Probabilistic Language Model

要訓練此類神經網路,即是對 做最佳化,並作 regularization 以防 overfitting ,即讓以下公式 為最佳解:

其中, 為訓練資料的總字數,而 作為 regularization 的用途。

可用 Stochastic Gradient Descent 的方式來求得最佳解,其中 learning rate

一般而言,類神經網路都是以 Backward Propogation 的方法來訓練,此方法分為兩個階段: Forward PhaseBackward Phase 。即是先計算從 input 透過中間的每一層把值傳遞到 output ,再從 output 往回傳遞 error 到中間的每一層,去更新層與層之間權重的參數 。

在此類神經網路的訓練過程中,運算的瓶頸在於從 hidden layeroutput layer 這段,需要計算 個參數,因此通常採取平行化的運算,將此步驟的運算分配到不同的 CPU

由於 output layer 的大小為 ,若總共有 CPU ,則可將 output layer 分成 個區塊,則每個 CPU 負責計算一個區塊,也就是 output unit ,而第 CPU 則從第 output unit 開始計算,詳細過程如下:

1.Forward Phase

(a) 根據 input 的詞彙,從矩陣 中取出相對應的語意向量:

(b) 將 input 的值傳遞到 hidden layer

(c) 將 hidden layer 的值傳到 output layer

這步驟要平行運算,即第 CPU 負責運算第 個區塊的 output layer

(d) 合併各個 CPU 所算出來的

(e) 將每個 正規化後取 log ,得出它們的

註:本文所寫的演算法省略掉 Regularization 的過程。

2.Backward Phase

(a) 從 output layer 執行 back propogation

在此過程中,第 CPU 負責計算 output layer 中第 個區塊的 gradient

(b) 把每個 CPU 算出來的 都加起來。

(c) 用 back propogation 更新 hidden layerinput layer 之間的參數:

(d) 更新 input layer 的語意向量值(從第一個字到第 個字):

Conclusion

Neural Probabilistic Language Model 是2003年期間所提出的語言模型,但受限於當時的電腦運算能力,這個模型的複雜度實在太高,難以實際應用。

近幾年來由於平行運算和 GPU 的發展,大幅提升了矩陣運算的效率,促成類神經網路與深度學習的發展。因此,建構在 Neural Probabilistic Language Model 的基礎之上,發展出了各種類神經網路相關的語言模型,一再突破了以往自然語言處理的瓶頸,包括近兩年來很熱門的 word2vec ,也是從它發展而來。

Reference

Yoshua Bengio, Réjean Ducharme, Pascal Vincent, and Christian Janvin. 2003. A neural probabilistic language model. J. Mach. Learn. Res. 3 (March 2003), 1137-1155.

Comments