这些年,NLP常见的预训练模型剖析
“預(yù)訓(xùn)練-微調(diào)”(pre-training and fine-tune) 已經(jīng)成為解決NLP任務(wù)的一種新的范式?;陬A(yù)訓(xùn)練語言模型的詞表示由于可以建模上下文信息,進而解決傳統(tǒng)靜態(tài)詞向量不能建?!耙辉~多義”語言現(xiàn)象的問題。傳統(tǒng)的詞向量有one-hot(杜熱編碼)、詞袋模型(TF_IDF)、N-Gram、Word2Vec、Glove等,其中word2vec和Glove是屬于word embedding。?
- one-hot:每個單詞都創(chuàng)建一個長度等于詞匯量的零向量,在相應(yīng)單詞的位置上置為1。缺點 :效率低下、且向量稀疏。(未聯(lián)系上下文,忽略詞和詞之間的聯(lián)系)
- 詞袋模型(TF-IDF):將每篇文章看成一袋子詞,忽略每個詞出現(xiàn)的順序,將文本以詞為單位分開,并將每篇文章表示成一個長向量,計算每個詞在原文章中的重要性。(未聯(lián)系上下文,忽略詞和詞之間的聯(lián)系)
- N-gram:將連續(xù)出現(xiàn)的n個詞組成的詞組也作為一個單獨特征放到向量表示中去。(增加了詞和詞之間的聯(lián)系,未考慮詞性變化)
- Word2Vec:通過上下文來學(xué)習(xí)語義信息。常見模型有CBOW和Skip-gram,CBOW是通過上下文出現(xiàn)的詞語去預(yù)測中心詞,訓(xùn)練速度較快。Skip-gram是通過當(dāng)前詞去預(yù)測上下文中的各詞生成概率,對罕見詞的訓(xùn)練效果比較好。缺點:(1)由于詞和向量是一對一的關(guān)系,所以多義詞的問題無法解決(2)Word2vec 是一種靜態(tài)的方式,雖然通用性強,但是無法針對特定任務(wù)做動態(tài)優(yōu)化(學(xué)習(xí)了語義信息,能學(xué)習(xí)到一些同義詞,但是也存在一些缺點)
- Glove:以矩陣分解方法為基礎(chǔ),通過對包含整個語料統(tǒng)計信息的矩陣進行分解,得到每個單詞對應(yīng)的實數(shù)向量。
相比較Word2Vec和Glove區(qū)別的可以參考:Word2Vec 與 GloVe 技術(shù)淺析與對比
基于傳統(tǒng)詞向量模型的不足(一詞多義問題,在簡單的word embedding里邊一個詞只有一個embedding,但是在生活中,存在一詞多義),在2018年后,出現(xiàn)了新的一批模型(基于上下文的word embedding)。常見的預(yù)訓(xùn)練模型有
1.ELMo
ELMo(Embedding from Language Models)的縮寫,在2018年發(fā)表的論文《Deep Contextualized Word Embeddings》,提出了ELMo的思想。ELMo是采用雙向的Bi-LSTM對輸入進行訓(xùn)練,單詞特征E可以通過傳統(tǒng)詞向量方式實現(xiàn),每一個lstm層都將單詞特征與其上文詞向量和下文詞向量進行拼接作為當(dāng)前的輸入向量,其中第一層lstm獲取句法特征,第二層lstm獲取語義特征。 在進行下游任務(wù)時,獲取之前模型訓(xùn)練的3個embedding(包括單詞向量E,第一層LSTM的輸出,第二層LSTM的輸出),進行加權(quán)求和后輸入下游任務(wù)中。
ELMO雖然能夠看到上下文信息,但是它只能看到單向的上下文信息,這樣說是因為ELMO中前向lstm和后向lstm的網(wǎng)絡(luò)是完全獨立的,也就是說當(dāng)使用前向lstm訓(xùn)練時,詞?t?看不到?t+1及之后的所有詞,同理使用后向lstm訓(xùn)練時,詞?t?看不到?t - 1及之前的所有詞,因此本質(zhì)上來說它依然只能看到單向信息,所謂的“雙向”只是將兩個方向的信息進行拼接而已。這是ELMO的局限性。
ELMo有三個特點:
1. 學(xué)習(xí)的是word token的詞向量,根據(jù)上面的定義,word token與具體的上下文有關(guān),不再是靜態(tài)的word type的詞向量;
2. 使用很長的上下文進行學(xué)習(xí),而不像word2vec一樣使用較小的滑動窗口,所以ELMo能學(xué)到長距離詞的依賴關(guān)系;
3. 使用雙向的語言模型進行學(xué)習(xí),并使用網(wǎng)絡(luò)的所有隱藏層作為這個詞的特征表示。
2.GPT(單向語言模型)
GPT(Generative Pre-training Transformer)是OpenAI發(fā)布的,目前發(fā)布了三個版本:GPT-1、GPT-2、GPT-3。
GPT?是使用 Transformer 的 Decoder 模塊構(gòu)建進行半監(jiān)督訓(xùn)練(無監(jiān)督的預(yù)訓(xùn)練和有監(jiān)督的微調(diào)),與原生Transformer相比,GPT對其中每個解碼器的結(jié)構(gòu)做了簡化:在Transformer中,每個解碼器模塊中包括掩膜多頭自注意力(Masked Multi-Head Attention)、編碼-解碼注意力(Encode-Decode Attention)和全連接前饋網(wǎng)絡(luò)(Feed Forward NN)三個模塊。而GPT去掉了其中的編碼-解碼注意力模塊,僅保留掩膜多頭自注意力和全連接前饋網(wǎng)絡(luò)兩個模塊。
(1)Masked Multi-Head Attention
- Attention
Attention是將有限的注意力集中在重點信息上,從而節(jié)省資源,快速獲得最有效的信息。在seq2seq中為了解決輸入序列信息丟失的問題引入的。Attention的Query(Q)是decoder的內(nèi)容、Key(K)和Value(V)是encoder的內(nèi)容,q和k對齊了解碼端和編碼端的信息相似度。
步驟:
第一步: query 和 key 進行相似度計算,得到權(quán)值(sim(q,k))
第二步:將權(quán)值進行歸一化,得到直接可用的權(quán)重(softmax(sim(q,k)))
第三步:將權(quán)重和 value 進行加權(quán)求和(sum(softmax(sim(q,k))))
- Self Attention?
當(dāng)模型處理句子中的每個詞時,Self Attention?機制使得模型不僅能夠關(guān)注這個位置的詞,而且能夠關(guān)注句子中其他位置的詞,作為輔助線索,進而可以更好地編碼當(dāng)前位置的詞。例如
The animal didn't cross the street because it was too tired在句子中,我們能夠分析出來it是指代the animal ,但是機器不知道,self Attention就是讓it 和the animal關(guān)聯(lián)起來。總體計算公式為:
第 一 步是:對輸入編碼器的每個詞向量,都創(chuàng)建 3 個向量,分別是:Query 向量,Key 向量,Value 向量。這 3 個向量是詞向量分別和 3 個矩陣相乘得到的,而這個矩陣是我們要學(xué)習(xí)的參數(shù)。
例:兩個詞向量為例,輸入向量和權(quán)重W(Q,K,V)向量相乘,得到3個向量q,k,v。
第 2 步,是計算 Attention Score(注意力分?jǐn)?shù))。假設(shè)我們現(xiàn)在計算第一個詞?Thinking?的 Attention Score(注意力分?jǐn)?shù)),需要根據(jù)?Thinking?這個詞,對句子中的其他每個詞都計算一個分?jǐn)?shù)。這些分?jǐn)?shù)決定了我們在編碼Thinking這個詞時,需要對句子中其他位置的每個詞放置多少的注意力。從圖上看,就是q1*k1+q1*k2
第 3 步就是把每個分?jǐn)?shù)除以?(?是 Key 向量的長度)。你也可以除以其他數(shù),除以一個數(shù)是為了在反向傳播時,求取梯度更加穩(wěn)定。(下圖中的8是多頭里邊的8組注意力)
第 4 步,接著把這些分?jǐn)?shù)經(jīng)過一個 Softmax 層,Softmax可以將分?jǐn)?shù)歸一化,這樣使得分?jǐn)?shù)都是正數(shù)并且加起來等于 1。
第 5 步,得到每個位置的分?jǐn)?shù)后,將每個分?jǐn)?shù)分別與每個 Value 向量相乘。這種做法背后的直覺理解就是:對于分?jǐn)?shù)高的位置,相乘后的值就越大,我們把更多的注意力放到了它們身上;對于分?jǐn)?shù)低的位置,相乘后的值就越小,這些位置的詞可能是相關(guān)性不大的,這樣我們就忽略了這些位置的詞。
第 6 步是把上一步得到的向量相加,就得到了 Self Attention 層在這個位置(這里的例子是第一個位置)的輸出。
- Multi-Head Attention
一組注意力機制是一個head,多組注意力機制就是多頭(Multi-Head),多頭注意力的好處:
1、它擴展了模型關(guān)注不同位置的能力。
2、多頭注意力機制賦予 attention 層多個“子表示空間”(一個頭是一個子表示空間)。
???
由四部分組成:
?用linear并分拆成Multi head(作者就將512維向量拆成8份,每64維得到一個向量);
經(jīng)過Scaled-Dot-Product Attention生成n(8)個B矩陣;
concat,新增一個權(quán)重系數(shù),將b1,...,bn,合并成B傳入下一層;
再增加一層Linear Layer。?
- Masked Self-Attention
Masked Multi-Head Attention只允許關(guān)注到輸出序列中早于當(dāng)前位置之前的單詞。具體做法是:在 Self Attention 分?jǐn)?shù)經(jīng)過 Softmax 層之前,屏蔽當(dāng)前位置之后的那些位置。
因為解碼器是要預(yù)測未來,因此,當(dāng)前詞后邊的詞是不存在的,需要將當(dāng)前詞后邊的詞向量的K置為無窮。
(Self-Attention 和 Masked Self-Attention 的區(qū)別)
假設(shè)模型只有2個token作為輸入,且正在進行第二個token的計算,則將最后兩個token屏蔽(masked),將未來的token評分為0。
這個屏蔽(masking)是通過attention mask的矩陣進行的,在q.k之后,softmax之前進行,將需要屏蔽的單元格設(shè)置為負無窮大或者一個非常大的負數(shù)。然后按照self Attention的計算方式完成后續(xù)計算。
(2)Feed Forword NN
(3)位置編碼
GPT-2和GPT的不同有:
1.?GPT-2去掉了fine-tuning層:不再針對不同任務(wù)分別進行微調(diào)建模,而是不定義這個模型應(yīng)該做什么任務(wù),模型會自動識別出來需要做什么任務(wù)
2.?增加數(shù)據(jù)集:GPT-2收集了更加廣泛、數(shù)量更多的語料組成數(shù)據(jù)集。該數(shù)據(jù)集包含800萬個網(wǎng)頁,大小為40G。
3.?增加網(wǎng)絡(luò)參數(shù):GPT-2將Transformer堆疊的層數(shù)增加到48層,隱層的維度為1600,參數(shù)量更是達到了15億
4.?調(diào)整transformer:將layer normalization放到每個sub-block之前,并在最后一個Self-attention后再增加一個layer normalization。
3.BERT(雙向語言模型)
BERT(Bidirectional Encoder Representations from Transformers)是Google發(fā)表的論文,基于Transformers-encoder的雙向編碼表示模型。BERT是Transformers應(yīng)用的一次巨大的成功。在該模型提出時,其在NLP領(lǐng)域的11個方向上都大幅刷新了SOTA。其模型的主要特點可以歸納如下:
Bert有兩種不一樣規(guī)模的模型:Bert(base)是12個encoder,768個隱藏層單元和12個heads,Bert(large)是24個encoder,1024個隱藏層單元和16個heads,原Transformer有配置是6個encoder,512個隱藏層單元和8個heads。
特殊標(biāo)識:[cls]在樣本Input的開頭,就是classification的意思,可以理解為用于下游的分類任務(wù)。
[sep]用于做句子的分割符,在每個句子的結(jié)尾。
(1)Transformer-Encoder
與Transformer的模型的encoder一致。特點是(1)Multi-head Attention(2)feed forward NN(3)殘差網(wǎng)絡(luò)? (4)位置編碼?等。
- Multi-Head self attention:多頭機制類似于“多通道”特征抽取,self attention通過attention mask動態(tài)編碼變長序列,解決長距離依賴(無位置偏差)、可并行計算;
- Feed-forward :在位置維度計算非線性層級特征;
- Layer Norm & Residuals:加速訓(xùn)練,使“深度”網(wǎng)絡(luò)更加健壯;
(2)MLM(Mask Language Model)
為了實現(xiàn)深度雙向表示,我們采用了隨機按百分比遮擋(masking)輸入數(shù)據(jù)(Input token),然后預(yù)測被遮擋的數(shù)據(jù)(masked token)。論文中是隨機屏蔽每個句子15%的token,但是有兩個缺點
- 因為[mask]在fine-tuning不被看見,因此在pre-training和fine-tuning是不匹配的。為了減輕這個,我們會進行以下操作,而不是全部用[mask]替換。例:the dog is hairty
80%:使用[mask] token替換單詞,the dog is hairty->the dog is [mask]
10%:使用其他詞隨機替換單詞,the dog is hairty->the dog is apple
10%:保持單詞不改變,the dog is hairty->the dog is hairty,目的是評估真實值和預(yù)測值之間的差據(jù)
- 使用MLM之后每個批次只有15%的詞被預(yù)測,這意味著模型需要更多的預(yù)訓(xùn)練步驟進行處理,收斂速度要比left-to-right模型(GPT)要慢。
(3)NSP(Next Sentence Prediction)
類似于QA(問答)、NLI(自然語言推斷)的下游任務(wù)需要理解兩個文本序列之間的關(guān)系,我們提出來NSP任務(wù)(可以從任何語料庫里生成)。我們從每個預(yù)訓(xùn)練樣本中選擇兩個句子A和B,在B中,有50%是真實的A的next sentence內(nèi)容,50%是從語料庫隨機選取的,例如圖,摘自論文:
Bert的不足:
-
生成任務(wù)表現(xiàn)不佳:預(yù)訓(xùn)練過程和生成過程的不一致,導(dǎo)致在生成任務(wù)上效果不佳;
-
采取獨立性假設(shè):沒有考慮預(yù)測[MASK]之間的相關(guān)性,是對語言模型聯(lián)合概率的有偏估計(不是密度估計);
-
輸入噪聲[MASK],造成預(yù)訓(xùn)練-精調(diào)兩階段之間的差異;
-
無法文檔級別的NLP任務(wù),只適合于句子和段落級別的任務(wù);
-
不適合處理NLG任務(wù);由于BERT本身在預(yù)訓(xùn)練過程和生成過程的不一致,并沒有做生成任務(wù)的相應(yīng)機制,導(dǎo)致在生成任務(wù)上效果不佳,不能直接應(yīng)用于生成任務(wù)。如果將BERT或者GPT用于Seq2Seq的自然語言生成任務(wù),可以分別進行預(yù)訓(xùn)練編碼器和解碼器,但是編碼器-注意力-解碼器結(jié)構(gòu)沒有被聯(lián)合訓(xùn)練,BERT和GPT在條件生成任務(wù)中只是次優(yōu)效果。
4.ERINE
ERNIE(Enhanced Representation through kNowledge IntEgration)是百度提出的語義表示模型,同樣基于Transformer Encoder,相較于BERT,其預(yù)訓(xùn)練過程利用了更豐富的語義知識和更多的語義任務(wù),在多個NLP任務(wù)上取得了比BERT等模型更好的效果。
ERINE有兩個版本:
ERINE1.0(主要更改MLM模塊):
-
在預(yù)訓(xùn)練階段引入知識(實際是預(yù)先識別出的實體),引入3種[MASK]策略預(yù)測:
-
Basic-Level Masking:跟BERT一樣,對subword進行mask,無法獲取高層次語義;
-
Phrase-Level Masking:mask連續(xù)短語;
-
Entity-Level Masking:mask實體;
-
-
在預(yù)訓(xùn)練階段引入了論壇對話類數(shù)據(jù)
-
利用對話語言模式(DLM, Dialogue Language Model)建模Query-Response對話結(jié)構(gòu),將對話Pair對作為輸入,引入Dialogue Embedding標(biāo)識對話的角色,利用對話響應(yīng)丟失(DRS, Dialogue Response Loss)學(xué)習(xí)對話的隱式關(guān)系,進一步提升模型的語義表示能力。
-
BERT在預(yù)訓(xùn)練過程中使用的數(shù)據(jù)僅是對單個字符進行屏蔽,例如圖3所示,訓(xùn)練Bert通過“哈”與“濱”的局部共現(xiàn)判斷出“爾”字,但是模型其實并沒有學(xué)習(xí)到與“哈爾濱”相關(guān)的知識,即只是學(xué)習(xí)到“哈爾濱”這個詞,但是并不知道“哈爾濱”所代表的含義;而ERNIE在預(yù)訓(xùn)練時使用的數(shù)據(jù)是對整個詞進行屏蔽,從而學(xué)習(xí)詞與實體的表達,例如屏蔽“哈爾濱”與“冰雪”這樣的詞,使模型能夠建模出“哈爾濱”與“黑龍江”的關(guān)系,學(xué)到“哈爾濱”是“黑龍江”的省會以及“哈爾濱”是個冰雪城市這樣的含義。
ERINE2.0:
在預(yù)訓(xùn)練階段引入多任務(wù)學(xué)習(xí),預(yù)訓(xùn)練包括了三大類學(xué)習(xí)任務(wù),分別是:
- 詞法層任務(wù):學(xué)會對句子中的詞匯進行預(yù)測。
- 語法層任務(wù):學(xué)會將多個句子結(jié)構(gòu)重建,重新排序。
- 語義層任務(wù):學(xué)會判斷句子之間的邏輯關(guān)系,例如因果關(guān)系、轉(zhuǎn)折關(guān)系、并列關(guān)系等。
5.XLNET
XLNET是自回歸(AR)語言模型,GPT和GPT-2都是AR語言模型。AR語言模型的優(yōu)點是擅長NLP生成任務(wù)。因為在生成上下文時,通常是正向的。AR語言模型在這類NLP任務(wù)中很自然地工作得很好。但是AR語言模型有一些缺點,它只能使用前向上下文或后向上下文,這意味著它不能同時使用前向上下文和后向上下文。BERT被歸類為自動編碼器(AE)語言模型。AE語言模型的目的是從損壞的輸入中重建原始數(shù)據(jù)。XLNet提出了一種新的方法,讓AR語言模型從雙向的上下文中學(xué)習(xí),避免了AE語言模型中mask方法帶來的弊端。
改進點:
(1)排列語言模型(Permutation LM)
PLM的本質(zhì)是LM聯(lián)合概率的多種分解機制的體現(xiàn),將LM的順序拆解推廣到隨機拆解,但是需要保留每個詞的原始位置信息,遍歷其中的分解方法,并且模型參數(shù)共享,就可以學(xué)習(xí)到預(yù)測詞上下文。
(2)two-stream self-Attention
two-stream self-Attention解決了沒有目標(biāo)位置信息的問題。
(3)Transformer-XL
Word2Vec 與 GloVe 技術(shù)淺析與對比
[NLP]ELMO理解
【NLP】圖解GPT-2(完整版)
圖解Transformer(完整版)!
BERT、ERNIE、XLNET等15個預(yù)訓(xùn)練模型對比分析與關(guān)鍵點探究
總結(jié)
以上是生活随笔為你收集整理的这些年,NLP常见的预训练模型剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ros学习-中国大学MOOC---《机器
- 下一篇: sklearn——决策树