語言模型
一段自然語言文本可以看作是一個離散時間序列,給定一個長度爲T T T 的詞的序列w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w 1 , w 2 , … , w T ,語言模型的目標就是評估該序列是否合理,即計算該序列的概率:
P ( w 1 , w 2 , … , w T ) .
P(w_1, w_2, \ldots, w_T).
P ( w 1 , w 2 , … , w T ) .
語言模型
假設序列w 1 , w 2 , … , w T w_1, w_2, \ldots, w_T w 1 , w 2 , … , w T 中的每個詞是依次生成的,我們有
例如,一段含有4個詞的文本序列的概率
P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 1 , w 2 , w 3 ) .
P(w_1, w_2, w_3, w_4) = P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_1, w_2, w_3).
P ( w 1 , w 2 , w 3 , w 4 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) P ( w 4 ∣ w 1 , w 2 , w 3 ) .
語言模型的參數就是詞的概率以及給定前幾個詞情況下的條件概率。設訓練數據集爲一個大型文本語料庫,如維基百科的所有條目,詞的概率可以通過該詞在訓練數據集中的相對詞頻來計算,例如,w 1 w_1 w 1 的概率可以計算爲:
其中n ( w 1 ) n(w_1) n ( w 1 ) 爲語料庫中以w 1 w_1 w 1 作爲第一個詞的文本的數量,n n n 爲語料庫中文本的總數量。
類似的,給定w 1 w_1 w 1 情況下,w 2 w_2 w 2 的條件概率可以計算爲:
其中n ( w 1 , w 2 ) n(w_1, w_2) n ( w 1 , w 2 ) 爲語料庫中以w 1 w_1 w 1 作爲第一個詞,w 2 w_2 w 2 作爲第二個詞的文本的數量。
n元語法
序列長度增加,計算和存儲多個詞共同出現的概率的複雜度會呈指數級增加。n n n 元語法通過馬爾可夫假設簡化模型,馬爾科夫假設是指一個詞的出現只與前面n n n 個詞相關,即n n n 階馬爾可夫鏈(Markov chain of order n n n ),如果n = 1 n=1 n = 1 ,那麼有P ( w 3 ∣ w 1 , w 2 ) = P ( w 3 ∣ w 2 ) P(w_3 \mid w_1, w_2) = P(w_3 \mid w_2) P ( w 3 ∣ w 1 , w 2 ) = P ( w 3 ∣ w 2 ) 。基於n − 1 n-1 n − 1 階馬爾可夫鏈,我們可以將語言模型改寫爲
P ( w 1 , w 2 , … , w T ) = ∏ t = 1 T P ( w t ∣ w t − ( n − 1 ) , … , w t − 1 ) .
P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_{t-(n-1)}, \ldots, w_{t-1}) .
P ( w 1 , w 2 , … , w T ) = t = 1 ∏ T P ( w t ∣ w t − ( n − 1 ) , … , w t − 1 ) .
以上也叫n n n 元語法(n n n -grams),它是基於n − 1 n - 1 n − 1 階馬爾可夫鏈的概率語言模型。例如,當n = 2 n=2 n = 2 時,含有4個詞的文本序列的概率就可以改寫爲:
循環神經網絡
本節介紹循環神經網絡,下圖展示瞭如何基於循環神經網絡實現語言模型。我們的目的是基於當前的輸入與過去的輸入序列,預測序列的下一個字符。循環神經網絡引入一個隱藏變量H H H ,用H t H_{t} H t 表示H H H 在時間步t t t 的值。H t H_{t} H t 的計算基於X t X_{t} X t 和H t − 1 H_{t-1} H t − 1 ,可以認爲H t H_{t} H t 記錄了到當前字符爲止的序列信息,利用H t H_{t} H t 對序列的下一個字符進行預測。
循環神經網絡的構造
我們先看循環神經網絡的具體構造。假設X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} X t ∈ R n × d 是時間步t t t 的小批量輸入,H t ∈ R n × h \boldsymbol{H}_t \in \mathbb{R}^{n \times h} H t ∈ R n × h 是該時間步的隱藏變量,則:
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) .
\boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h).
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) .
其中,W x h ∈ R d × h \boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h} W x h ∈ R d × h ,W h h ∈ R h × h \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h} W h h ∈ R h × h ,b h ∈ R 1 × h \boldsymbol{b}_{h} \in \mathbb{R}^{1 \times h} b h ∈ R 1 × h ,ϕ \phi ϕ 函數是非線性激活函數。由於引入了H t − 1 W h h \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} H t − 1 W h h ,H t H_{t} H t 能夠捕捉截至當前時間步的序列的歷史信息,就像是神經網絡當前時間步的狀態或記憶一樣。由於H t H_{t} H t 的計算基於H t − 1 H_{t-1} H t − 1 ,上式的計算是循環的,使用循環計算的網絡即循環神經網絡(recurrent neural network)。
在時間步t t t ,輸出層的輸出爲:
O t = H t W h q + b q .
\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q.
O t = H t W h q + b q .
其中W h q ∈ R h × q \boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q} W h q ∈ R h × q ,b q ∈ R 1 × q \boldsymbol{b}_q \in \mathbb{R}^{1 \times q} b q ∈ R 1 × q 。