文章目錄
n-gram LM
語言模型是生成模型,是一個泛泛的概念,通俗來講,就是給定一句話的前半部分,預測生成剩餘的部分。這裏主要介紹一個簡單的LM方法,n-gram。
任務描述
輸入一個句子的開頭單詞:比如 I;
輸出最有可能生成的完整的句子,比如:I love NLP.
假設S代表了整個句子,包含單詞W1,W2,…,則我們的目標是逐個單詞生成句子,使得最後的句子的概率P(S)最大。根據極大似然估計:
模型結構
n-gram模型假設當前生成的單詞只與其前面的n-1個單詞有關,即:
假設我們這裏使用3-gram,那麼問題轉換成了如何求解每個3-gram對應的概率,假設我們有一個大訓練集,裏面包含了許多句子語料,那麼我們可以根據統計來計算每個3-gram的概率:
然後逐個生成句子的下一個單詞。
Tricks
在 n-gram LM中有一些小技巧可以幫助提升模型的能力。
Smoothing
當語料庫中語料不充分時會發生某些單詞組合“0出現”的情況,如果不做提前處理,那麼這些單詞組合對應的概率都會爲0,這顯然是不對的,因爲我們不能籠統的把未出現的單詞的概率一改歸結爲0。此外,我們也需要保證上述通過count計算概率的公式中分母不爲0。這個問題統稱爲數據稀疏問題。因此這裏引入了“smoothing” 平滑技巧。 “smoothing”有很多種類,這裏介紹幾種常見的。
- add-1 smoothing,V爲預料中單詞兩兩成對出現的種類數,可以把1換爲alpha,則進階成add-alpha smoothing:
-
back-off 回退, 若n-gram出現次數爲0,回退到(n-1)-gram。詳細信息參考:https://en.wikipedia.org/wiki/Katz's_back-off_model。
-
Interpolation 插值,和回退類似,只不過回退是隻有當n-gram出現爲0時纔回退到低階gram,而插值法是直接將所有低階線性組合起來。詳細信息參考:https://blog.csdn.net/baimafujinji/article/details/51297802
Greedy Search vs Beam Search
假設我們使用3-gram,當我們已經得到各個3-gram的條件概率 時,我們怎麼根據擁有的概率來選擇下一步生成的單詞呢?有兩種方法:
- Greedy Search,每一步都選擇概率 最大的Wi。這麼做其實過於絕對,因爲很可能下一步生成的單詞本身的概率較小,但是當生成整個句子後,整個句子的概率卻比較大。
- Beam Search,第i步選擇k個最可能的候選單詞,然後第i+1步基於k個候選單詞再生成新的單詞,再選擇k個最可能的,一直到生成句子末尾。可以參考:https://blog.csdn.net/pipisorry/article/details/78404964。
Log化乘爲加
在計算 時,隨着句子長度的增加,乘法會越來特多,計算量增大,我們可以使用log轉換成連加,降低計算量 。
關於n-gram LM 可以參考《speech and language processing》。
NN LM
任務描述
同上
模型結構
除了n-gram LM 外, 神經網絡也應用於LM。最初的NN LM只是一個簡單的前向神經網絡。結構如下:
輸入單詞的前幾個單詞的one-hot表示,經過word embedding(也可以看作是一種look-up),接着是一個tanh非線性,最後送到softmax輸出概率。訓練網絡時的損失函數是:最小化負對數似然函數(通過交叉熵):。優化方法可以使用梯度下降等。
NNLM相比於n-gram LM,優點在於:不需要整個語料庫的統計信息,並且softmax本身已經具有smoothing的作用。(注意使用softmax之前要先減去最大值,防止數值向上/下溢出。)
DL vs ML
傳統的NLP大多依賴於基於統計的ML,比如上面介紹的生成模型HMM,n-gram模型,此外比如未提到的NB模型和最大熵模型。而DL的發展也使得神經網絡逐漸在NLP中處於主導地位,比如這一節的NN LM和下一節將介紹的RNN。那麼傳統ML 和 DL之間到底是什麼關係呢?
- ML 適合於小數據集,而DL則需要大量的數據來訓練模型;
- ML需要特徵工程。而DL是一種end-to-end端到端的模型,可以理解爲一個“黑盒子”,不需要特徵工程;
- 由於“黑盒子”的特性,DL模型很難被理解;而傳統ML模型由於需要考慮特徵,則更易於理解(比如SVM);
- 由於“端到端”特性,DL的適應性強,同一個模型不需要太多的調整就可以適用於不同的任務(比如遷移學習);
- DL由於大量的運算量,需要GPU的加持。
- DL是大勢。
Word Error Rate
,用來評估一個LM模型的好壞。
S:要替換的單詞的數量
D:要被刪除的單詞的數量
I:要插入的單詞的數量