神经网路语言模型(NNLM)的理解
用神經網絡來訓練語言模型的思想最早由百度 IDL (深度學習研究院)的徐偉提出[1],NNLM(Nerual Network Language Model)是這方面的一個經典模型,具體內容可參考 Bengio 2003年發表在JMLR上的論文。原文地址:
http://jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
與傳統的估算p(wt∣wt?(n?1),...wt?1)p(w_t|w_{t-(n-1)},...w_{t-1})p(wt?∣wt?(n?1)?,...wt?1?)不同,NNLM模型直接通過一個神經網絡結構對n元條件概率進行評估,NNLM模型的基本結構如下:
1. 模型原理
1.1 模型輸入:
首先從語料庫中搜集一系列長度為n的文本序列(wt,wt?1...wt?(n?1))(w_t,w_{t-1}...w_{t-(n-1)})(wt?,wt?1?...wt?(n?1)?),然后組成訓練集D,我這里的理解是語料庫就是我們在特定領域搜集的文本語料,同時還要有一個詞典。有了訓練數據和詞典,下面就來看下模型是怎樣進行前向傳播的。
這里先對單個語句序列進行計算,也可以說是單個樣本,比如:w1…wTw_1 …w_Tw1?…wT? 其中wt∈Vw_t∈Vwt?∈V,這里的VVV是所有單詞的集合(即詞典),ViV_iVi?表示詞典中的第 i 個單詞。
1.2 模型參數:
NNLM的目標是訓練如下模型:
f(wt,wt?1,...,wt?n+2,wt?n+1)=p(wt∣w1t?1)f(w_t,w_{t?1},...,w_{t?n+2},w_{t?n+1})=p(w_t|w_1^{t?1})f(wt?,wt?1?,...,wt?n+2?,wt?n+1?)=p(wt?∣w1t?1?)
其中wtw_twt?表示詞序列中第t個單詞,w1t?1w_1^{t?1}w1t?1?表示從第1個詞到第t個詞組成的子序列。模型需要滿足的約束條件是:
- f(wt,wt?1,...,wt?n+2,wt?n+1)>0f(w_t,w_{t?1},...,w_{t?n+2},w_{t?n+1})>0f(wt?,wt?1?,...,wt?n+2?,wt?n+1?)>0
- ∑i∣V∣f(wt,wt?1,...,wt?n+2,wt?n+1)=1\sum ^{|V|}_i f(w_t,w_{t?1},...,w_{t?n+2},w_{t?n+1})=1∑i∣V∣?f(wt?,wt?1?,...,wt?n+2?,wt?n+1?)=1
上面模型的意思是當給定一段序列時,由其前面的(t-1)個詞預測第n個詞的概率。
限制條件一:即是通過網絡得到的每個概率值都要大于0。
而對于第二個限制條件:因為我們的神經網絡模型最終得到的輸出是針對每t-1個詞的輸入來預測下一個,也即是第t個詞是什么。因此模型的實際輸出是一個向量,該向量的每一個分量依次對應下一個詞為詞典中某個詞的概率。所以|v|維的概率值中必定有一個最大的概率,而其他的概率較小。
上面是模型的輸入和輸出,下面說下前向傳播的過程:該模型可分為特征映射和計算條件概率分布兩部分
特征映射:通過映射矩陣 C∈R∣V∣×mC \in R^{|V|×m}C∈R∣V∣×m將輸入的每個詞映射為一個特征向量,C(i)∈RmC(i) \in R^mC(i)∈Rm表示詞典中第 i 個詞對應的特征向量,其中 m 表示特征向量的維度。這里的映射可以是one-hot。然后將通過特征映射得到C(wt?n+1),...,C(wt?1)C(w_{t?n+1}),...,C(w_{t?1})C(wt?n+1?),...,C(wt?1?)合并成一個 (n?1)m(n?1)m(n?1)m維的向量(C(wt?n+1),...,C(wt?1))(C(w_{t?n+1}),...,C(w_{t?1}))(C(wt?n+1?),...,C(wt?1?)),因為每一個詞是m維的,總共有n-1個詞,所以總共有(n?1)m(n?1)m(n?1)m維。
也可以說是:一個從詞匯表V到實數向量空間的映射C。通過這個映射得到每個單詞的向量表示。
計算條件概率分布:通過一個函數 g(g是前饋或遞歸神經網絡)將輸入的詞向量序列(C(wt?n+1),...,C(wt?1))(C(w_{t?n+1}),...,C(w_{t?1}))(C(wt?n+1?),...,C(wt?1?))轉化為一個概率分布 y∈R∣V∣y∈R^{|V|}y∈R∣V∣,所以這里的輸出是|v|維的,和詞典的維度是相同的。y中第 i 位表示詞序列中第 n 個詞是 Vi的概率,即:f(i,wt?1,...,wt?n+2,wt?n+1)=g(i,C(wt?n+1),...,C(wt?1))f(i,w_{t?1},...,w_{t?n+2},w_{t?n+1})=g(i,C(w_{t?n+1}),...,C(w_{t?1}))f(i,wt?1?,...,wt?n+2?,wt?n+1?)=g(i,C(wt?n+1?),...,C(wt?1?))
下面詳細介紹下神經網絡的結構,網絡輸出層采用的是softmax函數,如下式所示:
p(wt∣wt?1,...,wt?n+2,wt?n+1)=eywt∑ieyip(w_t|w_{t?1},...,w_{t?n+2},w_{t?n+1})=\frac{e^{y_{w_t}}}{∑_ie^{y_i}}p(wt?∣wt?1?,...,wt?n+2?,wt?n+1?)=∑i?eyi?eywt???
其中y=b+Wx+Utanh(d+Hx)y=b+Wx+Utanh(d+Hx)y=b+Wx+Utanh(d+Hx),模型的參數 θ=(b,d,W,U,H,C)\theta=(b,d,W,U,H,C)θ=(b,d,W,U,H,C)。x=(C(wt?n+1),...,C(wt?1))x=(C(w_{t?n+1}),...,C(w_{t?1}))x=(C(wt?n+1?),...,C(wt?1?))是神經網絡的輸入。W∈R∣V∣×(n?1)mW \in R^{|V|×(n?1)m}W∈R∣V∣×(n?1)m是可選參數,如果輸入層與輸出層沒有直接相連(如圖中綠色虛線所示),則可令W=0。
當輸入層和輸出層沒有直接相連時:
H∈Rh×(n?1)mH \in R^{h×(n?1)m}H∈Rh×(n?1)m是輸入層到隱含層的權重矩陣,其中h表示隱含層神經元的數目。此時隱藏層運算:h×(n?1)mh×(n?1)mh×(n?1)m和(n?1)m×1(n-1)m ×1(n?1)m×1 相乘得到h×1h×1h×1
U∈R∣V∣×hU∈R^{|V|×h}U∈R∣V∣×h是隱含層到輸出層的權重矩陣。d∈Rhd\in R^hd∈Rh和 b∈R∣V∣b \in R^{|V|}b∈R∣V∣分別是隱含層和輸出層的偏置參數。這時的輸出層運算:∣V∣×h|V|×h∣V∣×h和h×1h×1h×1相乘得到∣V∣×1|V|×1∣V∣×1。
以上就是前向傳播的過程。
1.3 模型訓練
模型的訓練目標是最大化以下似然函數:
L=1T∑tlogf(wt,wt?1,...,wt?n+2,wt?n+1;θ)+R(θ)L=\frac{1}{T} \sum_t logf(w_t,w_{t?1},...,w_{t?n+2},w_{t?n+1};θ)+R(θ)L=T1?∑t?logf(wt?,wt?1?,...,wt?n+2?,wt?n+1?;θ)+R(θ),其中θ\thetaθ為模型的所有參數,R(θ)R(\theta)R(θ)為正則化項。
使用梯度下降算法更新參數的過程如下:
θ←θ+λ?logp(wt∣wt?1,...,wt?n+2,wt?n+1)?θ\theta←\theta+ \lambda \frac{?logp(wt|wt?1,...,wt?n+2,wt?n+1)}{?θ}θ←θ+λ?θ?logp(wt∣wt?1,...,wt?n+2,wt?n+1)?,其中λ\lambdaλ為步長。
總結:由于NNLM模型使用了低維緊湊的詞向量對上文進行表示,這解決了詞袋模型帶來的數據稀疏、語義鴻溝等問題。顯然nnlm是一種更好的n元語言模型;另一方面在相似的上下文語境中,nnlm模型可以預測出相似的目標詞,而傳統模型無法做到這一點。
參考:
https://blog.csdn.net/u010089444/article/details/52624964?ref=myread
https://www.zhihu.com/question/32275069
總結
以上是生活随笔為你收集整理的神经网路语言模型(NNLM)的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免抵退税计算公式(免抵退税是什么意思)
- 下一篇: tensorflow的tf.transp