bert是乙個預訓練的模型,那麼什麼是預訓練呢?舉例子進行簡單的介紹
假設已有a訓練集,先用a對網路進行預訓練,在a任務上學會網路引數,然後儲存以備後用,當來乙個新的任務b,採取相同的網路結構,網路引數初始化的時候可以載入a學習好的引數,其他的高層引數隨機初始化,之後用b任務的訓練資料來訓練網路,當載入的引數保持不變時,稱為"frozen",當載入的引數隨著b任務的訓練進行不斷的改變,稱為「fine-tuning」,即更好地把引數進行調整使得更適合當前的b任務
優點:當任務b的訓練資料較少時,很難很好的訓練網路,但是獲得了a訓練的引數,會比僅僅使用b訓練的引數更優
為了訓練雙向特徵,這裡採用了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%單詞用任意的詞來進行代替
3)10%單詞不變
my dog is hairy → my dog is hairy
為了讓模型捕捉兩個句子的聯絡,這裡增加了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]
訓練模型,使模型具備理解長序列上下文的聯絡的能力
bert:全稱是bidirectional encoder representation from transformers,即雙向transformer的encoder,bert的模型架構基於多層雙向轉換解碼,因為decoder是不能獲要**的資訊的,模型的主要創新點都在pre-traing方法上,即用了masked lm和next sentence prediction兩種方法分別捕捉詞語和句子級別的representation
其中「雙向」表示模型在處理某乙個詞時,它能同時利用前面的詞和後面的詞兩部分資訊,這種「雙向」的**在於bert與傳統語言模型不同,它不是在給你大**所有前面詞的條件下**最可能的當前詞,而是隨機遮掩一些詞,並利用所有沒被遮掩的詞進行**
下圖展示了三種預訓練模型,其中 bert 和 elmo 都使用雙向資訊,openai gpt 使用單向資訊
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表示位置資訊
(1)序列標註:分詞、實體識別、語義標註……
(2)分類任務:文字分類、情感計算……
(3)句子關係判斷:entailment、qa、自然語言推理
(4)生成式任務:機器翻譯、文字摘
上圖給出示例,對於句子關係類任務,很簡單,和gpt類似,加上乙個起始和終結符號,句子之間加個分隔符即可。對於輸出來說,把第乙個起始符號對應的transformer最後一層位置上面串接乙個softmax分類層即可。對於分類問題,與gpt一樣,只需要增加起始和終結符號,輸出部分和句子關係判斷任務類似改造;對於序列標註問題,輸入部分和單句分類是一樣的,只需要輸出部分transformer最後一層每個單詞對應位置都進行分類即可。從這裡可以看出,上面列出的nlp四大任務裡面,除了生成類任務外,bert其它都覆蓋到了,而且改造起來很簡單直觀。(
(1)優點
bert是截止至2023年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)
實驗資料以及對應的nlp任務
mnli:蘊含關係推斷
qqp:問題對是否等價
qnli:句子是都回答問句
sst-2:情感分析
cola:句子語言性判斷
sts-b:語義相似
mrpc:句子對是都語義等價
rte:蘊含關係推斷
wnli:蘊含關係推斷
關於bert知識乾貨的彙總
本文**
BERT的通俗理解 預訓練模型 微調
1 預訓練模型 bert是乙個預訓練的模型,那麼什麼是預訓練呢?舉例子進行簡單的介紹 假設已有a訓練集,先用a對網路進行預訓練,在a任務上學會網路引數,然後儲存以備後用,當來乙個新的任務b,採取相同的網路結構,網路引數初始化的時候可以載入a學習好的引數,其他的高層引數隨機初始化,之後用b任務的訓練資...
Bert 理解基礎
bert理解的基礎 1 word embedding 2 rnn 3 seq2seq 4 transformer word embedding脈絡 w2v 詞對映到低維稠密空間,使得語義上相似的兩個詞在語義空間的距離也會比較近。w2v的問題 語義是上下文相關的。而w2v訓練出來詞的向量始終只有乙個。...
BERT學習理解
在看了好多大牛們的部落格之後,關於bert有了乙個大概的理解,將一些知識點整理到這裡。bert的全稱是bidirectional encoder representation from transformers,利用了transformer的encoder部分,重點是預處理 訓練pre traini...