BERT問答
- BERT分爲哪兩種任務,各自的作用是什麼;
- 在計算MLM預訓練任務的損失函數的時候,參與計算的Tokens有哪些?是全部的15%的詞彙還是15%詞彙中真正被Mask的那些tokens?
- 在實現損失函數的時候,怎麼確保沒有被 Mask 的函數不參與到損失計算中去;
- BERT的三個Embedding爲什麼直接相加?
- BERT的優缺點分別是什麼?
- 你知道有哪些針對BERT的缺點做優化的模型?
- BERT怎麼用在生成模型中?
- BERT的兩種任務:
- Masked Language Model (MLM):這個任務的作用是讓模型學會理解文本中的上下文信息。在這個任務中,約15%的輸入詞彙會被隨機遮蔽,然後模型需要預測這些被遮蔽的詞彙。這幫助BERT學習詞彙的雙向上下文表示。
- Next Sentence Prediction (NSP):這個任務的作用是讓模型理解文本之間的關係。模型會接受一對文本句子作爲輸入,然後判斷這兩個句子是否是連續的。這有助於BERT學習句子和文本段落之間的關係。
- MLM預訓練任務的損失函數:
- 在計算MLM任務的損失函數時,只參與計算那些真正被Mask的tokens。BERT的輸入序列中,大約15%的詞彙會被隨機選擇並替換爲[MASK]符號,模型需要預測這些位置上的詞彙。只有這些被遮蔽的位置上的預測與真實標籤進行比較,用於計算損失。其他位置上的詞彙不參與計算損失。
- 確保未被Mask的tokens不參與損失計算:
- 在實現損失函數時,通常會使用掩碼(masking)來確保未被Mask的tokens不參與損失計算。只有真正被Mask的位置上的預測與真實標籤進行比較,其他位置上的損失被忽略。
- BERT的三個Embedding相加:
- BERT模型中包含三種嵌入(Embedding):Token Embedding、Segment Embedding和Position Embedding。這三種嵌入分別用於表示詞彙、句子片段和詞彙的位置信息。它們被相加在一起,以創建輸入序列的最終表示。這種相加操作允許模型同時考慮詞彙、句子關係和位置信息,有助於模型更好地理解文本的上下文。
- BERT的優缺點:
- 優點:
- 強大的上下文表示:BERT學會了深度的上下文表示,適用於多種自然語言處理任務。
- 預訓練和微調:可以通過預訓練模型在特定任務上微調,使其適應各種應用領域。
- 解決一詞多義問題:通過上下文信息,能夠更好地處理一詞多義問題。
- 缺點:
- 預訓練代價高昂:訓練BERT等大型模型需要大量的數據和時間。
- BERT沒有解碼器部分,因此不能直接用於生成序列的任務,如機器翻譯。
- 優點:
- BERT的改進模型:
- ALBERT使用了參數共享策略,規模更小,NSP任務改成了SOP任務
- RoBERTa只使用MLM任務,去掉了NSP任務,從原版靜態掩碼改爲動態掩碼,使用了更大規模的訓練數據。
- BERT在生成模型中的應用:
- BERT本身不是生成模型,但可以與生成模型結合使用,以改善生成任務的性能。一種常見的方法是將BERT用作編碼器,將其生成的上下文表示饋送到生成模型(如GPT-3)中,以幫助生成更準確的文本。這種結合可以用於文本生成、對話系統和自動摘要等任務。
BERT精讀
BERT: Bidirectional Encoder Representations from Transformers,雙向Transformer編碼器,用來做預訓練,針對一般的語言理解任務。
BERT沒有decoder結構,和單向的GPT相比,機器翻譯、文本摘要一類的生成性任務不太好做。
Abs
BERT與ELMo和GPT相關,利用無標記文本聯合左右的上下文信息來預訓練雙向表示。
- BERT v.s. ELMo:ELMo基於RNN,BERT基於Transformer;BERT+額外輸出層就可以應用到不同的下游任務,只需要微調最上層;而ELMo應用到下游任務要對架構做調整
- BERT v.s. GPT:都基於Transformer;GPT學習單向表示,由左側做預測,BERT學習雙向表示
Intro
預訓練語言模型主要用於兩類NLP任務:① 句子層面的任務 ② 詞源層面的任務 (token-level)
預訓練表示用於下游任務的策略:① 基於特徵 (ELMo學到的表示作爲新的特徵輸入) ② 基於微調 (GPT根據新的數據集調整模型權重)
單向語言模型存在侷限性!⇒ BERT:雙向語言模型 ① 每次隨機mask一些tokens,預測被蓋住的詞(完形填空)②下一句預測(兩個句子是否相鄰)
Related
- 無監督基於特徵 - ELMo
- 無監督基於微調 - GPT
- 在有標記數據上做遷移學習
Method
2 steps: ① pre-training ② fine-tuning
架構
多層雙向Transformer的編碼器
L - Transformer塊的個數 H - 隱層大小 A - 多頭自注意力機制裏的head個數 A * 64 = H
$BERT_{BASE}$:110M參數 L = 12, H = 768, A = 12
$BERT_{LARGE}$:340M參數 L = 24, H = 1024, A = 16
參數計算部分可以去複習Transformer精讀的編碼器架構
輸入/輸出表示
輸入:一個句子/一個句子對,作爲一個sequence輸入,用WordPiece來切詞
[CLS][句子A][SEP][句子B]
CLS學習整個序列的信息
每個token在嵌入層的輸出(進入BERT的輸入)由本身的embedding+屬於哪個句子的embedding+ 位置embedding組成,每個embedding都是學習得到的
預訓練
-
Masked LM (MLM) : WordPiece生成的每個token(即不包括CLS和SEP)有15%可能性被mask
❗微調的時候不用mask,導致了預訓練和微調的mismatch
解決方法:15%被mask的詞源裏,80%的可能真的被[MASK],10%的可能被替換爲隨機token,10%的可能不變(模擬微調的場景)
-
Next Sentence Prediction (NSP) : 判斷句子對<A, B>是否相鄰(50% IsNext,50%NotNext)
微調
根據特定的下游任務設計輸入/輸出,BERT+輸出層經過softmax得到label
- Case 1:情感分析
用預訓練參數初始化BERT比隨機初始化更快更好!
- Case 2:詞性標註
- Case 3:立場分析
- Case 4:基於文本提取的QA
實驗
任務集benchmark:General Language Understanding Evaluation (GLUE)
在9個任務上取正確率均值,評估自監督學習模型的好壞
拓展
-
預訓練sequence-to-sequence模型
編碼器輸入被破壞的序列,解碼器重建輸入
破壞的方式多樣:mask單字、刪除、置換、旋轉、填詞
-
BERT是怎麼工作的?
Case 1:
和CBOW很像,結合了上下文的深度word embedding
推測:BERT學到了上下文相關的語義,同義字學到的embedding比較近
Case 2:
但BERT不僅能學到語義,沒有含義的句子也能拿來做分類任務!(如DNA分類)
推測:BERT的能力不完全來自於能看懂文章,還可能有其他理由。(或許本質上就是比較好的初始化參數!)
Case 3:
用104種語言預訓練的Multi-lingual BERT,用英文QA微調,在中文QA上做測試,效果竟然不錯!
推測:BERT能學到跨語言的同義字對齊(深 - deep)實驗證明對齊需要大量訓練數據!
Case 4:
如果不管什麼語言,同義字的embedding都很近,重建時語言爲什麼不會亂掉?
推測:BERT還可以學到不同語言之間的差異!
把所有中文embedding的均值和英文embedding的均值做差值,英語輸入通過Multi-BERT得到的輸出加上這個差值做重建,或許能得到相近的中文詞!
實驗發現,真的可行!!
非常有趣的結果!
我的個人想法:不同的語種或許可以視爲不同的domain,加上均值差異的過程或許可以視爲特徵對齊,實際上是在做域適應(Domain Adaptation)!
那麼機器翻譯可不可以當成DA來做?
有空準備實驗一下自己的想法,但大概率已經有前輩做過了吧!
-
模型壓縮
BERT是一個很大的模型,有沒有辦法讓它變小呢?
因此出現了Distill BERT、Tiny BERT、Mobile BERT、Q8BERT、ALBERT…
放一個鏈接:
-
Adaptor
BERT是個大模型,對每一個下游任務都做微調,多個下游任務要存儲大量參數!
因此引入Adapter,微調時只調整Adaptor的參數,多個下游任務可以共享model參數!
下圖爲Adaptor的位置及其架構:
-
特徵加權
每一層抽取出來的信息會不一樣,不同的下游任務可能會關注不同層的信息,哪個層的信息比較重要(權值)讓下游任務自己來學習
-
UniLM
既可以做Encoder,也可以做Decoder,也可以作爲Encoder+Decoder+ ELECTRA
-
ELECTRA
對於每個token的輸出都做二元分類:yes/no,預測當前token是否被替換
比預測mask的詞更簡單,同時每個位置的輸出都能用上
如果是意思相差很大的詞,則學到的無意義(對機器來說太簡單!)
怎麼生成意思差不多但又不一樣的詞呢?用small BERT來生成被mask的詞!
注意:這不是GAN!small BERT自己訓練,不需要騙過分類器