現在,我們介紹一下基於rnn語言模型。我們首先把詞依次輸入到迴圈神經網路中,每輸入乙個詞,迴圈神經網路就輸出截止到目前為止,下乙個最可能的詞。例如,當我們依次輸入:
我 昨天 上學 遲到 了神經網路的輸出如下圖所示:
其中,s和e是兩個特殊的詞,分別表示乙個序列的開始和結束。
我們知道,神經網路的輸入和輸出都是向量,為了讓語言模型能夠被神經網路處理,我們必須把詞表達為向量的形式,這樣神經網路才能處理它。
神經網路的輸入是詞,我們可以用下面的步驟對輸入進行向量化:
建立乙個包含所有詞的詞典,每個詞在詞典裡面有乙個唯一的編號。
任意乙個詞都可以用乙個n維的one-hot向量來表示。其中,n是詞典中包含的詞的個數。假設乙個詞在詞典中的編號是i,v是表示這個詞的向量,vj
是向量的第j個元素,則:
vj={
1j=i
0j≠i
(76)
上面這個公式的含義,可以用下面的圖來直觀的表示:
使用這種向量化方法,我們就得到了乙個高維、稀疏的向量(稀疏是指絕大部分元素的值都是0)。處理這樣的向量會導致我們的神經網路有很多的引數,帶來龐大的計算量。因此,往往會需要使用一些降維方法,將高維的稀疏向量轉變為低維的稠密向量。不過這個話題我們就不再這篇文章中討論了。
語言模型要求的輸出是下乙個最可能的詞,我們可以讓迴圈神經網路計算計算詞典中每個詞是下乙個詞的概率,這樣,概率最大的詞就是下乙個最可能的詞。因此,神經網路的輸出向量也是乙個n維向量,向量中的每個元素對應著詞典中相應的詞是下乙個詞的概率。如下圖所示:
前面提到,語言模型是對下乙個詞出現的概率進行建模。那麼,怎樣讓神經網路輸出概率呢?方法就是用softmax層作為神經網路的輸出層。
我們先來看一下softmax函式的定義: g
(zi)
=ezi
∑kez
k 這個公式看起來可能很暈,我們舉乙個例子。softmax層如下圖所示:
從上圖我們可以看到,softmax layer的輸入是乙個向量,輸出也是乙個向量,兩個向量的維度是一樣的(在這個例子裡面是4)。輸入向量x=[1 2 3 4]經過softmax層之後,經過上面的softmax函式計算,轉變為輸出向量y=[0.03 0.09 0.24 0.64]。計算過程為: y
1y2y
3y4=
ex1∑
kexk
=e1e
1+e2
+e3+
e4=0.03=e
2e1+
e2+e
3+e4
=0.09=e
3e1+
e2+e
3+e4
=0.24=e
4e1+
e2+e
3+e4
=0.64
(77)
(78)
(79)
(80)
(81)
(82)
(83)
(84)
(85)
我們來看看輸出向量y的特徵:
每一項為取值為0-1之間的正數;
所有項的總和是1。
我們不難發現,這些特徵和概率的特徵是一樣的,因此我們可以把它們看做是概率。對於語言模型來說,我們可以認為模型**下乙個詞是詞典中第乙個詞的概率是0.03,是詞典中第二個詞的概率是0.09,以此類推。
可以使用監督學習的方法對語言模型進行訓練,首先,需要準備訓練資料集。接下來,我們介紹怎樣把語料
我 昨天 上學 遲到 了轉換成語言模型的訓練資料集。
首先,我們獲取輸入-標籤對:
輸入標籤s我
我昨天昨天上學
上學遲到遲到了
了e然後,使用前面介紹過的向量化方法,對輸入x和標籤y進行向量化。這裡面有意思的是,對標籤y進行向量化,其結果也是乙個one-hot向量。例如,我們對標籤『我』進行向量化,得到的向量中,只有第2019個元素的值是1,其他位置的元素的值都是0。它的含義就是下乙個詞是『我』的概率是1,是其它詞的概率都是0。
最後,我們使用交叉熵誤差函式作為優化目標,對模型進行優化。
在實際工程中,我們可以使用大量的語料來對模型進行訓練,獲取訓練資料和訓練的方法都是相同的。
一般來說,當神經網路的輸出層是softmax層時,對應的誤差函式e通常選擇交叉熵誤差函式,其定義如下: l
(y,o
)=−1
n∑n∈
nynl
ogon
在上式中,n是訓練樣本的個數,向量yn
是樣本的標記,向量on
是網路的輸出。標記yn
是乙個one-hot向量,例如y1
=[1,
0,0,
0],如果網路的輸出o=
[0.03
,0.09
,0.24
,0.64
] ,那麼,交叉熵誤差是(假設只有乙個訓練樣本,即n=1): l
=−1n
∑n∈n
ynlo
gon=
−y1l
ogo1
=−(1
∗log
0.03+0
∗log
0.09+0
∗log
0.24+0
∗log
0.64)=
3.51
(86)
(87)
(88)
(89)
我們當然可以選擇其他函式作為我們的誤差函式,比如最小平方誤差函式(mse)。不過對概率進行建模時,選擇交叉熵誤差函式更make sense。
迴圈神經網路
原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...
迴圈神經網路
原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...
迴圈神經網路
特點 上一階段 時間步 的輸出作為輸入進入當前時間步。迴圈神經網路由迴圈神經原組成,迴圈神經元一般有兩個輸入,乙個是前階段的資訊,乙個是當前階段的資訊。同時產生乙個輸出,可以作為下一階段的輸入。迴圈神經網路採用多種模型。左上 每個時間步有乙個輸入,同時產生乙個輸出 右上 一串輸入,最後產生乙個輸出。...