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