BERT學習理解

2022-08-31 18:45:08 字數 2798 閱讀 4946

在看了好多大牛們的部落格之後,關於bert有了乙個大概的理解,將一些知識點整理到這裡。

bert的全稱是bidirectional encoder representation from transformers,利用了transformer的encoder部分,重點是預處理/訓練pre-training,創新點是將雙向 transformer用於語言模型

bert採用了transformer encoder的模型來作為語言模型,transformer模型來自於**[4], 完全拋棄了rnn/cnn等結構,而完全採用attention機制來進行input-output之間關係的計算,如下圖中左半邊部分所示,其中模型包括兩個sublayer:

multi-head attention 來做模型對輸入的self-attention

feed forward 部分來對attention計算後的輸入進行變換

這裡為了能夠有利於token-level tasks例如序列標註,同時有利於sentence-level tasks例如問答,採用了兩個預訓練任務,目標就是做語言模型,使用兩個新的無監督**任務對bert進行預訓練

第一種是masked lm:

為了訓練雙向特徵,這裡採用了masked language model的預訓練方法,隨機mask句子中的部分token,然後訓練模型來**被去掉的token。

具體操作是:

隨機mask語料中15%的token,然後將masked token 位置輸出的final hidden vectors送入softmax,來**masked token。

這裡如果都用標記[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

這樣做的目的:transformer encoder不知道它將被要求**哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示

為什麼要以一定的概率保持不變呢? 如果100%的時間都用[mask]來取代被選中的詞,那麼在fine-tuning的時候模型會有一些沒見過的詞。

那麼為啥要以一定的概率使用隨機詞呢?這是因為transformer要保持對每個輸入token分布式的表徵,否則transformer很可能會記住這個[mask]就是"hairy"。

至於使用隨機詞帶來的負面影響,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影響是可以忽略不計的。

第二種是next sentence prediction在 bert 的訓練過程中,模型接收成對的句子作為輸入,並且**其中第二個句子是否在原始文件中也是後續句子。

在訓練期間,50% 的輸入對在原始文件中是前後關係,另外 50% 中是從語料庫中隨機組成的,並且是與第一句斷開的。

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]

訓練模型,使模型具備理解長序列上下文的聯絡的能力

針對不同的任務,模型能夠明確的表達乙個句子,或者句子對(比如[問題,答案])。如下圖所示,輸入包括三個embedding的求和,分別是:

token embedding 表示當前詞的embedding,每個句子有個句子整體的embedding項對應給每個單詞

segment embedding 表示當前詞所在句子的index embedding

position embedding 表示當前詞所在位置的index embedding,這是因為nlp中單詞順序是很重要的特徵,需要在這裡對位置資訊進行編碼

bert的輸入部分是個線性序列,兩個句子通過分隔符分割,最前面和最後增加兩個識別符號號。把單詞對應的三個embedding疊加,就形成了bert的輸入。

接下來進行encoder,下圖是 transformer 的 encoder 部分,輸入是乙個 token 序列,先對其進行 embedding ,然後輸入給神經網路,輸出是大小為 h 的向量序列,每個向量對應著具有相同索引的 token。

fine-tuning方式是指在已經訓練好的語言模型的基礎上,加入少量的task-specific parameters, 例如對於分類問題在語言模型基礎上加一層softmax網路,然後在新的語料上重新訓練來進行fine-tune。

參考:**bert

bert的理解

bert介紹

**解讀:bert模型及fine-tuning

Bert 理解基礎

bert理解的基礎 1 word embedding 2 rnn 3 seq2seq 4 transformer word embedding脈絡 w2v 詞對映到低維稠密空間,使得語義上相似的兩個詞在語義空間的距離也會比較近。w2v的問題 語義是上下文相關的。而w2v訓練出來詞的向量始終只有乙個。...

BERT的通俗理解

bert是乙個預訓練的模型,那麼什麼是預訓練呢?舉例子進行簡單的介紹 假設已有a訓練集,先用a對網路進行預訓練,在a任務上學會網路引數,然後儲存以備後用,當來乙個新的任務b,採取相同的網路結構,網路引數初始化的時候可以載入a學習好的引數,其他的高層引數隨機初始化,之後用b任務的訓練資料來訓練網路,當...

bert中的sep 詳解BERT閱讀理解

bert的簡單回顧 google發布的 pre training of deep bidirectional transformers for language understanding 提到的bert模型重新整理了自然語言處理的11項記錄。算是nlp的里程碑事件,也開始了大公司之間的資料和算力的...