預訓練模型發(fā)展史

以下根據(jù)車萬翔老師 CCL2019 報告整理。

目錄:
一、傳統(tǒng)詞向量預訓練:NNLM、SENNA、Word2Vec
二、上下文相關詞向量:CoVe、ELMo
三、NLP中的預訓練模型:GPT、BERT、BERT改進(RoBERTa、XLNet、ALBERT等)
四、預訓練模型的應用:精調(diào)、多任務學習、小樣本學習
五、預訓練模型的分析:下游任務、級聯(lián)任務、上下文詞向量、注意力探針
六、預訓練模型的挑戰(zhàn)

預訓練模型

一、傳統(tǒng)詞向量預訓練

1、什么是詞向量?

一個詞用一個向量去表示。傳統(tǒng)的方法是用one-hot向量表示,就是給每個詞都給一個編號,one-hot詞向量就是以編號為下標的值為1,其余為0,導致嚴重的數(shù)據(jù)稀疏、離散、正交等問題。詞袋模型就是每一個詞對應的位置,按照數(shù)量不斷加一,好處是容易獲取和計算,但是忽略了詞序信息。

2、如何解決傳統(tǒng)詞向量帶來的數(shù)據(jù)稀疏問題?

傳統(tǒng)解決方案

(1)增加額外特征

增加詞性、前后綴等這些更泛化的屬性。比如提取出tion,知道含有tion的都是名詞,能夠表示更多的信息。

(2)語義詞典

樹形結構,給每個詞一個編號,如果兩個詞比較像,其編號在樹上表示的距離就比較近。較符合人的直覺,但是有兩個問題:一,無法解決一詞多義。比如Apple指水果,就和香蕉近;指手機,就和華為近。如果用詞典,不好解決這個問題。二,更新慢,生成速度慢

(3) Brown Clustering

不是很受重視。上面兩個都是人靠語言習慣,靠直覺想出來的。這個方法是通過文本對詞進行自動聚類。給一個詞,0/1編號,前面0越多,兩個詞越像。

3、除了詞自身表示之外,是否可以用其他信息表示這個詞?

上面的想法都是想用這個詞本身來表示詞義信息。典型的例子:一個詞的含義可以由它周圍的詞決定。叫做詞的分布語義假設

詞的分布表示

(1)如何表示?

統(tǒng)計一個大的語料庫,統(tǒng)計共現(xiàn)的所有的詞的信息。比如moon和shinning共同出現(xiàn)了38,那這里表示為38.這樣表示出來的向量可以用余弦計算相似度。但也存在高維、稀疏、離散的問題,因為詞表可能很大,但是真正共現(xiàn)的可能占一小部分。

(2)如何解決高維、稀疏、離散的問題?

  • 加權
    • TF-IDF:把常用的詞,語義信息不太豐富的詞,如的、了等,給它權重很低
    • PMI
  • 降維
    • SVD分解:也可以實現(xiàn)降維。優(yōu)點是可解釋性強,比如moon,每一維我們都知道是哪個詞。但是缺點:更新慢,更新詞表時,比如新來了語料庫,必須和原來的語料庫混在一起重新計算,速度慢;且不容易擴展,比如要表示一個短語或句子,就不能把這些向量直接加起來。
    • LDA

5、更好的解決方法——分布式

用詞的分布式來表示,就是常說的word embedding。直接用一個低維的、稠密的、連續(xù)的向量表示一個詞。如何獲得這樣的表示是研究重點。

分布式詞表示
  • 這個工作最早是在2003年有Bengio等提出的,叫Nerual Network Language Models.
NNLM

提出了word embedding的概念,但本質(zhì)上還是做語言模型,估計一個序列的概率,分解成估計下一個詞的分布,用這個序列之前的信息。這個模型要干的事情就是根據(jù)前n-1個詞預測第n個詞,前面n-1個詞本來每個詞都是離散的,然后把它映射成一個分布式表示的向量,然后把這些向量拼起來,然后過一個神經(jīng)網(wǎng)絡,然后就可以預測下一個詞是什么(softmax的輸出是一個詞表,每個位置是第i個詞為目標詞的概率)。雖然這個模型是使語言模型估計更準,但是有個副產(chǎn)物:word embedding。通過反向傳播的方法,同時能把一個詞的表示學好。也就是這個詞的表示越好,這個語言模型的效果就越好。

  • 另一個典型的工作是SENNA,是2011年提出來的。
SENNA

也是說用一個向量表示一個詞。為什么說這個工作重要呢?是最早將深度學習應用于自然語言處理的工作。他提出了一個思想是——換詞,與語言模型不同。就是我把一個正常句子中的一個詞給他隨機替換掉,替換后句子顯然不符合正常語言習慣。這樣的句子構成了一個反例,原來的句子構成了一個正例。如果我能夠對這兩個句子進行打分,讓正的分比負的分高,這就是要學習的目標。從中,也會把word embedding學好,學好的word embedding也會應用于其他任務。但是由于當時條件訓練一個月,且數(shù)據(jù)量不足,沒有引起很大重視。

  • 是否有更有效的方式?一種思想是簡化模型,增加語料,提升模型訓練效率。由此產(chǎn)生了Word2Vec.
word2vec

就是把模型做的特別簡單,就一層的線形模型,用這個模型去做詞的預測,數(shù)據(jù)量用的很大,從而彌補了模型的不足。之后這個模型作為了很多NLP任務的初始化輸入,得到很大的應用。比如詞義相似度計算、類比關系計算、知識圖譜補全、推薦系統(tǒng)等。

  • 但是還沒有解決一詞多義的問題。

二、上下文相關詞向量

上面的工作沒有很好的解決一詞多義的問題。比如土豆(食物 or 視頻網(wǎng)站)。希望根據(jù)不同上下文來賦予這個詞不同的含義。我們?nèi)绾沃肋@個詞在當前這個環(huán)境下是什么含義?這個比較難。

1、基于雙語的詞義向量表示

基于雙語的詞義向量表示

車老師組在2014年提出了,在單語上獲得含義比較難,因為只看詞本身,他們長得都一樣。其實可以利用雙語資料。因為有大量的雙語語句對,比如第一個翻譯為potatoes,另一個是TuDou。他們的工作是把漢語翻譯成英語,然后在英語中做聚類。然后回過頭來再映射到漢語,標注這個詞到底是什么樣的含義,然后再學一個語言模型等,訓練出來帶詞意的詞向量。

2、CoVe

Cove

最早提出的基于上下文的詞意表示,直接做一個NMT模型,從一種語言翻譯到另外一種語言,用的是encoder部分,把encoder拿出來,每一個詞encoder的結果,就是這個詞上下文的表示,然后用上下文的表示結合以前固定的embedding,就可以做上游任務。

3、ELMo

ELMo

雖然雙語效果不錯,但是語料很有限,是否可以基于單語來訓練模型,就有了ELMo。ELMo是“Embedding from Language Models”的簡稱。它的模型架構就是一個雙向LSTM的LM模型。ELMo是為了解決一次多意性,對于不同的上下文可以給出不同的詞向量。

用語言模型來做預訓練的任務,用語言模型訓練出來每個詞的embedding,可以作為上下文相關的詞的向量。其他幾個貢獻:

  • 使用字符級別的CNN表示。由于單詞級別考慮數(shù)據(jù)可能稀疏,出現(xiàn)OOV問題,拆成字符后稀疏性沒有那么強了,刻畫的會更好。
  • 訓練了從左到右或從右到左的語言模型。用這個語言模型輸出的結果,直接作為詞的向量。
  • contextualized:這是一個語言模型,其雙向LSTM產(chǎn)生的詞向量會包含左側上文信息和右側下文信息,所以稱之為contextualized
  • deep:句子中每個單詞都能得到對應的三個Embedding:最底層是單詞的Word Embedding,往上走是第一層雙向LSTM中對應單詞位置的Embedding,這層編碼單詞的句法信息更多一些;再往上走是第二層LSTM中對應單詞位置的Embedding,這層編碼單詞的語義信息更多一些。
  • 好處是訓練數(shù)據(jù)接近無限。

缺點:

  • LSTM不能解決長距離依賴
  • 雙向LSTM的輸出直接拼接得到embedding,沒有進行深度融合。

為什么有效?解決了未登錄詞的問題。

Q:什么是未登錄詞?
A:新來的詞語,詞表中沒有的。因為是字符級別的建模,因此把新來的詞拆成字符就可生成embedding。

三、NLP中的預訓練模型

前面的方法不能算是我們現(xiàn)在所說的預訓練模型。因為上面的模型訓練出來的詞向量/詞的表示,在做其他任務時作為一個額外的輸入,是不變的;而預訓練模型是整個模型的結構就是為了用來做目標任務的,我在進行目標任務的同時,還回過頭來進行fine-tune,更好的把我當前的任務/模型進行精調(diào)。這是兩者的區(qū)別。

1、GPT

GPT

GPT是“Generative Pretrained Transformer”的簡稱。

最早的預訓練模型。有幾個特點/想法:

  • 首次用到了Transformer,進行更好的encoder。ELMo更多用的是LSTM,而LSTM對長序列的建模效果不是特別好。
  • 在目標任務上進行精調(diào)。當然就可以設計或者規(guī)定幾種目標任務,比如分類問題(一個句子屬于哪一類)、Entailment(兩個句子之間什么關系)、Similarity(兩個文本相似度)、多選題等等。獲得了比ELMo更好的結果。

缺點:

  • GPT本質(zhì)上還是一個從左到右,前向的語言模型,只考慮了前面的信息,是單向的。這個語言模型就是我要預測下一個是什么。我在預測下一個詞的時候是看不到后面的詞是什么,沒有捕捉后文更多的信息。當然這是語言模型固有的一個問題。
  • 因此出現(xiàn)了BERT。

2、BERT

BERT

(1)BERT模型

可以看到BERT和GPT的一個很大的區(qū)別是,BERT是雙向的。就是我挖掉幾個詞,在猜這幾個詞的時候我不光用到前面的詞,還會用到后面的信息。詳細看一下BERT模型。

BERT
  • 輸入:不是簡單的詞,把word變成word piece,把一個長的詞切成幾個片段,比如:friendly-> friend+ly;漢語更簡單,直接用字就可以。
  • 編碼:Transformer;
  • 預訓練任務:除了剛剛講的,還有完形填空+下句預測。本來文本中兩個句子連在一起,把下一句隨機替換掉,替換之后模型需要能判斷這是原始的還是替換的。
  • 訓練方法:MLM
  • 應用方式:四種任務:分類、詞pair判斷等

因為BERT提高了好多任務的效果,刷新了11項NLP任務的最優(yōu)記錄,因此影響比較大。但是BERT也存在一些缺點:

BERT存在哪些優(yōu)缺點?

  • 自回歸語言模型 v.s. 自編碼語言模型: BERT實際上是自編碼語言模型,而其使用的Masked LM正是訓練這種模型的技術,但是這必然會導致<font color=green>預訓練和Fine-tune階段的不一致</font>。尤其是在生成任務上,生成任務就是根據(jù)已生成的單詞以及一些外部知識,生成下一個單詞,這和自回歸語言模型天然匹配,但是和BERT的自編碼語言模型天然矛盾。所以BERT不適合做生成任務。
  • Transformer模型限制:Transformer需要把文本裁剪為固定長度,導致無法獲得更長時間的依賴,輸入也不靈活。
  • 無法文檔級別的NLP任務,只適合于句子和段落級別的任務。

(2)BERT的改進

正是因為BERT有這些缺點,所以在BERT出現(xiàn)后大家基于BERT,提出的改進策略。大概總結了六個方向。

a. 使用其他預訓練目標

BERT有六個預訓練任務:分類問題、Entailment(兩個句子之間什么關系)、Similarity、多選題、完形填空、下一句預測。

為了增強模型的效果,在預訓練階段強迫加入更難的預訓練任務,讓模型學到更好的信息。

  • ERNIE(百度):首先預測word piece的任務難度不是很大,比如“哈”和“濱”,預測中間的爾還是比較容易的,預訓練難度不是很大。什么比較難呢?就是把整個詞挖掉,預測整個詞,。比如***是黑龍江的省會,來預測這個空填哈爾濱,提出了這種基于詞或者說實體的預訓練任務。效果顯示很有效。
    后來提出了ERNIE2.0版本,提出了更多預訓練任務。比如英文,來預測這個字母是否是大寫字母;或者句子的reordering,就是把文章句子順序打亂,讓你判斷句子是不是散亂的;或者discourse relation,讓你判斷句子是什么關系,是順承關系、因果關系還是轉折關系,這個信息通過關鍵詞還是能夠獲得的。這些預訓練任務逼迫模型學習更復雜的信息,除了簡單的語法信息外,還可以學語義信息等等。
  • SpanBERT(Facebook):想法是:不是只挖掉某一個word piece,而是挖掉一段詞,挖掉后用剩余片段的邊界來預測段落中的每個詞,這樣可以逼迫模型去學習更長的信息。獲得很好的效果。比如基于段抽取的任務,如抽取式問答中取得良好效果。
  • MASS(微軟):基于Span的思想,是否可以不僅能預測中間的一些詞是什么,也可以生成中間的詞。挖掉一段文字,然后用剩余部分,用是Seq2Seq模型去預測當前被挖掉的詞所在的序列是什么。好處:不僅學習了被挖掉的詞的表示,同時還可以預訓練Decoder部分,Decoder好才能預測更準。好處是現(xiàn)在的BERT可能不太好處理生成的任務,在生成任務上不太好做預訓練,MASS可以預訓練生成任務,比如在機器翻譯中取得很好效果。

上面的模型是增加其他預訓練目標,逼迫模型去做更復雜的預測,從而提高模型整體的效果。

b. 融入知識圖譜

大概分為兩個方向:實體的生成,實體與實體之間的關系。

  • ERNIE(清華):傳統(tǒng)的方法是我將詞的預訓練表示作為輸入,這個模型的想法是:假設這個詞是一個實體的話,實體在知識庫的表示可以直接的拼接過來,作為輸入,然后再進行預測。相當于在預訓練中用到了實體的信息。在知識庫中實體是怎么表示的呢?就涉及到了圖的embedding表示。整個模型相當于融入了一種額外的知識。

  • KnowBERT:想法和ERNIE很像。進行輸入時,不光看詞自身,還要看詞自身的實體的信息,把他考慮進去。模型更復雜一些,一句話中有很多實體,他們之間有關系的,(紅色)在他們之間做一個self-attention,然后學習一個更好的實體的本身的在文本上的更好的表示。(藍色)是在知識庫中的表示,知識庫中的表示也存在一個問題,就是一個實體在知識庫中多次出現(xiàn),歧義詞,他們的做法是求平均來表示,【但是這樣不太好,實際上可以做更好的消除歧義的任務】。之后呢,把單詞在文本上的表示和在知識庫實體的表示加起來,成為紫色的S',把這個結果再和之前文本的表示進行attention,進行了多次的attention操作,可以考慮到實體和實體之間到底是怎樣的一種關系。

  • K-BERT:剛才的模型想法是在預訓練的時候把知識融入進去,K-BERT是在推理的時候融入知識。這個知識怎么融入呢?一個辦法是把句子中出現(xiàn)的實體、它在知識圖譜中與它有關聯(lián)的實體、它們之間的關系全部加到文本中,構成了一個更復雜的文本。對這個文本上直接用BERT模型,當然文章中提出了一些復雜的mask方法。
    好處:不用修改預訓練模型,省去了一些麻煩;能夠考慮到了實體和實體與實體之間的關系這些信息。

總結來說,有兩種方法:在預訓練的時候把知識圖譜融進去,在用它的時候把知識融進去。

c. 更精細的調(diào)參

  • RoBERTa(Facebook):對BERT更精細的調(diào)參,包括:batch的大小是否可以更大、訓練時間是否可以更長;發(fā)現(xiàn)去除NSP任務,完全靠完形填空的任務,對整個性能有所幫助;訓練數(shù)據(jù)序列更長;動態(tài)改變mask的內(nèi)容。但是,訓練時間很長!(錢)

d. 解決輸入不一致的問題

· 單向特征表示的自回歸預訓練語言模型,統(tǒng)稱為單向模型:ELMO/GPT;
· 雙向特征表示的自編碼預訓練語言模型,統(tǒng)稱為BERT系列模型:(BERT/MASS/ERNIE1.0/ERNIE(THU)/ERNIE2.0/SpanBERT/RoBERTa)
· 雙向特征表示的自回歸預訓練語言模型:XLNet

XLNet

XLNet的Motivation?

  • 對于ELMO、GPT等預訓練模型都是基于傳統(tǒng)的語言模型(自回歸語言模型AR,基于前文預測下一個),自回歸語言模型天然適合處理生成任務,但是無法對上下文進行表征,因此人們反而轉向自編碼思想的研究(如BERT系列模型);

  • 自編碼語言模型(AE)雖然可以實現(xiàn)雙向上下文進行表征,但是:

    • BERT系列預訓練目標的設置造成預訓練過程和生成過程不一致,無法進行生成任務;
    • 預訓練時的[MASK]噪聲在fine-tune階段不會出現(xiàn),造成兩階段不匹配問題;
    • 采用Transformer進行編碼,輸入長度固定;
  • 有什么辦法能構建一個模型使得同時具有自回歸和自編碼的優(yōu)點并且沒有它們?nèi)秉c呢?這就有了XLNet.

  • XLNet:發(fā)現(xiàn)了問題,在預訓練的時候和實際應用的時候,輸入不一樣。因為在預訓練的時候要mask一些詞,但是在實際用的時候我們是看到了所有的這些詞,也就是mask的詞都能看見,有不一致的問題。這是BERT本身存在的陷阱。
    已有模型可分為兩類的預訓練模型:基于自回歸語言模型(上文預測下一個詞是什么)但它看不到下文,典型的語言模型,GPT為代表;BERT發(fā)現(xiàn)這種單向的很有問題,就提出了一種雙向的,也叫自編碼語言模型(上下文預測中間內(nèi)容),這種基于上下文的存在預訓練和精調(diào)時輸入不一致的問題。
    為了解決這個問題,出現(xiàn)了XLNet,他的想法就是,我既可以用自回歸語言模型的好處,還能預測時考慮到右邊的那些詞。
    怎么做呢?提出了基于排列的語言模型。就是把原來句子中這些詞的順序打散,輸入隨機打亂,通過一個新的順序來預測下一個是什么,這樣我在預測的時候,這個詞左邊出現(xiàn)的不光有正常在左邊的詞,同時還有在右邊的一些詞。這樣達到了一個預測的時候能看到未來信息的效果。
    為什么叫XLNet?基于Transformer-XL提出來的,就是基于Transformer模型,能夠對更長序列進行建模。但捕獲長序列信息不是這個模型的核心,核心還是基于排列的語言模型。

    效果也不錯,比BERT好,但是它的參數(shù)量比BERT大的,很多學者就想如果BERT也達到一樣的參數(shù)量,是否效果和XLNet差不多呢?

e. 模型壓縮與加速

前面考慮的是如何使模型效果更好,這一部分呢就考慮實際使用BERT的一些情況。BERT效果很好,但是參數(shù)量巨大,在實際使用時也會遇到各種各樣的困難,成本很高。如何對模型進行壓縮和加速也是很熱的研究方向。大致有兩個思路:

  • 模型的蒸餾(本質(zhì)上是用一個小模型模擬大模型的預測的結果)
    • DistilBERT:用一個小的模型,比如把層數(shù)降低,去掉某些部分等,來模型大模型的結果。好處:效率提高,速度加快;副作用:輸出結果和大模型的結果相比,總是有差距,達不到大模型的結果。這就取決于實際應用,看是重視模型效果,還是重視訓練效率。
    • PKD for BERT:DistilBERT模擬大模型最終輸出結果,模擬大模型中間的輸出結果。
    • TinyBERT(華為):模擬attention的矩陣。
    • 詞表的優(yōu)化,BERT很大一部分開銷是存儲詞表的embedding,占很大空間。學習一個映射:把大的模型的中間的參數(shù),做一個映射矩陣,把這些參數(shù)映射到小的空間上,映射好的話,就形成了student模型,達到一個比較好的效果。
  • ALBERT:Google,刷新了很多評測榜
ALBERT

兩種策略:更小的詞向量維度;運用了類似于循環(huán)神經(jīng)網(wǎng)絡的Transformer的結構,用一套參數(shù),降低了模型的大小。按理來說共享參數(shù)應該會導致效果降低,但是ALBERT缺取得了不錯的效果,一個原因是將NSP(認為它難度低)任務改成了SOP(句子順序預測)。
好處:參數(shù)量下降,模型效果提高;但是訓練速度沒變,甚至比較低,可能因為與循環(huán)神經(jīng)網(wǎng)絡的結構有關。

f. 跨語言與跨模態(tài)

  • 跨語言:之前提到的BERT模型大多都是基于單語的,訓練出來的模型都用于該語言的任務上。一個理想的狀態(tài)是希望在一個語言上訓練的模型,直接應用于另一個語言上,因為世界上有那么多種語言,不可能每種語言都有大量語料、去標注。

    • 傳統(tǒng)方法
      使用靜態(tài)詞向量,如果這兩個詞是互為翻譯的,就是它們的embedding比較像;現(xiàn)在呢,把詞向量變成上下文相關的詞向量,是否也能做跨語言模型。

    • 多語言BERT:M-BERT
      Google在wikipedia中找了104種語言的數(shù)據(jù),在上面直接跑BERT。為什么會有跨語言能力?
      第一個是:不同語言之間,共享了一些word piece。比如把一些詞拆成小塊,這些小塊在不同語言之間是可以share的,尤其是歐洲那邊的語言,大家的詞表都比較像,會有很多重復的word piece。
      第二個是wikipedia自身有個特性,它在表示某個頁面的時候,經(jīng)常混雜著其他語言,比如一個德語界面可能會出現(xiàn)一些英語,會加括號用德語來解釋這個英語,叫做code-switching,起到跨語言的效果。
      存在問題:不適合距離遠的語言,比如漢語和英語,幾乎沒有共享的word piece;因為語言種類多,每種語言的數(shù)據(jù)量不如單語的數(shù)據(jù)量大,準確率不如單語BERT。后面出現(xiàn)了一些基于M-BERT的改進。

    • XLM(Facebook):想法是,收集雙語的句對,在上面直接跑BERT。在mask的時候有可能mask的是英語,也有可能mask的是漢語。以此來獲得跨語言的性質(zhì)。結果還不錯。問題是要收集大量的雙語數(shù)據(jù),訓練資源要求比較多。還有一個是因為隨機mask,假設mask一個英語單詞,很容易猜出來是什么,因為對應的漢語翻譯不一定被mask掉。更好的改進是同時mask掉,同時進行猜兩邊是什么,難度更大,效果更好。

    • Unicoder(微軟):提出了三種跨語言預訓練任務:跨語言的詞語恢復、跨語言的同義句子分類(一個語句對,把其中一個句子替換成另一個句子,看這兩個句子是否是一個意思)、跨語言的遮蓋語言模型。因為預訓練難度變大,所以模型效果也有所提升。

    • 跨語言映射BERT:上面的想法是根據(jù)雙語或多語言語料重新進行預訓練,但是這樣消耗資源比較大,是否有更經(jīng)濟的方式呢?比如直接使用已經(jīng)預訓練好的單語的BERT,差的是這兩種語言是如何映射的。如果可以學習一個很小的詞表,獲得這兩種語言之間的關系,用線性映射的方式,把在不同空間的語言映射到同一空間,來達到跨語言的效果。

    • 跨語言的閱讀理解(車老師組):現(xiàn)在閱讀理解的數(shù)據(jù)基本來自英語,要做一個新的語言的閱讀理解數(shù)據(jù),不太好做。如果把文章進行翻譯,容易產(chǎn)生答案對不齊的問題。提出了Dual BERT,將目標語言翻譯成源語言,在源語言已經(jīng)訓練好的BERT上抽取答案,然后再映射過去,形成答案。如果把文章進行翻譯,容易產(chǎn)生答案對不齊的問題。

  • 跨模態(tài):現(xiàn)在有的BERT這些模型,都是在文本上訓練得到的。有很多數(shù)據(jù)是來自圖像的,是否能用BERT做一個多模態(tài)的學習,完成一些任務比如看圖說話,根據(jù)文字生成圖片等等。

    • VideoBERT:今年很有影響力的工作。和剛剛XLM的思想基本一樣。就是文本和它對應的視頻/圖片,拼接在一起,直接輸入給BERT。輸出的結果,文本這方面比較容易,就是去預測生成的是什么word piece。圖像呢不太容易,圖像什么作為它的預測單元?一個像素嘛?不太合適。預測圖像塊。圖像塊本身是連續(xù)的,圖像抽成一些塊,把這些塊進行一些聚類,相當于給每個圖像塊一個標簽,然后就和文本一樣,去進行預測。效果:可以輸入文字,生成對應的圖像。也可輸入圖像,輸出相應的文字。
VideoBERT

四、預訓練模型的應用

  • Fine-tune

    預訓練好的模型很多時候是不能直接來用的,要結合目標任務還進行fine-tune。那么fine-tune的時候需要注意些什么?

    (1)是否需要fine-tune?

    • 這篇文章通過用BERT做了很多實驗,得到了一個比較general的結論。當你使用的目標任務所使用的模型非常復雜的時候,不需要進行fine-tu ne;反之則需要。現(xiàn)在搞NLP有個趨勢,上面模型部分越來越簡單,預訓練越來越復雜。可以思考一下未來會怎么樣。

    (2)怎么fine-tune更好?

    ? fine-tune效果,不僅使目標模型效果好,還要盡可能保留預訓練模型原始的信息。如何進行balance呢?

    為什么要盡可能保留預訓練的信息?

    • 只調(diào)上面,底下模型保持fixed。

    • 每次只精調(diào)一層,固定其他層

    • 自頂向下逐層解凍:我先訓練好最底層,再固定好這層訓練倒數(shù)第二層等等。這篇文章還給出了其他的值得借鑒的策略:

      • 學習率預熱:warm-off
      • 先讓BERT在通用的數(shù)據(jù)上訓練一個語言模型,然后在此基礎上在目標領域未標注數(shù)據(jù)上精調(diào)語言模型。
    • 目標是提高目標任務的準確率同時盡可能保持預訓練模型原有的信息。因此考慮增加一個額外的損失,衡量原來的模型和訓練后的模型之間的Gap,訓練時盡可能減少這個損失,這樣保證參數(shù)盡量少動,同時和目標任務像。這是一種策略。

    • 增加adapter(適配器):相當于在模型中增加一個組件。適配器是我們要訓練的結果。原來的BERT參數(shù)等不變,通過調(diào)整適配器,更好的適應目標任務。加入適配器有很多方式:一種是串聯(lián)到模型中,去學習模型信息;一種像加入Gate一樣,去調(diào)整原來信息保留多少.

  • 多任務學習

    在原始的數(shù)據(jù)上做預訓練,然后應用于目標任務。目標任務有很多很多,它們之間是否可以互相幫助。期望是它們之間能夠互相幫助互相提高,但實際中往往只有一兩個任務效果提升,其他都有所下降。今年斯坦福的BAM這個工作:我可以用蒸餾的方式,不是多任務,用單模型輸出的結果做feature,多任務學習的結果做student,用多任務模型去學習單任務模型,結論是不同的多任務之間的效果都提高了。當然這個只是目前發(fā)現(xiàn)的一個現(xiàn)象,還沒有人去解釋這是為什么。

    BAM模型的細節(jié)

  • 小樣本學習

    Few-Shot預訓練學習。在目標任務上數(shù)據(jù)很少,怎么能夠做這個任務?預訓練模型天然的可以計算相似的性質(zhì)。做個分類還可以,但是在自然語言處理中很多都是結構化信息的問題,

  • 零樣本學習

    數(shù)據(jù)再少,就是零樣本學習。沒有樣本的情況下,直接用預訓練得到的embedding和知識庫中的embedding對比,計算相似度等。

五、預訓練模型的分析

現(xiàn)在預訓練模型那么好,到底起到了一個什么樣的效果呢?現(xiàn)在很多方向是在模型中加入探針,來探索預訓練模型是個什么東西,到底起到了一個什么作用。

  • 下游任務探針
下游任務探針

這篇工作是在下游做16個任務,來分析BERT的效果。將BERT的輸出直接固定,上層就只做一個很簡單的分類器,然后做下游任務。BERT的輸出如果能夠很好的直接經(jīng)過一個線性變換就能完成下游任務,說明BERT已經(jīng)具備了完成下游任務的能力了。
結論呢,BERT在很多任務上表現(xiàn)都很好,但也有一些不好,比如語法檢查等。

  • 級聯(lián)任務探針
級聯(lián)任務探針

很多自然語言處理的任務是基于級聯(lián)的方式,如詞性標注、句法分析等。這個工作就是說我這個BERT有12層或24層,底層在做分詞、詞性標注這些任務;中間的層做相對語義一點的任務或句法的任務;更高層做處理語義的任務。
得出的結論BERT自身已經(jīng)蘊涵了原來要做的這些級聯(lián)的工作。還有一個結論是底層一些歧義的信息通過高層可反饋出來。

  • 上下文詞向量探針
上下文詞向量探針

這篇工作是分析了預訓練模型生成的詞向量之間有什么關系。預訓練的結果,可以直接將預訓練的embedding,計算任意兩個詞之間的相似度,如果相似的話就給一條弧。發(fā)現(xiàn)最終連出來的弧非常像人工定義的語法樹。
得出來結論預訓練embedding蘊涵了句法的信息。

  • 注意力探針
注意力探針

剛剛是通過embedding的角度,還可以從attention的角度來進行解釋,比如這兩個詞之間attention系數(shù)大了,就認為兩者之間有一條弧,可能因為BERT使用了transformer的結構,有的head包含了一些句法信息,有的甚至包含了指代信息。

六、預訓練模型的挑戰(zhàn)

預訓練模型遇到了哪些挑戰(zhàn)?預訓練模型有那么那么多的好處,是不是以后NLP都不用搞了?直接跑個預訓練模型就行了?肯定不是。有哪些問題BERT解決不了?

  • 預訓練模型是NLP終極解決方案嗎?自然語言處理經(jīng)歷了這么幾個階段:形式,語義,推理,語用。BERT能夠很好的處理語義問題,但是對于推理任務目前做的還不是太好。現(xiàn)在把GLUE變成了superGLUE,增加了推理任務,強迫機器去學習。

  • 如何利用更多的預訓練數(shù)據(jù)?人工標注代價較大,現(xiàn)在很多預訓練任務是尋找自動的標注,文本已經(jīng)放在這里了,通過預測一個詞,當然還可以制造一些數(shù)據(jù)

  • 模型的壓縮和加速?壓縮后效果不好,效果好但速度不行。

  • 如何在seq2seq任務上使用BERT?

  • 如何對長文檔進行表示?目前只能學習到句子或段落級別的信息

  • 如何應對對抗攻擊?

    等等。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內(nèi)容