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: ,概率計算一般基於馬爾科夫假設。
在cs224課程中,語言模型被認為是用來預測下一個單詞。
就筆者看來,這兩種說法也具有統一性,因為:
日常生活中,我們在如輸入法和搜尋引擎中,都用到了語言模型。語言模型也作為自然語言理解的基礎任務。
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的最大似然估計如下:
對上述符號進行介紹,表示在訓練語料庫中單詞w出現的次數,表示訓練語料庫中單詞出現的所有次數。
其中trigram、bigram和unigram都有不同的優缺點,unigram不會遇到分子或者分母為零的情況,但是unigram估計完全忽略了上下文資訊,因而拋棄了有用的資訊,而trigram則會遇到分子或者分母為0的情況,bigram在這兩種極端情況之間。
線性插值則是利用這三種估計,通過定義trigram:
其中