1. 程式人生 > >NLP底層技術之語言模型

NLP底層技術之語言模型

  本文結合cs224n:Natural Language Processing with Deep Learning的Lecture 8、Lecture 9內容,從語言模型(Language Model)講到N-Gram LM(N-Gram Language Model)再到RNN-LM(RNN-Language Model)。

Language Model  

  關於語言模型有兩種說法,一種認為語言模型是計算某個句子概率的模型(A language model computes a probability for a sequence of words:

p(w1,w2,w3...wn)),概率計算一般基於馬爾科夫假設。
  在cs224課程中,語言模型被認為是用來預測下一個單詞。
  這裡寫圖片描述
  就筆者看來,這兩種說法也具有統一性,因為: 

p(w1,w2,w3...wn)=p(w1)p(w2|w1)p(w3|w2,w1)...p(wn|w1,w2,w3,..,wn)在計算整個句子的概率的時候,也需具體到p(wn|w1,w2,w3,..,wn)的計算,這時就是在整個詞表中用來預測下一個單詞的概率。
 日常生活中,我們在如輸入法和搜尋引擎中,都用到了語言模型。語言模型也作為自然語言理解的基礎任務。
  這裡寫圖片描述
 

N-Gram Language Model

這裡寫圖片描述
N-gram存在的問題
1. Sparsity Problem(稀疏性問題)——可通過資料平滑技術如線性插值、Discounting Methods或者back-off方法解決:
這裡寫圖片描述
2. Gigantic RAM requirement(引數空間過大),隨著n的增大,儲存空間需求也變大。
這裡寫圖片描述

RNN Language Model

  利用RNN對序列建模,複用不同時刻的線性非線性單元和權值。理論上之前所有的單詞都會影響到當前的值。
  所需記憶體只與序列長度有關。
  這裡寫圖片描述
  x(t) is the word vector at the t time step. h(0) is some initialization vector at time step 0. The size of the output y(t) is |V|,which is the length of the vocabulary(整個詞表|V|上的概率分佈)。
  這裡寫圖片描述


  RNN語言模型的損失函式
  平均所有時刻上的損失,每個時刻的損失通過交叉熵損失函式定義。
  這裡寫圖片描述
  這裡寫圖片描述

Perplexity

  使用交叉熵損失函式定義困惑度,越小越好。
  這裡寫圖片描述
  RNN-LM的優缺點如下,其中RNN難以獲取很多時間步之前的資訊源自於RNN中的梯度彌散(gradient vanishing),將會在下一篇部落格中介紹。
  這裡寫圖片描述

Smoothing

Linear interpolation

  這裡線性插值(Linear interpolation)通過trigram model介紹,trigram、bigram和unigram的最大似然估計如下:
  qML(w|u,v)=c(w,u,v)c(u,v)
  qML(w|v)=c(w,v)c(v)
  qML(w)=c(w)c()
  對上述符號進行介紹,c(w)表示在訓練語料庫中單詞w出現的次數,c()表示訓練語料庫中單詞出現的所有次數。
  其中trigram、bigram和unigram都有不同的優缺點,unigram不會遇到分子或者分母為零的情況,但是unigram估計完全忽略了上下文資訊,因而拋棄了有用的資訊,而trigram則會遇到分子或者分母為0的情況,bigram在這兩種極端情況之間。
  
  線性插值則是利用這三種估計,通過定義trigram:
  qML(w|u,v)=λ1qML(w|u,v)+λ2qML(w|v)+λ3qML(w)
  其中