BERT學習指南

詞向量模型比較:
橫向比較Word2vec,ELMO,BERT三個模型:
詞向量是一個工具,可以把真實的世界抽象成文字,進而運用數學公式進行操作的向量,而對向量的操作纔是NLP真正要做的任務。因此,NLP任務可以分爲兩部分:預訓練產生的向量和對向量進行的操作(下游具體的任務)。
Word2vec、ELMO、BERT,這些模型逐漸把下游的具體任務遷移到預訓練向量上。

Word2vec–>:ELMO
結果:將上下文無關的靜態向量變成上下文相關的動態向量。
操作:將編碼轉移到預訓練產生詞向量的過程當中

ELMO–>:BERT
結果:訓練出的word-level向量變成sentence-level的向量,下游具體的NLP任務調用更加方便,克服了ELMO存在的問題。
操作:使用句子級負採樣獲得句子表示/句對關係,Transform模型替代LSTM提升表達和時間效率,masked LM解決“自己看到自己”的問題,也就是說,實現了雙向理解。

1、word2vec
線性模型:高維空間映射的詞向量可以很好的體現真實世界中的token之間的關係。
比如:king-man = queen-woman, 國王=皇后
負採樣:訓練詞向量模型的目標不是爲了得到一個多麼精確的語言模型,而是爲了獲得他的副產物-詞向量。所以要做到的不是在幾萬幾十萬個token艱難計算softmax獲得最優的那個詞(要預測的那個詞),而只要在幾個詞中找到對的詞就行,這幾個詞包括(正確值,隨機產生的噪聲詞),就是說訓練產生一個migmoid二分類器,只要模型能夠從中找到正確的詞就認爲完成任務。
缺點:靜態,上下文無關
爲了讓句子有一個整體含義(context),大家會在下游具體的NLP任務基於詞向量序列做編碼(encoding)操作。
下面是一個比較表格,預測目標這裏的next word下一個詞,是所有傳統語言模型都做的事——尋找下一個詞填什麼。
在這裏插入圖片描述

2、ELMO
介紹ELMo的兩個方面,一個是它的encoder模型Bi-LSTM,另一個是它和下游具體NLP任務的接口(遷移策略)。
Bi-LSTM做encoder實現上下文相關(context):
之前所說的把下游具體任務放到預訓練產生詞向量裏面,從而獲得一個可以根據(文意)context不同不斷變化的(動態)dynamic詞向量。具體實現方法是使用雙向語言模型BI-LSTM來實現,如下面左圖所示。從前到後和從後到前分別做一遍LSTM的encoding操作,從而獲得兩個方向的token聯繫,進而獲取句子的(句意)context。
但是這裏存在兩個問題,暫且稱作“不完全雙向”和“自己看自己”。
“不完全雙向”是指模型的前向和後向LSTM兩個模型是分別訓練的,從圖中也可以看出,對於一個序列前向遍歷一遍獲得左邊的LSTM,後向遍歷一遍獲得右邊的LSTM,最後得到的隱層向量拼接得到的結果向量。(前向的hidden state1 + 後向的hidden state2 = 總的hidden state,+是concat),並且在最後的Loss function中也是前向和後向的loss function直接相加,並非完全同時的雙向計算。
“自己看見自己”是指要預測的下一個詞在給定的序列中已經出現的情況。傳統語言模型的數學原理決定了它的單向性。
從公式p(s)=p(w0)p(w1∣w0)p(w2∣w1,w0)p(w3∣w2,w1,w0)…p(wn∣context)可以看出,傳統語言模型的目標是獲得在給定序列從頭到尾,條件概率相乘後概率最大的預測詞,而雙向模型會導致預測的預測詞已經在給定的序列當中出現,這就是**“自己看見自己”。**
如下右圖所示,圖片從下到上看。最下面是訓練數據A B C D,經過兩個Bi-lstm操作,預測某個詞的位置。
比如第二行第二列,ACD這個結果是第一層Bilstm在B位置的輸出內容,包括正向A和反向CD,直接拼接成ACD。
比如第三行第二列,ABCD這個結果是前向BCD和反向ABD拼接的結果,而當前的位置需要預測的是B,已經在ABCD中出現了,這就會有問題。因此對於BI-LSTM,只要層數增加,就會存在“自己看得見自己”的問題。
在這裏插入圖片描述
3.BERT
BERT模型進一步增加詞向量模型泛化能力,充分描述字符級、詞級、句子級甚至句間關係特徵。
真正的雙向encoding:
Masked LM,類似完形填空,儘管仍舊看到所有位置信息,但需要預測的詞已被特殊符號代替,可以放心雙向encoding。
Transformer做encoder實現上下文相關(context):
使用Transformer而不是Bi-LSTM做encoder,可以有更深的層數、具有更好並行性。並且線性的Transformer比lstm更易免受mask標記影響,只需要通過self-attention減小mask標記權重即可,而lstm類似黑盒模型,很難確定其內部對於mask標記的處理方式。
提升至句子級別:
學習句子/句對關係表示,句子級負採樣。首先給定的一個句子,下一句子正例(正確詞),隨機採樣一句負例(隨機採樣詞),句子級上來做二分類(即判斷句子是當前句子的下一句還是噪聲),類似word2vec的單詞級負採樣。
在這裏插入圖片描述
整個流程的可視化如下圖所示:
輸入“Thinking Machines”,對應詞向量,疊加位置向量 Positional Encoding,對每個位置做 Self-Attention 得到;Add&Norm 分兩步,residual connection(殘餘連接)即,layer Normalization(歸一化) 得到新的,對每個位置分別做 feed forward 全連接和 Add&Norm,得到一個 Encoder Layer 的輸出,重複堆疊2次,最後將 Encoder Layer 輸出到 Decoder 的 Encoder-Decoder Layer 層。
在這裏插入圖片描述
Decoder 階段:先是對 Decoder 的輸入做 Masked Self-Attention Layer(蒙面的自我注意層),然後將Encoder 階段的輸出與 Decoder 第一級的輸出做 Encoder-Decoder Attention,最後接 FFN 全連接,堆疊2個 Decoder,最後接全連接+Softmax 輸出當前位置概率最大的的詞。
在這裏插入圖片描述
BERT的三個亮點
1.Masked Language Model
隨機mask語料中15%的token,然後將masked token 位置輸出的最終隱層向量送入softmax,來預測masked token。
這樣輸入一個句子,每次只預測句子中大概15%的詞,所以BERT訓練很慢。ticle/details/90705953
而對於蓋住詞的特殊標記,在下游NLP任務中不存在。因此,爲了和後續任務保持一致,作者按一定的比例在需要預測的詞位置上輸入原詞或者輸入某個隨機的詞。如:my dog is hairy

有80%的概率用“[mask]”標記來替換——my dog is [MASK]
有10%的概率用隨機採樣的一個單詞來替換——my dog is apple
有10%的概率不做替換——my dog is hairy

下面左圖是transformer模型一個結構,分成左邊Nx框框的encoder和右邊Nx框框的decoder,相較於RNN+attention常見的encoder-decoder之間的attention(上邊的一個橙色框),還多出encoder和decoder內部的self-attention(下邊的兩個橙色框)。每個attention都有multi-head特徵。最後,通過position encoding加入沒考慮過的位置信息。
在這裏插入圖片描述
multi-head attention:
將一個詞的vector切分成h個維度,求attention相似度時每個h維度計算。由於單詞映射在高維空間作爲向量形式,每一維空間都可以學到不同的特徵,相鄰空間所學結果更相似,相較於全體空間放到一起對應更加合理。比如對於vector-size=512的詞向量,取h=8,每64個空間做一個attention,學到結果更細化。

self-attention:
每個詞位的詞都可以無視方向和距離,有機會直接和句子中的每個詞encoding。比如上面右圖這個句子,每個單詞和同句其他單詞之間都有一條邊作爲聯繫,邊的顏色越深表明聯繫越強,而一般意義模糊的詞語所連的邊都比較深。比如:law,application,missing,opinion

position encoding:
因爲Transformer既沒有RNN的recurrence也沒有CNN的convolution,但序列順序信息很重要,比如你欠我100萬明天要還和我欠你100萬明天要還的含義截然不同。
Transformer計算token的位置信息這裏使用正弦波↓,類似模擬信號傳播週期性變化。這樣的循環函數可以一定程度上增加模型的泛化能力。
在這裏插入圖片描述
但BERT直接訓練一個position embedding來保留位置信息,每個位置隨機初始化一個向量,加入模型訓練,最後就得到一個包含位置信息的embedding(簡單粗暴。。),最後這個position embedding和word embedding的結合方式上,BERT選擇直接拼接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章