一、語言模型
1.1 什麼是語言模型(LM)
語言模型是指利用當前序列預測下一個可能出現的詞。
P(x(1),…,x(T))=P(x(1))×P(x(2)∣x(1))×⋯×P(x(T)∣x(T−1),…,x(1))=t=1∏TP(x(t)∣x(t−1),…,x(1))
輸入法的聯想功能就是這個原理
1.2 n-gram語言模型
訓練一個語言模型的一種簡單方法是n-gram, n-gram是指大小爲n滑動步長爲1的窗口框選出的單詞塊。包括:
- unigrams
- bigrams
- trigrams
- 4-grams
1.2.1 n-gram數學原理
假設:第t+1個詞x(t+1)由前n-1個詞決定:
由條件概率的定義:
可以通過直接統計這麼gram的頻數獲得這些n-gram和(n-1)-gram的概率。即:
P≈count(x(t),…,x(t−n+2))count(x(t+1),x(t),…,x(t−n+2))
1.2.2 n-gram缺點
以4-grams爲例:
- n-gram模型確實十分簡單,但是爲了簡化問題,丟掉上下文顯然是不合理的假設。
- 稀疏問題: 如果在測試集中出現了一個詞,這個詞在訓練集中沒有出現過
- 導致未登錄詞的概率爲0(解決方案:給每一個詞都初始化一個很小的概率,即平滑操作,從而將計數的稀疏矩陣轉換爲稠密矩陣)
- 導致分母爲零, 且包含這個未登錄詞的三元組計數都爲0(解決辦法:只看前兩個詞/前一個詞)。
- 存儲問題:計數需要存儲所有出現的n-gram, 複雜度可能爲n的指數量級。
此外,當n越大時,理論上預測效果越好,但稀疏問題會變得非常嚴峻。
1.3 爲什麼要研究語言建模
- 語言建模是衡量我們對自然語言理解的一項基本任務(benchmark task)
- 這是很多語言任務的子模塊之一,例如:
- 預測輸入
- 語音識別
- 手寫字符識別
- 拼寫/語法檢查
- 機器翻譯
- 自動摘要
- …
1.4 LM理解
LM是指一個用來預測下一個詞的系統,RNN不是LM,只是一種實現LM的方式。
二、神經網絡語言模型
2.1 基於窗口的語言模型
上一節課我們用到了這個模型
這個模型帶來以下提升:
仍然存在的問題:
- 固定的窗口太小
- 增大窗口就需要增大W
- 由於窗口再大都不爲過,那麼W也就可能無限增大
- 權重中每個部分只學到了窗口中某個位置的信息。
因此我們需要一個能夠處理任意長度的神經網絡結構。
2.2 RNN
注意下面這裏的y^實際上就是RNN隱藏層的狀態向量。
當t=0時,h0就是隱藏層初始狀態,t>0時,隱藏層的計算公式如下:
h(t)=σ(Whh(t−1)+Wee(t)+bh)(2.2.1)
y^(t)=softmax(Uh(t)+bU)
這裏的Wh類似馬爾科夫鏈中的轉移矩陣。
2.3 RNN優缺點
優點:
- 處理任意長度輸入序列
- 計算一個時間步可以利用前面多個時間步的信息
- 由於對每個時間步使用同一個權重,學習到的信息是對稱的
缺點:
2.4 如何訓練RNN模型
-
對於一個語料庫構成的一個文本序列x(1),⋯,x(T), 將其餵給RNN,對每個x(t), 都輸出一個y^(t)(一個n-class維向量)
-
損失函數是在每一個y^(t)處使用一個softmax函數將其轉換爲概率分佈,並用交叉熵計算其損失
J(t)(θ)=CE(y(t),y^(t))=−w∈V∑yw(t)logy^w(t)=−logy^xt+1(t)
-
將這T個交叉熵平均作爲整體損失:
J(θ)=T1t=1∑TJ(t)(θ)=T1t=1∑T−logy^xt+1(t)
-
老規矩,在整個數據集上面計算一次損失並更新代價太大,因此使用SGD,通常將語料中的一句話作爲一個序列,每次更新使用多句話構成一個batch.
2.5 RNN反向傳播
2.5.1 基本計算公式及其推導
如何計算J(t)(θ)對重複使用的權重矩陣Wh的偏導?先給出ppt的答案:
∂Wh∂J(t)=i=1∑t∂Wh∂J(t)∣∣∣∣∣(i)
來看看課堂上的推導講解,這裏要知道在每一個樣本的計算中,Wh=Wh∣(1)=⋯=Wh∣(T), 因爲訓練過程中每一個batch計算完纔會更新一次。
這個看着可能還是不太能理解,我們從數學公式上下手也很簡單。根據公式2.2.1:
h(t)=σ(Whh(t−1)+Wee(t)+bh)
令u=Whh(t−1)+Wee(t)+bh, 由於h(t−1)是W的函數,J(t) 爲與h(t)相關的交叉熵損失,因此直接考慮
∂Wh∂h(t)=σ(u)∂h(t)(∂W∂u+∂h(t−1)∂u∂W∂h(t−1))=∂Wh∂h(t)∣∣∣∣(t)+λ∂Wh∂h(t−1)
可以看到這個式子能夠被遞歸展開,而且展開的深度爲t。要注意這裏是對所有time-step權重求偏導,而反向傳播時是一步一步的計算,不需要遞歸展開。
2.5.2 時間序上的反向傳播
由於RNN的真實輸出爲最後一個time-step的隱藏層h(T), 因此反向傳播要從這裏開始,計算最後一個時間步對W的梯度。整個方向傳播的結果就相當於2.5.1中的計算公式。
2.5.3 RNN-LM文本預測及生成
直接預測下一個time-step的隱藏層向量即可。RNN可以模仿任意語言風格,甚至能夠精確的學習到語言中的引號匹配等問題。
2.6 RNN其他用法
- 序列標註(詞性標註、命名實體識別)
- 情感分類
- 用作編碼器模塊(encoder module)
- 用於語音識別、手寫字符識別、自動摘要等文本生成任務
三、評價語言模型:困惑度(perplexity)
使用困惑度評價指標,直觀上理解該公式,就是要使LM預測給定語料的概率儘可能大。
perplexitv=t=1∏T(PLM(x(t+1)∣x(t),⋯,x(1))1)1/T=t=1∏T(y^xt+1(t)1)1/T=exp(T1t=1∑T−logy^xt+1(t))=exp(J(θ))
這與我們訓練時的目標函數一致,越小的困惑度的模型越好。除此之外,也可以使用word error rate來評價模型。
四、術語筆記
- 本節課中的RNN被稱作普通RNN(vanilla RNN)
- RNN升級版:GRU、LSTM、多層RNN
- 課程結束應該能理解“stacked bidirectional LSTM with residual connections and self-attention”這樣的術語。
-