天天看點

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  
      • N-Gram Language Model
      • RNN Language Model
        • Perplexity
      • Smoothing
        • Linear interpolation

Language Model  

  關于語言模型有兩種說法,一種認為語言模型是計算某個句子機率的模型(A language model computes a probability for a sequence of words: p(w1,w2,w3...wn)) p ( w 1 , w 2 , w 3 . . . w n ) ) ,機率計算一般基于馬爾科夫假設。

  在cs224課程中,語言模型被認為是用來預測下一個單詞。

  

NLP底層技術之語言模型

  就筆者看來,這兩種說法也具有統一性,因為: 

p(w1,w2,w3...wn)=p(w1)p(w2|w1)p(w3|w2,w1)...p(wn|w1,w2,w3,..,wn) p ( w 1 , w 2 , w 3 . . . w n ) = p ( w 1 ) p ( w 2 | w 1 ) p ( w 3 | w 2 , w 1 ) . . . p ( w n | w 1 , w 2 , w 3 , . . , w n )

在計算整個句子的機率的時候,也需具體到 p(wn|w1,w2,w3,..,wn) p ( w n | w 1 , w 2 , w 3 , . . , w n ) 的計算,這時就是在整個詞表中用來預測下一個單詞的機率。

 日常生活中,我們在如輸入法和搜尋引擎中,都用到了語言模型。語言模型也作為自然語言了解的基礎任務。

  

NLP底層技術之語言模型

 

N-Gram Language Model

NLP底層技術之語言模型

N-gram存在的問題

1. Sparsity Problem(稀疏性問題)——可通過資料平滑技術如線性插值、Discounting Methods或者back-off方法解決:

NLP底層技術之語言模型

2. Gigantic RAM requirement(參數空間過大),随着n的增大,存儲空間需求也變大。

NLP底層技術之語言模型

RNN Language Model

  利用RNN對序列模組化,複用不同時刻的線性非線性單元和權值。理論上之前所有的單詞都會影響到目前的值。

  所需記憶體隻與序列長度有關。

  

NLP底層技術之語言模型

  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|上的機率分布)。

  

NLP底層技術之語言模型

  RNN語言模型的損失函數

  平均所有時刻上的損失,每個時刻的損失通過交叉熵損失函數定義。

  

NLP底層技術之語言模型

  

NLP底層技術之語言模型

Perplexity

  使用交叉熵損失函數定義困惑度,越小越好。

  

NLP底層技術之語言模型

  RNN-LM的優缺點如下,其中RNN難以擷取很多時間步之前的資訊源自于RNN中的梯度彌散(gradient vanishing),将會在下一篇部落格中介紹。

  

NLP底層技術之語言模型

Smoothing

Linear interpolation

  這裡線性插值(Linear interpolation)通過trigram model介紹,trigram、bigram和unigram的最大似然估計如下:

   qML(w|u,v)=c(w,u,v)c(u,v) q M L ( w | u , v ) = c ( w , u , v ) c ( u , v )

   qML(w|v)=c(w,v)c(v) q M L ( w | v ) = c ( w , v ) c ( v )

   qML(w)=c(w)c() q M L ( w ) = c ( w ) c ( )

  對上述符号進行介紹, c(w) c ( w ) 表示在訓練語料庫中單詞w出現的次數, c() c ( ) 表示訓練語料庫中單詞出現的所有次數。

  其中trigram、bigram和unigram都有不同的優缺點,unigram不會遇到分子或者分母為零的情況,但是unigram估計完全忽略了上下文資訊,因而抛棄了有用的資訊,而trigram則會遇到分子或者分母為0的情況,bigram在這兩種極端情況之間。

  

  線性插值則是利用這三種估計,通過定義trigram:

   qML(w|u,v)=λ1qML(w|u,v)+λ2qML(w|v)+λ3qML(w) q M L ( w | u , v ) = λ 1 q M L ( w | u , v ) + λ 2 q M L ( w | v ) + λ 3 q M L ( w )

  其中 λ1 λ 1 、 λ2 λ 2 、 λ3 λ 3 是三個參數,且滿足:

   λ1≥0 λ 1 ≥ 0 , λ2≥0 λ 2 ≥ 0 , λ3≥0 λ 3 ≥ 0

   λ1+λ2+λ3=1 λ 1 + λ 2 + λ 3 = 1

  是以是對這三種估計的權重平均。

繼續閱讀