張俊林:BERT和Transformer到底學到了什么|AI ProCon 2019

情感導師 8756

 添加導師微信MurieL0304

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單干貨

演講嘉賓 | 張俊林(新浪微博機器學習團隊AI Lab負責人)

編輯 | Jane

出品 | AI科技大本營(ID:rgznai100)

【導讀】BERT提出的這一年,也是NLP領域迅速發(fā)展的一年。學界不斷提出新的預訓練模型,刷新各項任務指標,業(yè)界也不斷嘗試在工程問題中引用BERT、XLNet等預訓練模型,那BERT為什么能有這么好的效果,深入其原理本身,又究竟好在哪里?在AI ProCon 2019大會上,新浪微博機器學習團隊AI Lab負責人張俊林為大家深入分享了《BERT和Transformer到底學到了什么?》。

張俊林:BERT和Transformer到底學到了什么|AI ProCon 2019

以下為張俊林的演講內(nèi)容實錄,AI科技大本營(ID:rgznai100)整理:

張俊林:BERT和Transformer兩者間是什么關系?BERT 提出后,我一直在思考一個問題:BERT效果這么好,為什么?

Transformer是特征抽取器,和CNN、RNN并列用于特征抽取的一種深層級網(wǎng)絡結構,而BERT可視為一種兩階段的處理流程,這個流程使用的框架便是Transformer,再簡單解釋,你可以理解為BERT利用Transformer學會如何編碼、存儲信息知識。這是兩者的關系。

在Transformer和BERT 之前,大家最常用的是CNN、RNN、Encoder-Decoder三大技術,覆蓋了NLP領域80%的技術與應用,Transformer和BERT比它們好在哪里?每層網(wǎng)絡學到了什么?多學了哪些知識?這些問題都是我一直在思考的,想在今天和大家分享一下目前的一些研究結論。

今天分享的第一部分是關于BERT和Transformer的簡介。從基本原理、流程、優(yōu)缺點以及改進點講起,帶領大家對它們有更直觀的了解。

第二部分,介紹下打開Transformer和Bert模型結構黑盒的探尋方法。多層的Transformer 學習了哪類知識、以什么形式編碼、編碼哪一類的特征、每一層擅長解決什么問題,要想了解這些,需要有些方便的手段理解這個黑盒子,本部分介紹目前有哪些常用的技術手段來探尋這些問題,介紹主流的探尋方法。

第三部分,也是大家最關心的內(nèi)容,通過上述介紹的探尋方法來研究BERT的參數(shù),看看它包含的奧秘,我們可以得到一些結論:BERT到底學到了什么?有預訓練模型比無預訓練模型到底多學習了什么?這部分介紹目前的一些結論。

最后,再和大家分享一些現(xiàn)有的結論與經(jīng)驗。雖然在Bert在工程應用中還存在一些問題,比如模型太大導致的在線推理延時高等問題,但是我想只要算法效果好,工程應用不是阻礙,總能夠有辦法克服。

第一部分:BERT和Transformer

大家都知道,BERT是2018年10月提出來的,提出后無論是在工業(yè)界還是學術圈都產(chǎn)生了很大的影響,根本原因就是模型效果太好了,讓人不得不服,隨后各種應用也取得了一些突破性的結果。之前我寫過一篇文章《Bert時代的創(chuàng)新:Bert在NLP各領域的應用進展 》,介紹了一些應用情況,總體而言,BERT在各應用方向中都取得了很好的效果,但不同領域中也存在一些不同的情況。如果把BERT視為NLP領域中一項里程碑式工作,相信大家對此不會質(zhì)疑。

BERT取得了這么好的效果,讓大家不禁想:將BERT嘗試應用于自己的業(yè)務中,是否可以帶來好的業(yè)務效果提升?BERT模型本身又有哪些問題值得我們進一步探索與思考呢?

我整理歸納了看過的文獻數(shù)據(jù),BERT在NLP各個領域中的應用基本都有效果提升,但是不同領域的提升效果有所不同,同一領域中任務不同、數(shù)據(jù)集不同使提升效果也有所不同。下面簡單概述一下某些領域的應用效果情況(截止2019 年 5 月):QA領域中大多都嘗試使用了BERT模型,性能提升了30%到70%; 閱讀理解領域應用BERT后性能有30%到50%的提升;信息檢索領域,短文檔檢索性能提升比長文檔性能提升更明顯,短文檔提升了25%到106%,長文檔提升了20%到30%;在對話機器人領域中,目前BERT可以使性能提升5%到40%;(這跟具體應用、子任務有關系,有些子方向比較適合用BERT,有些可能不太適合。)文本摘要領域提升也不明顯,大約有10%左右,貌似BERT的潛力還未發(fā)揮出來;其他應用諸如中文分詞、文本分類、文本生成都嘗試在工作中使用BERT,但是提升效果不太明顯。

到這里,我覺得有一個問題大家需要思考:看到這些結果和結論,問自己一下為什么會這樣子?為什么BERT對于不同的NLP應用領域促進效果相差這么大,背后的原因是什么?這是一個好問題。剛剛講到的都是BERT在應用方面帶來的改進效果,從BERT出現(xiàn)到今天,BERT之前的Transformer到現(xiàn)在也已經(jīng)有兩年多的時間,而無論是BERT還是Transformer,大家對它們復雜的內(nèi)在機理了解并不多,但這是值得探索的,有助于大家加深對BERT和Transformer的了解。

雖然BERT比較新,效果也好,但一定也存在一些缺點,它既然有缺點我們就可以找到它的缺點,改造缺點,讓模型越來越強,效果越來越好。接下來,我列舉一些BERT的可能改進方向:

第一,文本生成模型。什么是文本生成呢?機器翻譯中把你英文句子輸入模型把它翻譯成中文,這是生成類的任務;文本摘要,也是典型的生成類任務,模型從文章中摘出三句話作為主題內(nèi)容的概括。雖然使用BERT模型在生成類任務中提升了效果,但提升不多,BERT在生成類任務中的作用還沒有發(fā)揮出來,應該有更好的改造方法,這是非常重要的一個研究方向,如果這方面能做好,在很多的生成類任務比如機器翻譯、文本摘要的工作都會取得巨大的成果。

第二,結構化知識引入。把人學好的結構化的知識引入模型,如何在BERT中加入結構化知識,這也是一個有價值的改進方向,可以直接用來解決我們手頭知識相關的NLP任務。

第三,多模態(tài)融合。我們現(xiàn)在應用BERT大多數(shù)時候還是在文本,其實多模態(tài)的場景應用非常多,比如發(fā)一條微博,里面包含很多的信息,有你發(fā)的文本內(nèi)容、圖片、視頻,還有社交關系在里面,要想充分理解一條微博,不僅要好好理解它的文本,還要理解圖片講了什么、視頻講了什么,這是不同的模態(tài)。不同模態(tài)又該怎么做到更好的融合?把BERT融入不同的模態(tài)體系,這肯定是非常有前景的BERT的改進方向。

第四,更大、更高質(zhì)量的訓練數(shù)據(jù)。怎么把數(shù)據(jù)量及訓練方法進一步優(yōu)化,是個簡單直接的優(yōu)化方向。目前很多證據(jù)證明:直接增加訓練數(shù)據(jù)規(guī)模和質(zhì)量,直接就會對Bert效果有明顯提升,這說明我們還沒走到預訓練模型的天花板。BERT剛開始做預訓練的時候數(shù)據(jù)量大約十幾G,假設有一家公司財大氣粗,錢不是問題,可以用無限量數(shù)據(jù)做預訓練,那么毫無疑問Bert效果會有大幅度的提升。但是現(xiàn)在有人做這個事嗎?沒有,因為這太燒錢了。從現(xiàn)有的結果來看,假設某位同學很有錢,說我想改造一下BERT,很簡單,加大數(shù)據(jù)規(guī)模,然后數(shù)據(jù)的形態(tài)更豐富一些,數(shù)據(jù)質(zhì)量更高一點,你就做這個事,把數(shù)據(jù)堆上去,有可能做出比目前能看到BERT更好的指標。通過增加數(shù)據(jù)繼續(xù)提升BERT效果,雖然這沒有什么技術含量,但其實是一個簡單易行的解決方法。

第五,更合適的訓練目標和訓練方法。這個也是相對簡單的改進方向,但是其實是特別容易見效的,目前也有一些工作。

第六,多語言融合?,F(xiàn)在做的BERT是單語言,不同語言之間怎么在Bert體系里面融合起來,這也是目前BERT值得改進的好方向之一。

當然還有其它優(yōu)化方向,因為不是今天主題,所以不一一細說了,接下來,和大家分析一下BERT和BERT的層級結構。

如圖所示,這是Transformer典型的層級結構,Transformer由若干個Block堆疊而成,作為基本構件,每一個Block里是一個小生態(tài)系統(tǒng),里面又涉及很多技術,其中四個最關鍵的子部分:Layer Norm、Skip Connection、自注意力和前饋神經(jīng)網(wǎng)絡。

BERT由兩階段構成,每個階段有自己的特點和目標。第一個階段是預訓練階段,第二個階段是Fine-Tuning階段。預訓練階段用大量無監(jiān)督的文本通過自監(jiān)督方式進行訓練,把文本包含的語言知識以參數(shù)形式編碼到Transformer中,F(xiàn)ine-Tuning一般是有監(jiān)督的,數(shù)據(jù)量比較小,在模型結構上做分類任務以解決當前任務。第一階段跟第二階段怎么連接起來的?在預訓練階段Transformer學到了很多初始化的知識,第二階段就把初始化網(wǎng)絡學到的語言知識拿來用,F(xiàn)ine-Tuning引入新的特征解決你的問題。

所以,為什么BERT效果這么好?為什么以前的模型效果沒有BERT好?因為,第一階段編碼了文本中大量的語言學知識,在Bert之前,沒有用那么多的文本數(shù)據(jù),而且是無監(jiān)督的方式。那么我們關心的是:BERT里的Transformer到底學到了什么?比傳統(tǒng)模型多學了什么知識?這是關鍵。

應該說,Transformer和BERT都還不十分成熟,結構又復雜,實際應用也很復雜,如果沒有對它們的深入了解、不知道它們的結構及優(yōu)缺點,我們就很難能更好的改進它們,以得到更好的BERT和Transformer。怎樣能加深對它們的認識呢?這就是接下來要和大家深入探討的內(nèi)容。

第二部分:探尋方法

我們說了,Bert通過預訓練,學到了語言知識,那么這些知識在哪里?就在Transformer的參數(shù)里。但是,我們看到的都是一堆參數(shù),就是大量的數(shù)值,看不出里面的含義,于是問題轉(zhuǎn)化成了:我們怎么知道多層的Transformer的每層都學到了什么,有什么方法可以看出來它學到了什么?一般把這些技術叫做探尋方法,那么常用的探尋方法有哪些?

在開始講BERT的探尋方法之前,先從DNN這個著名的黑盒系統(tǒng)開始講起。大家都知道DNN效果好,但每個神經(jīng)元學到了什么,不知道;也看不到,不好理解,能看到就是一個神經(jīng)元的響應值或大或??;神經(jīng)元之間的關系也不知道,大家不理解DNN是怎么工作的。學術界早就意識到這個問題了,自從DNN出來之后,好多人試圖尋找方法,試圖讓大家理解DNN是怎么工作的,探尋每個神經(jīng)元學了什么。特征可視化是典型的破解黑盒的方法,這個方法在圖像領域中很常用,但并不是通用的。今天要講的是BERT和Transformer的探尋方法。

目前有幾種典型的方法,第一是可視化(2D t-SEN),用2D圖的方式展示。如下圖所示,用Transformer的每層的特征,各自把名詞、短語進行聚類,同一顏色代表同一類的短語,如果聚類效果好,說明這層編碼了這類知識。通過這種方法,進而知道哪一層適合解決什么問題,編碼哪些知識,這是典型的可視化方法。

第二個方法是Attention圖。對探索Transformer所學到知識的探尋手段來說,Attention圖是非常關鍵的方法,它可以形象地觀察一個單詞和其它單詞的關系,聯(lián)系的緊密程度。如下圖所示,看一看介詞'at'和誰的關系更密切?連接線越粗,表示聯(lián)系越緊密,值越大邊就畫得更粗一點,發(fā)現(xiàn)跟'Auction'更粗,證明了BERT學到了介詞和主名詞之間的關系,更重要是通過Attention圖的方式能夠知道學到了哪些知識。

第三種方法是Probing Classifier。對于Transformer某一層某個單詞的Embedding節(jié)點,如果想知道它學到了什么東西,怎么做?我們把Transformer結構參數(shù)固定住,保持不變,知識已經(jīng)編碼在參數(shù)中,需要找到一種探尋方法,知道每個層次學到了什么。如下圖所示的例子很直觀,Transformer參數(shù)固定住,最高層Transformer對應的單詞有個Embedding,表示通過各層學到的知識,怎樣知道這個Embedding學到了什么?上面加入一個小分類網(wǎng)絡,這個網(wǎng)絡結構很簡單,我們不希望它自身學習過多的知識,只希望它利用Transformer已經(jīng)編碼好的知識去進行詞性標注,如果能標注正確,表明Transformer這一層已經(jīng)編碼學到了詞性標注相關知識,如果標注錯誤表明沒有編碼這個知識。利用這樣一個簡單分類器來完成某個具體任務,而分類器里面的參數(shù)很少,基本沒有什么參數(shù),所有的決策信息來自于Transformer本身學到的知識,如果任務能夠解決得很好,也就說明了Transformer中存儲的與這類任務相關的知識比較多。這樣就探測出了Transformer每一層到底學到了哪類知識。

還有一種改進方法叫做Edge Probing Classifier。它和Probing Classifier的區(qū)別是什么?Probing Classifier只能判斷一個單詞對應的Embedding節(jié)點學到了什么,但對于很多任務來說有其他的需求。比如如果我們需要知道一個短語、兩個單詞和三個單詞學到了什么,或者句中的A單詞和B單詞是什么關系,如何通過Edge Probing Classifier方式來獲知它學到了什么知識呢?如下圖所示,Transformer仍然固定參數(shù),簡單分類器的輸入變成多節(jié)點輸入,上面的Span可能覆蓋一個片段,如一個單詞,兩個單詞,然后構建一個簡單的分類器解決分類任務,進而觀測預測的精準性,根據(jù)預測準確性,來獲知到底學到了什么知識。它和Probing Classifier的主要區(qū)別是能夠同時偵測多節(jié)點編碼的知識。

上面介紹的是一些常用的探測方法,有了這些探測方法,就能夠去看看Bert或者Transformer到底學到了什么知識了。如果歸納一下目前的研究結論的話,大致概述一下:BERT訓練好之后,低層Transformer主要學習自然語言表層的特征,中層學習編碼句法信息,高層編碼了NLP的語義特征。很多實驗都已證明這一結論。

怎么得出的這個結論?上圖的一系列任務中說明了為什么會得出這個結論。POS、成分分析、DEPS、Entities、SRL、COREF、關系分類,從上到下,越往下這個任務越需要偏向高層語義的知識才能解決好。POS詞性標注是簡單任務,偏向表層特征,關系分類則是純語義的任務,不理解語義便無法很好的解決任務,從上到下逐漸趨向語義任務。柱狀圖表示要解決這個任務,發(fā)揮作用的是Transformer的哪些層,得分越高,代表需要的層深越高。如關系分類任務的9.40和POS任務的3.39,意味著,關系分類任務更依賴于Transformer高層的貢獻,POS任務的信息主要從Transformer低層中獲取,從圖中可以看出,隨著層深逐步增高,任務逐步趨向語義任務。

如果只把Transformer分為低、中、高層,這還是有些粗糙,我們希望再深入、更細致地剖析每層的作用大小。如上圖所示,橫坐標表示Transformer有24層,縱坐標代表發(fā)揮作用的大小,指標高代表這一層發(fā)揮的作用越大。從圖中可以看出,解決好詞性標注任務,第一層、第二層、第三層、第四層貢獻最大,其他層貢獻不太大。用的是什么方式?就是上面剛剛講到的Probing Classifier方式,說明Transformer低層比較適合解決表層特征的任務,詞性信息都被編碼在這里,也說明了低層編碼了表層和句法知識。從細分圖得出的具體結論可概括得到:句法知識具備Layer局部性,對某些層依賴性大,而語義知識,不具備Layer局部性,知識編碼在各層中。

上面得到的結論是符合預期的,而接下來的這個結論比較有意思。如下圖中標紅所示,Transformer高層傾向于編碼語義知識,低層編碼句法知識,而高層語義知識會對低層句法知識有反饋作用,經(jīng)過高層語義指導修正底層的句法特征?!诩竞筚愔谐榱硕鄠惗嗔О泊颉?,多倫多是個多義詞,可代表地名,也可以代表一個運動隊,如果我們把這句話輸入Transformer或BERT結構中,到底在某一層編碼的是‘多倫多’,還是‘多倫多隊’?這是我們希望知道的。

可以通過觀察0到12層的黃藍占比來判斷每層的編碼知識,黃色表示判斷出‘多倫多’為(地名),藍色認為是一個(隊名),從圖中我們看出,0層、1層、2層基本上不會認為是‘多倫多隊’(隊名),判斷‘多倫多’是(地名);而高層中‘多倫多隊’占比凸顯了,為什么如此?因為Bert發(fā)現(xiàn)了句中的單詞Smoked(抽打),發(fā)現(xiàn)了它和單詞”多倫多”存在施動-受動關系后,就更傾向于判斷多倫多是個隊名,這種語義知識是在高層編碼的,它反過來會影響中低層的判斷,從而說明了高層語義知識反過來可以修正低層的句法知識。

下面我們說明Transformer三層(低層、中層、高層)到底具體編碼了哪些語言學知識。低層對單詞位置信息的編碼比較充分。橫坐標表示層深,可以看到第2層的結果就已經(jīng)很好了,而第四層編碼的預測結果則下滑的非常嚴重,說明低層對單詞位置進行編碼,高層已經(jīng)基本丟失了位置信息,無法解決位置信息任務;位置信息主要在低層來編碼學習的,高層編碼了低層單詞之間形成的結構信息,位置信息只是低層給高層使用用于構造單詞之間結構關系。

此外,低層還對短語信息進行編碼、對特殊符號進行編碼。

中層是對句法信息的編碼。句法預測任務中,橫坐標是24層的每一層,這是效果指標。哪層對句法預測效果比較好,效果好也就意味著編碼信息更多,可以看出3到8層對句法預測比較好。

高層對語義信息進行編碼。如下圖所示指帶消解任務,代詞’He‘和‘She’可以指帶什么?BERT是否學習了?從圖中可以看出指代關系已經(jīng)編碼到BERT特征中了,因而解決效果比較好。

第三部分:BERT 的預訓練比無預訓練過程多學了什么?

預訓練模型用上面提到的Probing Classifier方式完成探測后,再用無預訓練、不用初始化的模型直接學習的模式,兩者進行實驗對比。我們會發(fā)現(xiàn):無預訓練模型在句子長度預測任務表現(xiàn)要好于預訓練模型BERT,說明了預訓練模型靠犧牲部分表層特征表達能力,獲得了更多、更豐富的復雜特征表達能力。

我們知道目前有很多不同的預訓練模型,它們之間相比,有什么異同?Bert預訓練模型相對其它模型多學到了什么?相對于Cove、Elmo等其它模型,Bert模型編碼了更多的句法信息,語義信息大致相當。另外,BERT比GPT多學了什么東西?因為BERT層數(shù)更深,更有利于編碼語義特征。最后,相對傳統(tǒng)模型比如RNN和CNN,ELMO多學了什么東西?ELMO通過預訓練,比CNN學到了更多、更長的上下文特征。

最后我們概括一下,Bert的Transformer低層學了表層特征,中間層學了句法特征,高層學了語義特征,雖然目前都有相關工作在進行,但還不夠細致,需要做更深入的探索,相信未來會有更多更好的研究出現(xiàn)。我今天的分享就到這里,謝謝大家!

評論列表

頭像
2024-04-03 19:04:31

每次有疑惑都會請教,你們對我的幫助真的很大,謝謝!

頭像
2024-03-30 04:03:06

求助

 添加導師微信MurieL0304

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單干貨

發(fā)表評論 (已有2條評論)