百分點認知智能實驗室出品:深度遷移學習十八問

編者按

深度遷移學習是基於深度神經網絡的遷移學習方法,BERT通過預訓練模型達到深度遷移學習的效果,自從2018年底BERT橫空出世以來,就以勢不可擋的姿態橫掃了衆多榜單,甚至在閱讀理解任務SQuAD 中超越人類水平。BERT在公檢法、媒體出版、軍工、快消零售等工業界也迅速落地,如百分點智能對話系統、百分點智能審校系統和百分點智能翻譯系統等。BERT幾乎在所有的下游任務中效果都獲得了明顯提升,BERT自此開創了一個NLP的新時代,那就是pre-train + fine-tuning的時代。

基於BERT的各種改進版預訓練模型層出不窮,令人眼花繚亂,似乎一不小心就會落伍。但是萬變不離其宗,只要掌握了一些最基本的的思想、技術,就能讓自己緊跟大神們的腳步,讓更優秀的算法模型在工業界持續落地。百分點認知智能實驗室梳理了以BERT爲代表的基於fine-tuning模式的深度遷移學習中一些疑難問題,整理出18個典型的問題,對理解BERT論文和源代碼有明顯的幫助,因此分享給大家。

本文作者:崔丙劍 蘇海波

基本概念

1.如何正確理解深度遷移學習?

答:遷移學習是機器學習的一個重要分支,是指利用數據、任務、或模型之間的相似性,將在源領域學習過的模型,應用於新領域的一種學習過程。

百分點認知智能實驗室出品:深度遷移學習十八問

圖1: 遷移學習示意圖

遷移學習主要有幾種形式:基於樣本的遷移、基於特徵的遷移、基於模型的遷移和基於關係的遷移。重點說下基於模型的遷移,其基本思想是指從源域和目標域中找到他們之間共享的參數信息,以實現遷移。

百分點認知智能實驗室出品:深度遷移學習十八問

圖2: 基於模型的遷移學習

深度遷移學習主要就是模型的遷移,一個最簡單最常用的方法就是fine-tuning,就是利用別人已經訓練好的網絡,針對目標任務再進行調整。近年來大火的BERT、GPT、XLNET等都是首先在大量語料上進行預訓練,然後在目標任務上進行fine-tuning。

  1. 預訓練方法中基於特徵的方法與基於微調的方法本質區別在哪裏?

答:特徵提取(Feature-extract):特徵提取是使用之前訓練好的模型對新的樣本生成特徵向量,然後將這些特徵作爲task-specific模型的輸入,訓練新的模型參數。比如BERT就是之前學好的模型,把一個句子輸入到BERT,可以得到這個句子的向量表示,然後將這個向量作爲後續的比如分類模型的輸入,在訓練的過程中只訓練後面的分類模型,BERT的輸出僅僅是作爲分類模型的輸入特徵。

模型微調(Fine-tuning):不同於特徵提取的方式要另起竈爐針對具體任務設計新的模型,模型微調是直接使用已訓練好的模型,針對當前的任務對輸出層簡單修改,然後在當前任務的數據上進行訓練,對部分網絡層的參數進行微調,讓模型更適合當前的任務。這種模型微調的方式能充分利用深度神經網絡強大的泛化能力,還避免了設計新的的模型,無需從頭開始訓練,能達到更快的收斂速度和更好的效果。

模型輸入

  1. BERT的輸入有三個embedding,各自的作用是什麼?

答:BERT embedding layer有三個輸入,分別是token-embedding、segment-embedding和position-embedding。

Token-embedding:將單詞轉換爲固定維的向量表示形式,在BERT-base中,每個單詞都表示爲一個768維的向量。

Segment-embedding:BERT在解決雙句分類任務(如判斷兩段文本在語義上是否相似)時是直接把這兩段文本拼接起來輸入到模型中,那麼模型是如何區分這兩段文本呢,答案就是通過segment-embedding。對於兩個句子,第一個句子的segment-embedding部分全是0,第二個句子的segment-embedding部分全是1。

Position-embedding:BERT使用transformer編碼器,通過self-attention機制學習句子的表徵,self-attention不關注token的位置信息,所以爲了能讓transformer學習到token的位置信息,在輸入時增加了position-embedding。

  1. BERT的輸入有token-embedding、segment-embedding和position- embedding三個向量,三者之間是拼接的關係還是相加的關係,維度分別是多少?

答:三個向量是相加後作爲第一層transformer的輸入,三個向量的維度都是768。Pytorch版BERT-embedding具體實現代碼如下,從中我們可以明顯看出是相加的關係。

百分點認知智能實驗室出品:深度遷移學習十八問

圖3: BERT embedding層源碼

  1. BERT的position-embedding爲什麼是通過學習出來的而不像transformer那樣通過sinusoidal函數生成?

答:BERT論文中作者對此沒有說明原因,不過可以從以下幾點進行分析:

a) 用於機器翻譯的平行語料有限,transformer那篇論文在做機器翻譯任務時沒有像現在訓練BERT⼀樣海量的訓練數據,所以即使⽤了learned-position-embedding也未必能夠學到⼀個好的表⽰。⽽BERT訓練的數據⽐transformer⼤的多,因此可以讓模型⾃⼰去學習位置特徵。

b) 對於翻譯任務,encoder的核⼼任務是提取完整的句⼦語義信息,無需特別關注某個詞的具體位置。而BERT在做下游的序列標註類任務時需要確切的位置信息,模型需要給出每個位置的預測結果,因此BERT在預訓練過程中需要建模完整的詞序信息。

  1. BERT分詞時使用的是wordpiece,wordpiece實現了什麼功能,爲什麼要這麼做?

答:先說爲什麼這麼做,如果以傳統的方式進行分詞,由於單詞存在時態、單複數等多種變化會導致詞表非常大,嚴重影響訓練速度,並且即使一個非常大的詞表仍無法處理未登錄詞(OOV, Out Of Vocabulary),影響訓練效果。而如果以character級別進行文本表示粒度又太細。Subword粒度在word與character之間,能夠較好的解決上述分詞方式面臨的問題,已成爲了一個重要的NLP模型性能提升方法。Subword的實現方式主要有wordpiece和BPE(Byte Pair Encoding),BERT使用了wordpiece方式。

Wordpiece的功能:Wordpiece可以理解爲把⼀個單詞再拆分成subword,比如"loved","loving", "loves"這三個單詞,其實本⾝的語義都是“愛”,但是如果以單詞爲單位,那這些詞就算是不⼀樣的詞。Wordpiece算法能夠把這3個單詞拆分成"lov", "#ed", "#ing", "#es"幾部分,這些單詞都有一個共同的subword“lov”,這樣可以把詞的本⾝的意思和前綴、後綴分開,使最終的詞表變得精簡,並且寓意也能更清晰。

  1. BERT的詞彙表是怎麼生成的?

答:可能很多人沒思考過這個問題,雖然在上一個問題中我們已經知道wordpiece會把單詞拆分成subword,但是能拆分的前提是有一個subword詞彙表。這個問題中我們就來詳細看下這個subword詞彙表的生成方法。

將wordpiece詞彙表生成之前我們還是先看下BPE詞彙表是怎麼生成的,因爲兩者非常相似。

BPE詞彙表生成算法如下:

a) 準備訓練語料用於生成subword詞表,需要量足夠大;

b) 預設定好期望的subword詞表的大小;

c) 將單詞拆分爲字符序列並在末尾添加後綴“ </ w>”,統計單詞頻率,例如“ low”的頻率爲5,那麼我們將其改寫爲“ l o w </ w>”: 5。這一階段的subword的粒度是單字符;

d) 統計連續字節對出現的頻率,選擇頻率最高的合併成新的subword;

e) 重複第4步,直到subword詞表大小達到第2步設定的值,或下一個最高頻的字節對出現頻率爲1。

下邊來看一個例子:假設我們的訓練語料爲:

lower出現2次,newest出現6次,widest出現3次,low出現5次

根據上述第3步的操作可以處理成如下格式:

{'l o w e r </w>': 2, 'n e w e s t</w>': 6, 'w i d e s t </w>': 3, 'l o w </w>': 5}

其中的key是詞表中的單詞拆分成字母,末尾添加後綴“</w>”,value代表單詞出現的頻率。此時初始的詞表中是訓練語料中所有單詞的字母集合,大小爲10,如下表:

[l, o, w, e, r, n, s, t, i, d]

我們設定最終的詞表大小爲18,然後開始整個算法中最重要的是第4步,過程如下:

原始詞表: {'l o w e r </w>': 2, 'n e w e s t </w>': 6, 'w i d e s t </w>': 3, 'l o w </w>': 5}

出現最頻繁的序列: ('s', 't') 9

將”st”加入詞表,第1次循環結束,此時詞表大小爲11;

合併最頻繁的序列後的詞表: {'n e w e st </w>': 6, 'l o w e r </w>': 2, 'w i d e st </w>': 3, 'l o w </w>': 5}

出現最頻繁的序列: ('e', 'st') 9

將”est”加入詞表,第2次循環結束,此時詞表大小爲12;

合併最頻繁的序列後的詞表: {'l o w e r </w>': 2, 'l o w </w>': 5, 'w i d est </w>': 3, 'n e w est </w>': 6}

出現最頻繁的序列: ('est', '</w>') 9

將“est</w>”加入詞表,第3次循環結束,此時詞表大小爲13;

合併最頻繁的序列後的詞表: {'w i d est</w>': 3, 'l o w e r </w>': 2, 'n e w est</w>': 6, 'l o w </w>': 5}

出現最頻繁的序列: ('l', 'o') 7

將“lo”加入詞表,第4次循環結束,此時詞表大小爲14;

合併最頻繁的序列後的詞表: {'w i d est</w>': 3, 'lo w e r </w>': 2, 'n e w est</w>': 6, 'lo w </w>': 5}

出現最頻繁的序列: ('lo', 'w') 7

將“low”加入詞表,第5次循環結束,此時詞表大小爲15;

合併最頻繁的序列後的詞表: {'w i d est</w>': 3, 'low e r </w>': 2, 'n e w est</w>': 6, 'low </w>': 5}

出現最頻繁的序列: ('n', 'e') 6

將“ne”加入詞表,第6次循環結束,此時詞表大小爲16;

合併最頻繁的序列後的詞表: {'w i d est</w>': 3, 'low e r </w>': 2, 'ne w est</w>': 6, 'low </w>': 5}

出現最頻繁的序列: ('w', 'est</w>') 6

將“west</w>”加入詞表,第7次循環結束,此時詞表大小爲17;

合併最頻繁的序列後的詞表: {'w i d est</w>': 3, 'low e r </w>': 2, 'ne west</w>': 6, 'low </w>': 5}

出現最頻繁的序列: ('ne', 'west</w>') 6

將“newest</w>”加入詞表,第8次循環結束,此時詞表大小爲18,整個循環結束。

最終我們得到的詞表爲:

[l, o, w, e, r, n, s, t, i, d, st, est,est</w>, lo, low, ne, west</w>, newest</w>]

Wordpiece與BPE稍有不同,主要區別在於BPE是通過最高頻率來確定下一個subword,而wordpiece是基於概率生成新的subword,另一個小的區別是wordpiece後綴添加的是“##”而不是“<\w>”,整個算法過程如下:

a)準備訓練語料用於生成subword詞表,需要量足夠大;

b)預設定好期望的subword詞表大小;

c)將單詞拆分爲字符序列並在末尾添加後綴“##”;

d)從所有可能的subword單元中選擇加入語言模型後能最大程度地增加訓練數據概率的組合作爲新的單元;

e)重複第4步,直到subword詞表大小達到第2步中設定的值,或概率增量低於某一閾值。

  1. BERT的輸入token-embedding爲什麼要在頭部添加"[CLS]"標誌?

答:CLS是classification的縮寫,添加該標誌主要用於句子級別的分類任務。BERT借鑑了GPT的做法,在句子首部增加一個特殊的token“[CLS]”,在NSP預訓練任務中,就取的是“[CLS]”位置對應的最後的隱狀態,然後接一個MLP輸出兩個句子是否是上下句關係。可以認爲“[CLS]”位置的信息包含了句子類別的重要特徵。同理可以取“[MASK]”位置的向量用於預測這個位置的詞是什麼。

  1. BERT輸入的長度限制爲512,那麼如何處理長文本?

答:BERT由於position-embedding的限制只能處理最長512個詞的句子。如果文本長度超過512,有以下幾種方式進行處理:

a)直接截斷:從長文本中截取一部分,具體截取哪些片段需要觀察數據,如新聞數據一般第一段比較重要就可以截取前邊部分;

b)抽取重要片段:抽取長文本的關鍵句子作爲摘要,然後進入BERT;

c)分段:把長文本分成幾段,每段經過BERT之後再進行拼接或求平均或者接入其他網絡如lstm。

模型原理

  1. Attention機制相比CNN、RNN有什麼樣的優勢?爲什麼?

答:在傳統的seq2seq模型中,我們一般使用RNN或CNN對序列進行編碼,然後採用pooling操作或者直接取RNN的終態作爲輸入部分的語義編碼C,然後把C輸入到解碼模塊中,在解碼過程中,C對每個位置的輸出重要程度是一致的,如下圖所示:

百分點認知智能實驗室出品:深度遷移學習十八問

圖4: 普通的seq2seq

然而在自然語言中,一個句子中不同部分的重要性也是不一樣的,用RNN或CNN進行句子編碼,並不能學習到這樣的信息。因此出現了attention,顧名思義就是在解碼時能對序列中不同位置分配一個不同的注意力權重,抽取出更加關鍵和重要的信息,從而使模型做出更好的判斷,就像我們人在看一個句子時,重點關注的是其中的重要信息,對不重要的信息根本不關心或基本不關心。

百分點認知智能實驗室出品:深度遷移學習十八問

圖5: 基於attention的seq2seq

  1. BERT使用multi-head attention機制, multi-head的輸出是如何拼接在一起的?維度大小是多少?

答:mutli-head attention的計算過程如下圖所示:

百分點認知智能實驗室出品:深度遷移學習十八問
圖6: Multi-head attention計算過程

輸入向量維度爲768維,經過每個self-attention後得到隱層輸出爲64維,然後把12個輸出拼接起來得到768維的向量。

  1. BERT MLM(Masked Language Model)任務具體訓練方法爲:隨機遮住15%的單詞作爲訓練樣本,其中80%用“[MASK]” 來代替,10%用隨機的一個詞來替換,10%保持這個詞不變。這麼做的目的是什麼?

答:要弄明白爲什麼這樣構造MLM的訓練數據,我們需要首先搞明白什麼是MLM、爲什麼要使用MLM,以及MLM存在哪些問題。

a)爲什麼使用MLM:傳統的語言模型一般都是單向的,要同時獲取上下文信息的常見做法是分別訓練正向與反向的語言模型,然後再做ensemble,但這種做法並不能充分利用上下文信息。MLM 的意義在於能夠真正利用雙向的信息,使模型學習到上下文相關的表徵。具體做法就是隨機屏蔽(mask)輸入文本中的部分token,類似於完形填空,這樣在預測被mask部分的token時就能夠同時利用上下文信息。

b)MLM存在問題:由於預訓練數據中存在“[MASK]”這個token,而在實際的下游任務中對BERT進行fine-tuning時,數據中沒有“[MASK]”,這樣就導致預訓練模型使用的數據和fine-tuning任務使用的數據不一致,會影響fine-tuning的效果。

爲了讓MLM能夠學習上下文相關特徵,同時又儘量避免pre-train和fine-tuning數據不一致的問題,數據處理時就採取題目中策略,具體處理策略和原因解釋如下:

百分點認知智能實驗室出品:深度遷移學習十八問

  1. BERT的參數量如何計算?

答:要計算BERT的參數量,首先需要對BERT的結構瞭解的非常清楚,下面我們就來看下base版BERT 110M的參數到底是怎麼計算出來的。
百分點認知智能實驗室出品:深度遷移學習十八問

圖7: BERT結構圖

a) embedding層的參數
BERT的輸入有三種embedding,如下源碼中所示:

百分點認知智能實驗室出品:深度遷移學習十八問
圖8: BERT embedding層源碼

vocab_size=30522,hidden_size爲768,最大位置長度爲512,type_vocab_size=2,因此可以計算出:

embedding層的參數量 =(30522+512+2)*768=23,835,648

b) multi-headattention的參數

百分點認知智能實驗室出品:深度遷移學習十八問

圖9: Self attention計算過程

先來看下multi-head attention的計算過程:embedding層的輸出x分別與三個矩陣WQ、Wk、Wv相乘得到Q、K、V,再經過右上圖的計算得到一個self-attention的輸出,12個self-attention的輸出拼接起來得到,再經過一個線性變換得到multi-head attention的輸出。

WQ、Wk、Wv的維度均爲76864,head數爲12,線性變換矩陣爲768768,因此可以計算出:

multi-head的參數量 =76864312+768768=2,359,296

c) 全連接層(FeedForward)的參數量
全連接層把multi-head attention輸出的維度從768映射到3072又映射到768,公式如下圖所示:

百分點認知智能實驗室出品:深度遷移學習十八問

其中W1維度爲7683072,W2維度爲3072768,因此可以計算出:

全連接層的參數量 = 76830722=4,718,592

Base版BERT使用了12層transformer的encoder,因此可以計算出:

總參數量 = embedding參數量+12(multi-headattention參數量+全連接參數量)
=23,835,648+12*(2,359,296+4,718,592)=108,770,304≈110M

  1. BERT基於NSP和MLM兩個任務進⾏預訓練,如果對BERT進⾏改進,⼀個可⾏的⽅向就是增加更多的預訓練任務,那麼除了這兩個任務之外,還可以增加哪些預訓練任務呢?

答:⾸先這些預訓練任務的訓練數據要能從⽆監督的數據中獲取,這樣才能獲取到海量的訓練數據,符合這⼀條件的任務都可以進⾏嘗試,如百度的ERNIE增加了很多個預訓練任務,相比於原始BERT有了明顯的提升。幾個有代表性的預訓練任務如下:

Knowledge Masking Task:BERT的MLM任務中是對句⼦中單個的token進⾏mask,可以對於句⼦中的短語和命名實體進⾏mask。

Capitalization Prediction Task:預測單詞是否⼤寫,與其他詞語相⽐,⼤寫詞語通常具有特定的語義價值。

Token-Document Relation Prediction Task:預測⼀個段落中的某個token是否出現在原始⽂檔的其他段落中。根據經驗,在⽂檔不同部分都出現的單詞通常是⽂檔的關鍵詞,因此這⼀任務可以在⼀定程度上使模型能夠捕獲文檔的關鍵字。

Sentence Distance Task:⼀個學習句⼦間距離的任務,該任務被建模爲⼀個3類分類問題,“0”表示兩個句⼦在同⼀個文檔中相鄰,“1”表示兩個句⼦在同⼀個文檔中,但不相鄰,“2”表示兩個句子來自兩個不同的文檔。

模型的進化

15.自迴歸語言模型(AR, Autoregressive LM)與自編碼語言模型(AE, Autoencoder LM)的區別?

答:自迴歸語言模型:根據上文內容預測下一個單詞或者根據下文內容預測上一個單詞,這樣單向的語言模型就是自迴歸語言模型。LSTM、GPT、ELMO都是自迴歸語言模型。自迴歸語言模型的缺點,是不能同時利用上下文信息。

自編碼語言模型:自編碼器是一種通過無監督方式學習特徵的方法,用神經網絡把輸入變成一個低維的特徵,這就是編碼部分,然後再用一個解碼器把特徵恢復成原始的信號,這就是解碼部分。具體到語言模型中,BERT使用的MLM就是自編碼語言模型,對一些token進行mask,然後拿被mask位置的向量(包含了上下文的信息)來預測該位置真正的token。

自編碼語言模型的優點就是可以同時利用上下文信息,缺點就是預訓練階段和fine-tuning階段使用的訓練數據不一致,因爲fine-tuning階段的數據是不會被mask的。

16.XLNET相對於BERT做了哪些重要改進?

答:BERT的AE語言模型雖然能同時學習上下文信息但是會導致預訓練數據和fine-tuning階段的數據不一致從而影響fine-tuning的效果。而XLNET的思路就是使用AR語言模型,根據上文預測下文,但是在上文中添加了下文信息,這樣既解決了BERT面臨的問題也同時利用了上下文信息。

XLNET改進後的語言模型叫做PermutationLanguage Model(PLM),其重點就是permutation,用一個例子來解釋:對於一個輸入句子X=[x1, x2, x3, x4],我們希望預測x3,在正常的輸入中通過AR語言模型只能看到x1和x2。爲了在預測x3時能看到x4,XLNET的操作是固定x3的位置,然後把其它的詞進行隨機排列,得到如:[x4, x1, x3, x2],[x1, x4, x3, x2]等數據,這樣就可以使用單向的AR語言模型來學習雙向信息。

這時有人可能就會有疑問:就算訓練時可以對輸入句子進行排列組合,但是fine-tuning時沒法這樣做啊。沒錯,fine-tuning階段確實不能對輸入做排列,只能輸入原始句子,所以XLNET在預訓練階段也是不能顯示地對輸入進行排列的。爲了解決這個問題,XLNET的輸入還是原始的句子,只不過是在transformer內部利用attention mask來實現的,而無需真正修改句子中詞語的順序。例如原來的句子是X=[x1, x2, x3, x4],如果隨機生成的序列是[x3, x2, x4,x1],但輸入到 XLNET 的句子仍然是[x1, x2,x3, x4],此時設置attention mask如下圖:

百分點認知智能實驗室出品:深度遷移學習十八問

圖10: Attention mask示意圖

圖中的掩碼矩陣,白色表示不遮掩,黑色表示遮掩。第 1 行表示 x1 的掩碼,因爲x1是句子的最後一個 token,因此可以看到之前的所有 token [x3,x2,x4];第2行是x2的掩碼,因爲x2是句子的第二個token,所以能看到前一個token x3;第3行、第4行同理。這樣就實現了儘管當前輸入看上去仍然是[x1, x2, x3, x4],但是已經改成排列組合的另外一個順序[x3, x2,x4, x1]了。如果用這個例子用來從左到右訓練LM,意味着當預測x2的時候,它只能看到上文x3;當預測x4的時候,只能看到上文x3和x2,……

17.RoBERTa相對於BERT做了哪些重要改進?

答:RoBERTa相對於BERT在模型結構上並沒有改變,改進的是預訓練方法,主要改進有以下幾點:

a) 靜態mask變爲動態mask
BERT MLM任務中,有15%的樣本在預處理階段會進行一次隨機mask,具體的mask方式參考問題12,然後在整個訓練過程中,這15%的被mask的樣本其mask方式就不再變化,也不會有新的被mask樣本,這就是靜態mask。

RoBERTa採用了一種動態mask的方式,它並沒有在預處理的時候對樣本進行mask,而是在每次向模型提供輸入時動態生成mask,所以訓練樣本是時刻變化的,並且實驗表明這種動態mask的方式要比BERT原始的靜態mask效果要好。

b) 去除NSP任務
很多實驗表明NSP任務的沒多大意義,RoBERTa中去除了該任務,不過在生成數據時也做了一些改進,原始的BERT中是選擇同一篇文章中連續的兩個句子或不同文章中的兩個句子,而RoBERTa的輸入是連續的多個句子(總長度不超過512)。

c) 更多的數據、更大的mini-batch、更長的訓練時間
BERT base的訓練語料爲13G,batch-size爲256,而RoBERTa的訓練語料擴大了10到130G,訓練中batch-size爲8000,實爲大力出奇跡的傑出代表。

18.ALBERT相對於BERT做了哪些重要改進?

答:ALBERT是一個精簡的BERT,參數量得到了明顯的降低,使得BERT的大規模應用成爲可能。相對於BERT,ALBERT主要有三點改進:

a) Embedding matrix因式分解
在BERT、XLNET等模型中,embedding的維度 E 和隱藏層維度 H 是相等的,都是768,V是詞表的大小一般的3萬左右。從建模的角度來說,embedding層的目標是學習上下文無關的表示,而隱藏層的目標是學習上下文相關的表示,理論上來說隱藏層的表述包含的信息應該更多一些,因此應該讓H>>E。如果像BERT那樣讓E=H,那增大H之後,embedding matrix大小V*H會變的很大。

ALBERT採取因式分解的方式來降低參數量,先將單詞映射到一個低維的embedding空間,然後再將其映射到高維的隱藏空間,讓H>>E,這樣就可以把embedding matrix的維度從O(VH)減小到O(VE+E*H),參數量減少非常明顯。

b) 跨層權重共享
Transformer參數共享可以只共享全連接層、只共享attention層,ALBERT結合了這兩種方式,讓全連接層與attention層都進行參數共享,也就是說共享encoder內的所有參數,採用該方案後效果下降的並不多,但是參數量減少了很多,訓練速度也提升了很多。此外實驗還表明ALBERT每一層的輸出embedding相比於BERT來說震盪幅度更小一些,可以增加模型的魯棒性。

c) 修改預訓練任務NSP爲SOP
一些研究表明BERT的NSP並不適合用於預訓練任務,原因可能是負樣本來源於不同的文檔,模型在判斷兩個句子的關係時不僅考慮了兩個句子之間的連貫性,還會考慮兩個句子的話題,而兩篇文檔的話題通常不同,模型可能更多的通過話題去分析兩個句子的關係,而不是連貫性,這使得NSP任務變的相對簡單。

ALBERT中設計了SOP(Sentence-orderprediction)任務,其正樣本選取方式與BERT一致(來自同一文檔的兩個連續句子),而負樣本也同樣是選自同一文檔的兩個連續句子,但交換了兩個句子的順序,從而使模型可以更多地建模句子之間的連貫性而不是句子的話題。

參考文獻:br/>1.http://jd92.wang/assets/files/transfer_learning_tutorial_wjd.pdf
2.https://jalammar.github.io/illustrated-transformer/
3.https://medium.com/@_init_/why-BERT-has-3-embedding-layers-and-their-implementation-details-9c261108e28a
4.
https://medium.com/@makcedward/how-subword-helps-on-your-nlp-model-83dd1b836f46
5.BERT Explained: State ofthe art language model for NLP.
https://towardsdatascience.com/BERT-explained-state-of-the-art-language-model-for-nlp-f8b21a9b6270
6.https://zhuanlan.zhihu.com/p/70257427
7.https://arxiv.org/pdf/1706.03762
8.https://arxiv.org/pdf/1906.08237
9.https://arxiv.org/pdf/1907.11692
10.https://arxiv.org/pdf/1909.11942
11.https://arxiv.org/pdf/1905.07129

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