1. 語言模型
2. Attention Is All You Need(Transformer)算法原理解析
3. ELMo算法原理解析
4. OpenAI GPT算法原理解析
5. BERT算法原理解析
6. 從Encoder-Decoder(Seq2Seq)理解Attention的本質
7. Transformer-XL原理介紹
1. 前言
在機器學習領域,語言識別和圖像識別都不太需要預處理就能喂給計算機,語音識別的輸入數據可以是音頻頻譜序列向量所構成的矩陣,圖像識別的輸入數據是像素點向量構成的矩陣。但是文本是一種抽象的東西,顯然不能直接把文本數據喂給機器當做輸入,因此這里就需要對文本數據進行處理。
2. 語言模型
語言模型是對一段文本的概率進行估計即針對文本\(X\),計算\(P(X)\)的概率,對信息檢索,機器翻譯,語音識別等任務有着重要的作用。語言模型分為統計語言模型和神經網絡語言模型。
3. 統計語言模型
要判斷一段文字是不是一句自然語言,可以通過確定這段文字的概率分布來表示其存在的可能性。語言模型中的詞是有順序的,給定m個詞看這句話是不是一句合理的自然語言,關鍵是看這些詞的排列順序是不是正確的。所以統計語言模型的基本思想是計算條件概率。
輸入:\(X=(x_1,x_2,...,x_m)\)
輸出:\(P(X)\)的概率
以上公式就是語言模型的基本定義。這個公式有2個問題。
假設有句子\((x_1,x_2,x_3,x_4,x_5,x_6)\)
- 自由參數數目
假定字符串中字符全部來自與大小為\(V\)的詞典,上述例子中我們需要計算所有的條件概率,對於所有的條件概率,這里的\(x\)都有\(V\)種取值,那么實際上這個模型的自由參數數目量級是\(V^6\),6為字符串的長度。
從上面可以看出,模型的自由參數是隨着字符串長度的增加而指數級暴增的,這使我們幾乎不可能正確的估計出這些參數。
- 數據稀疏性
從上面可以看到,每一個\(x\)都具有\(V\)種取值,這樣構造出了非常多的詞對,但實際中訓練語料是不會出現這么多種組合的,那么依據最大似然估計,最終得到的概率實際是很可能是0。
3.1 N-gram模型
大家已經知道了語言模型的定義,那首先會遇到一個問題,上面這個公式遇到長句子時計算最后一個詞的概率\(P(x_m|x_1,x_2,...x_{m-1})\)會變得非常的麻煩,那我們是不是可以進行一定的簡化呢?設想一下這句話“今天天氣真是不錯,現在感覺有點餓,我們去吃飯吧!”當我們預測P("吃飯")的概率時,感覺和最前面描述天氣的關系不是很大,而是和比較近的“有點餓”聯系比較緊密。所以我們根據一個詞會和它附近的詞聯系比較緊密,那我們就可以簡化語言模型的概率公式了。
假設我們定義一個詞的概率和它前面的k個詞相關,公式改寫如下:
從模型的效果來看,理論上\(n\)的取值越大,效果越好。但隨着\(n\)取值的增加,效果提升的幅度是在下降的。同時還涉及到一個可靠性和可區別性的問題,參數越多,可區別性越好,但同時單個參數的實例變少從而降低了可靠性。
N-gram比較好解決了自由參數多的問題,但是數據稀疏的問題還是沒有唄解決。
3.2 平滑化
假設有一個詞組在訓練語料中沒有出現過,那么它的頻次就為0,但實際上能不能認為它出現的概率為0呢?顯然不可以,我們無法保證訓練語料的完備性。那么,解決的方法是什么?如果我們默認每一個詞組都出現1次呢,無論詞組出現的頻次是多少,都往上加1,這就能夠解決概率為0的問題了。
4. 神經網絡語言模型
神經網絡語言模型的提出解決了N-gram模型當\(n\)較大時會發生數據稀疏的問題。與N-gram語言模型相同,神經網絡語言模型(NNLM)也是對\(n\)元語言模型進行建模,估計\(P(x_i|x_{i-n+1},x_{i-n+2},...x_{i-1})\)的概率,與統計語言模型不同的是,神經網絡語言模型不通過計數的方法對\(n\)元條件概率進行估計,而是直接通過一個神經網絡對其建模求解。
神經網絡語言模型的結構入上圖所示,可以分為輸入層、投影層、隱藏層和輸出層
- 輸入層:這里就是詞\(x\)的上下文,如果用N-gram的方法就是詞\(x\)的前\(n-1\)個詞了。每一個詞都作為一個長度為\(V\)的one-hot向量傳入神經網絡中.
- 投影層:投影層也叫embedding層,在投影層中,存在一個look-up表\(C\),\(C\)被表示成一個\(V*m\)的自由參數矩陣,其中\(V\)是詞典的大小,而\(m\)代表每個詞投影后的維度。表\(C\)中每一行都作為一個詞向量存在,這個詞向量可以理解為每一個詞的另一種分布式表示。每一個one-hot向量都經過表\(C\)的轉化變成一個詞向量。\(n-1\)個詞向量首尾相接的拼起來,轉化為\((n-1)m\)的列向量輸入到下一層。
- 隱藏層:隱藏層的作用是進行非線性變換。\(z=tanh(WX+b)\)
- 輸出層:用softmax進行概率計算,計算詞表\(V\)的每個詞的概率。\(P(x_i)=softmax(z)\)
5. 總結
即使使用了神經網絡語言模型,本質上仍然是N元語言模型,就是你要預測的當前詞只和他前面的N-1個詞有關,與更前面的詞無關。盡管神經網絡這種方法一定程度上解決了數據稀疏的問題,但還是損失了一些信息。如果想要學習前面所有的的詞就要涉及s到自然語言處理中的循環神經網絡(RNN),我們都知道,循環神經網絡的定義是當前的輸出不僅和當前的輸入有關,還和上一時刻的隱藏層的輸出有關,這樣講神經網絡展開后就會發現他把序列從開頭到結尾全連起來了,十分方便處理序列數據,而這個性質正是我們做語言模型所需要的。