關於NLP領域內預訓練的一些知識。記得很雜亂,主要用於個人理解,精華內容在學習資料。
一. 學習資料
從Word Embedding到Bert模型—自然語言處理中的預訓練技術發展史
nlp中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
二. NLP里的預訓練
預訓練是通過設計好一個網絡結構來做語言模型任務,然后把大量甚至是無窮盡的無標注的自然語言文本利用起來,預訓練任務把大量語言學知識抽取出來編碼到網絡結構中,當手頭任務帶有標注信息的數據有限時,這些先驗的語言學特征當然會對手頭任務有極大的特征補充作用,因為當數據有限的時候,很多語言學現象是覆蓋不到的,泛化能力就弱,集成盡量通用的語言學知識自然會加強模型的泛化能力。
語言學家J. R. Firth提出,通過一個單詞的上下文可以得到它的意思。J. R. Firth甚至建議,如果你能把單詞放到正確的上下文中去,才說明你掌握了它的意義。
這是現代統計自然語言處理最成功的思想之一。
為什么預訓練模型有用
-
底層特征的可復用性
-
之后再fine-tuning的目的:與當前任務更具相關性。
三. 階段1 one-hot
離散表示
存在的問題:
- 丟失了語言學的韻味。比如這些同義詞的意思實際上還是有微妙的差別:adept, expert, good, practiced, proficient, skillful不能表達單詞的細微差別
- 不能包括最新的詞匯
- 主觀化
- 需要耗費大量人力去整理
- 不能准確計算詞匯之間的相似度
one-hot
無論是規則學派,還是統計學派,過去都用獨熱碼來表示詞語。詞語只是詞表長度的one-hot向量,這是一種localist representation(大概是借用localist“局部”的意項)。
在不同的語料中,詞表大小不同。Google的1TB語料詞匯量是1300萬,這個向量的確太長了。
缺點:根據詞表大小來定義向量。高緯稀疏向量,且單詞之間沒有任何關系,獨立存在,不符合文本需求。
四. 階段2 word-embedding
1. 語言模型
語言模型:預測一個句子出現的概率。
最開始用的是n-gram模型,雖然利用了馬爾可夫假設但仍然會有許多句子的概率為0,又采取了各種smooth平滑策略,但是效果終究不是很好。NNLM是用神經網絡建立的語言模型。
2. NNML
同樣是求\(P(X_n|X_1^{n-1})\) ,NNML通過輸入一段文本,預測下一個單詞的方式來建立模型。
NNLM過程:
- 統計所有word個數為V。將所有word用one-hot表示,維度為|V|
- 輸入的文本單詞乘矩陣(|V|*m),得到維度大小1*m,將所有單詞concat成(n-1)m,將這個輸入到隱藏層(tanh),最后再輸入到輸出層(softmax)
在做語言模型任務時,用NNML意外得到了word embedding層,可以將原來的one-hot向量表示成低緯稠密向量,而且向量能表示單詞之間的關系。(同義詞向量空間距離近)
最關鍵的就是利用訓練語言模型得到了學習word embedding層的參數矩陣Q,Word Embedding矩陣Q是網絡Onehot層到embedding層映射的網絡參數矩陣。
3. word2vec
NNLM的主要任務是要學習一個解決語言模型任務的網絡結構,語言模型就是要看到上文預測下文,而word embedding只是無心插柳的一個副產品。但是Word2Vec目標不一樣,它單純就是要word embedding的,這是主產品,所以它完全可以隨性地這么去訓練網絡。所以它專門通過做語言模型任務為了得到embedding,具體有下面兩種訓練模型:
CBOW
- 核心思想是從一個句子里面把一個詞摳掉,用這個詞的上文和下文去預測被摳掉的這個詞。即給上下文,預測中間的一個單詞的語言模型任務。
Skip-gram
輸入某個單詞,要求網絡預測它的上下文單詞的語言模型任務。
4. GloVE
五. 階段3:基於特征融合的預訓練
這種預訓練本質上和圖像領域的預訓練有區別
ELMO
論文:‘Deep contextualized word representation’
通過雙層LSTM提取三種embedding特征,加權和得到最終的embedding給其他任務。
優點:解決了之前多義詞的問題
缺點:LSTM特征抽取能力弱
我們如果把ELMO這種預訓練方法和圖像領域的預訓練方法對比,發現兩者模式看上去還是有很大差異的。除了以ELMO為代表的這種基於特征融合的預訓練方法外,NLP里還有一種典型做法,這種做法和圖像領域的方式就是看上去一致的了,一般將這種方法稱為“基於Fine-tuning的模式”,而GPT就是這一模式的典型開創者。
六. 階段4 基於Fine-tuning的模式
基於fine-tune的模式就是典型的兩階段的遷移學習在nlp領域的應用,首先用過預訓練將提取出重要的語言學特征,之后將預訓練模型應用到下游任務中去。
兩階段模型:超大規模預訓練+具體任務Fine-tuning
GPT
論文:Improving Language understanding by Generative Pre-Training
第一階段和ELMO不同點:
- 使用Transformer
- 單向而非雙向
預訓練在第一階段是單向還是雙向取決於它訓練語言模型使用的方式。GPT是通過輸入一段文本預測下一個word所以是單向;而BERT通過類似MLM這種完形填空式的訓練方法就是雙向。
第二階段:向GPT的網絡結構看齊,把任務的網絡結構改造成和GPT的網絡結構是一樣的。然后,在做下游任務的時候,利用第一步預訓練好的參數初始化GPT的網絡結構,這樣通過預訓練學到的語言學知識就被引入到你手頭的任務里來了。與圖像領域里的預訓練一樣
缺點:不是雙向
BERT
雙向+Tranformer
Bert采用和GPT完全相同的兩階段模型。第一階段是雙向語言模型預訓練,第二階段使用Fine-Tuning模式解決下游任務。和GPT的最主要不同在於在預訓練階段采用了類似ELMO的雙向語言模型,當然另外一點是語言模型的數據規模要比GPT大。
Bert最大的亮點在於效果好及普適性強,幾乎所有NLP任務都可以套用Bert這種兩階段解決思路,而且效果應該會有明顯提升。可以預見的是,未來一段時間在NLP應用領域,Transformer將占據主導地位,而且這種兩階段預訓練方法也會主導各種應用。