BERT的學習理解筆記

BERT的理解

從模型的創新角度看一般,創新不大,但在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類,並且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7% (絕對改進率5.6%)等。可以預見的是,BERT將爲NLP帶來里程碑式的改變,也是NLP領域近期最重要的進展。
另外一點是BERT具備廣泛的通用性,就是說絕大部分NLP任務都可以採用類似的兩階段模式直接去提升效果。
與最近的語言表徵模型不同,BERT基於所有層中的左、右語境進行聯合調整,來預訓練深層雙向表徵。只需要增加一個輸出層,就可以對與訓練的BERT表徵進行微調。就能爲更多的任務創建當前的最優模型。

1. 預訓練模型

BERT是一個預訓練的模型,那麼什麼是預訓練呢?
假設已有A訓練集,先用A對網絡進行訓練,在A任務上學會網絡參數,然後保存以備後用。當來一個新任務B,採用相同的網絡結構,網絡參數初始化的時候可以加載A學習好的參數,其他的高層參數隨機初始化,之後用B任務的訓練數據來訓練網絡,當加載的參數保持不變時,稱爲“frozen”,當加載的參數隨着B任務的訓練進行不斷的改變,成爲“fine-tuning”,即更好地把參數進行調整使得更適合當前任務B。
優點:當任務B的訓練數據較少時,很難很好的訓練網絡,但是獲得了A訓練的參數,會比僅僅使用B訓練的參數更優。

Task #1: Masked LM

爲了訓練雙向特徵,這裏採用了Masked Language Model的預訓練方法,隨機mask句子中部分token,然後訓練訓練模型來預測被去掉的token。
具體操作是:
隨機mask語料中15%的token,然後將masked token 位置輸出的final hidden vectors送入softmax,來預測masked token。
這裏也有一個小trick,如果都用標記[MASK]代替token會影響模型,所以在隨機mask的時候採用以下策略:
1)80%的單詞用[MASK]token來代替
my dog is hairy → my dog is [MASK]
2)10%單詞用任意的詞來進行代替
my dog is hairy → my dog is apple
3)10%單詞不變
my dog is hairy → my dog is hairy

Task2#: Next Sentence Prediction

爲了讓模型捕捉兩個句子的聯繫,這裏增加了Next Sentence Prediction的預訓練方法,即給出兩個句子A和B,B有一半的可能性是A的下一句話,訓練模型來預測B是不是A的下一句話
Input = [CLS] the man went to [MASK] store [SEP]
penguin [MASK] are flight ## less birds [SEP]
Label = NotNext
he bought a gallon [MASK] milk [SEP]
Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP]
訓練模型,使模型具備理解長序列上下文的聯繫的能力

2.BERT

BERT:全稱是Bidirectional Encoder Representation from Transformers,即雙向Transformer的Encoder,BERT的模型架構基於多層雙向轉換解碼,因爲decoder是不能獲要預測的信息的,模型的主要創新點都在pre-traing方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation
其中“雙向”表示模型在處理某一個詞時,它能同時利用前面的詞和後面的詞兩部分信息,這種“雙向”的來源在於BERT與傳統語言模型不同,它不是在給你大牛股所有前面詞的條件下預測最可能的當前詞,而是隨機遮掩一些詞,並利用所有沒被遮掩的詞進行預測
下圖展示了三種預訓練模型,其中 BERT 和 ELMo 都使用雙向信息,OpenAI GPT 使用單向信息
在這裏插入圖片描述
可以從git上下載已經訓練好的公開模型,對下載的模型文件進行解壓,可以看到裏面有5個文件,其中bert_model.ckpt開頭的文件是負責模型變量載入的,而vocab.txt是訓練時中文文本採用的字典,而bert_config.json是BERT在訓練時,可選調整的一些參數。

3.BERT的輸入部分

在這裏插入圖片描述
BERT的輸入部分是個線性序列,兩個句子通過分隔符分割,最前面和最後增加兩個標識符號。每個單詞有三個embedding:位置信息embedding,這是因爲NLP中單詞順序是很重要的特徵,需要在這裏對位置信息進行編碼;單詞embedding,這個就是我們之前一直提到的單詞embedding;第三個是句子embedding,因爲前面提到訓練數據都是由兩個句子構成的,那麼每個句子有個句子整體的embedding項對應給每個單詞。把單詞對應的三個embedding疊加,就形成了Bert的輸入。
如上圖所示,輸入有A句[my dog is cute]和B句[he likes playing]這兩個自然句,我們首先需要將每個單詞及特殊符號都轉化爲詞嵌入向量,因爲神經網絡只能進行數值計算。其中特殊符[SEP]是用於分割兩個句子的符號,前面半句會加上分割碼A,後半句會加上分割碼B
因爲要建模句子之間的關係,BERT 有一個任務是預測 B 句是不是 A 句後面的一句話,而這個分類任務會藉助 A/B 句最前面的特殊符 [CLS] 實現,該特殊符可以視爲彙集了整個輸入序列的表徵。
最後的位置編碼是 Transformer 架構本身決定的,因爲基於完全注意力的方法並不能像 CNN 或 RNN 那樣編碼詞與詞之間的位置關係,但是正因爲這種屬性才能無視距離長短建模兩個詞之間的關係。因此爲了令 Transformer 感知詞與詞之間的位置關係,我們需要使用位置編碼給每個詞加上位置信息。
總結一下:
(1)token embeddings表示的是詞向量,第一個單詞是CLS,可以用於之後的分類任務
(2)segment embeddings用來區別兩種句子,因爲預訓練不光做LM還要做以兩個句子爲輸入的分類任務
(3)position embeddings表示位置信息

4.NLP的四大類任務

(1)序列標註:分詞、實體識別、語義標註……
(2)分類任務:文本分類、情感計算……
(3)句子關係判斷:entailment、QA、自然語言推理
(4)生成式任務:機器翻譯、文本摘
通常而言,絕大部分NLP問題可以歸入上圖所示的四類任務中:一類是序列標註,這是最典型的NLP任務,比如中文分詞,詞性標註,命名實體識別,語義角色標註等都可以歸入這一類問題,它的特點是句子中每個單詞要求模型根據上下文都要給出一個分類類別。第二類是分類任務,比如我們常見的文本分類,情感計算等都可以歸入這一類。它的特點是不管文章有多長,總體給出一個分類類別即可。第三類任務是句子關係判斷,比如Entailment,QA,語義改寫,自然語言推理等任務都是這個模式,它的特點是給定兩個句子,模型判斷出兩個句子是否具備某種語義關係;第四類是生成式任務,比如機器翻譯,文本摘要,寫詩造句,看圖說話等都屬於這一類。它的特點是輸入文本內容後,需要自主生成另外一段文字。
上圖給出示例,對於句子關係類任務,很簡單,和GPT類似,加上一個起始和終結符號,句子之間加個分隔符即可。對於輸出來說,把第一個起始符號對應的Transformer最後一層位置上面串接一個softmax分類層即可。對於分類問題,與GPT一樣,只需要增加起始和終結符號,輸出部分和句子關係判斷任務類似改造;對於序列標註問題,輸入部分和單句分類是一樣的,只需要輸出部分Transformer最後一層每個單詞對應位置都進行分類即可。從這裏可以看出,上面列出的NLP四大任務裏面,除了生成類任務外,Bert其它都覆蓋到了,而且改造起來很簡單直觀。(https://zhuanlan.zhihu.com/p/49271699)

5.模型的評價

(1)優點
BERT是截止至2018年10月的最新的的state of the art模型,通過預訓練和精調可以解決11項NLP的任務。使用的是Transformer,相對於rnn而言更加高效、能捕捉更長距離的依賴。與之前的預訓練模型相比,它捕捉到的是真正意義上的bidirectional context信息
(2)缺點
作者在文中主要提到的就是MLM預訓練時的mask問題:
1)[MASK]標記在實際預測中不會出現,訓練時用過多[MASK]影響模型表現;
2)每個batch只有15%的token被預測,所以BERT收斂得比left-to-right模型要慢(它們會預測每個token)

6.GLUE語料集的介紹

實驗數據以及對應的NLP任務
MNLI:蘊含關係推斷
QQP:問題對是否等價
QNLI:句子是都回答問句
SST-2:情感分析
CoLA:句子語言性判斷
STS-B:語義相似
MRPC:句子對是都語義等價
RTE:蘊含關係推斷
WNLI:蘊含關係推斷

7.git網址https://github.com/google-research/bert

關於bert知識乾貨的彙總https://zhuanlan.zhihu.com/p/50717786

原文:https://blog.csdn.net/yangfengling1023/article/details/84025313

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