over 3 years ago

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 ,若 時,求 的機率,如下圖:

其中,此類神經網路有個 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.

← 機器翻譯 -- IBM Model 1 類神經網路 -- Hierarchical Probabilistic Neural Network Language Model (Hierarchical Softmax) →
 
comments powered by Disqus