天然語言基礎-語言模型

LANGUAGE MODELING TASK

什麼是 LM 任務?git

  1. 計算一句話出現的機率
P\left(w_{1 : n}\right)=P\left(w_{1}\right) P\left(w_{2} | w_{1}\right) P\left(w_{3} | w_{1 : 2}\right) P\left(w_{4} | w_{1 : 3}\right) \ldots P\left(w_{n} | w_{1 : n-1}\right)
  1. 計算一系列單詞以後出現的下一個單詞的機率
p\left(w_{i} | w_{1}, w_{2}, \ldots, w_{i-1}\right)=\frac{p\left(w_{1}, w_{2}, \ldots, w_{i-1}, w_{i}\right)}{p\left(w_{1}, w_{2}, \ldots, w_{i-1}\right)}

能夠看到上面的方法在預估條件機率時,使用的是統計值,即數據量足夠多時,統計值接近去真實機率值。github

根據馬爾科夫假設,咱們能夠將條件機率進行簡化,單詞的條件機率只和前面的k個詞有關:web

P\left(w_{i+1} | w_{1 : i}\right) \approx P\left(w_{i+1} | w_{i-k : i}\right)
P\left(w_{1 : n}\right) \approx \prod_{i=1}^{n} P\left(w_{i} | w_{i-k : i-1}\right)

k階的語言模型受限於模型複雜度,當樣本特別大時,爲了解決計算成本,咱們只能減少k,而爲了打破馬爾科夫假設,如今有了注意力模型,可以對更多的前序單詞進行建模。網絡

n-gram 語言模型的兩個主要問題app

  • Sparsity

傳統計算條件機率的方法是統計方法函數

\hat{p}_{\mathrm{MLE}}\left(w_{i+1}=m | w_{i-k : i}\right)=\frac{\#\left(w_{i-k : i+1}\right)}{\#\left(w_{i-k : i}\right)}

統計出來的值等於真實機率的條件是樣本足夠多,那可能的問題有:\#\left(w_{i-k : i+1}\right)可能在訓練集中從沒出現,那這個值就是0,那幾率就是0。那避免zero-probability 0機率的方法就是使用平滑技術(smoothing techniques),最多見的平滑方法是:\mathrm{add}-\alphapost

\hat{p}_{\mathrm{add}-\alpha}\left(w_{i+1}=m | w_{i-k : i}\right)=\frac{\#\left(w_{i-k : i+1}\right)+\alpha}{\#\left(w_{i-k : i}\right)+\alpha|V|}

其中|V|是詞典大小,0<\alpha<=1..net

另一種平滑方法是:back-off3d

\hat{p}_{\mathrm{int}}\left(w_{i+1}=m | w_{i-k : i}\right)=\lambda_{w_{i-k : i}} \frac{\#\left(w_{i-k : i+1}\right)}{\#\left(w_{i-k : i}\right)}+\left(1-\lambda_{w_{i-k : i}}\right) \hat{p}_{\mathrm{int}}\left(w_{i+1}=m | w_{i-(k-1) : i}\right)

目前最好的平滑方法是:Kneser-Ney。cdn

  • Storage

咱們須要記錄全部全部n-gram的數,隨着n增長,模型參數急劇變大。

神經網絡模型

rnn

模型圖:

公式描述:

h_{t}=\sigma\left(W^{(h h)} h_{t-1}+W^{(h x)} x_{t}\right)
\hat{y}_{t}=\operatorname{softmax}\left(W^{(S)} h_{t}\right)

其中

  • x_{1}, \ldots, x_{t-1}, x_{t}, x_{t+1}, \ldots x_{T}是每一個時刻的輸入向量
  • h_{t}=\sigma\left(W^{(h h)} h_{t-1}+W^{(h x)} x_{t}\right),t時刻的狀態根據t-1時刻狀態和輸入計算出來
    • x_{t} \in \mathbb{R}^{d}
    • W^{h x} \in \mathbb{R}^{D_{h} \times d}
    • W^{h h} \in \mathbb{R}^{D_{h} \times D_{h}}
    • h_{t-1} \in \mathbb{R}^{D_{h}}
    • \sigma( ) 非線性函數,此處是 sigmoid
  • \hat{y}_{t}=\operatorname{softmax}\left(W^{(S)} h_{t}\right):根據hidden計算輸出\hat{y}_{t}
    • W^{(S)} \in \mathbb{R}^{|V| \times D_{h}}
    • \hat{y} \in \mathbb{R}^{|V|}

咱們能夠看到模型中最主要的參數是最後一層的W^{S},隨着vocabulary size的增長,W^{S}的大小愈來愈大。

rnn 模型的 loss

t時刻的loss

J^{(t)}(\theta)=-\sum_{j=1}^{|V|} y_{t, j} \times \log \left(\hat{y}_{t, j}\right)

總loss爲時刻t累加:

J=\frac{1}{T} \sum_{t=1}^{T} J^{(t)}(\theta)=-\frac{1}{T} \sum_{t=1}^{T} \sum_{j=1}^{|V|} y_{t, j} \times \log \left(\hat{y}_{t, j}\right)

語言模型的困惑度定義:

\text { Perplexity }=2^{J}

rnn 模型的優缺點

  • 優勢
    • 能夠處理任意長度的時序數據
    • 經過傳遞hidden state,能夠利用t時刻以前的數據
  • 缺點
    • 計算慢,t時刻的狀態依賴於t-1時刻,只能串行計算
    • 實際訓練過程當中,因爲梯度消失/爆炸問題,很難利用很早以前的信息

梯度消失/爆炸問題

rnn模型的一個目標是:可以將hidden state傳播下去,可是在實際中會出現梯度消失/爆炸問題,下面咱們以一個例子來講明這個問題: 例子:

對於梯度爆炸問題,咱們能夠經過 Gradient Clipping來解決,對於梯度消失問題呢?咱們要保證反向傳播的時候,梯度不能太小,那咱們就指望對於每一個 \frac{\partial h_{t+1}}{\partial h_{t}}都儘量接近於1,那相乘的時候,就不會變小了。

建議先讀關於LSTM的文章:Understanding LSTM Networks

##參考

github.com/zhuanxuhit/…

web.stanford.edu/class/cs224…

相關文章
相關標籤/搜索