Bert理論筆記

2021-09-26 14:48:20 字數 2963 閱讀 8941

之前講的很多了,再多說一點:對於位置編碼,使用的是相對位置編碼,這樣可以保證比較好的相對的位置關係(之後的openai gpt和bert使用的都是簡單的絕對編碼)。對於decoder部分不經存在self-attention還有encoder-decoder-attention,並且decoder部分使用mask,防止看到後面的資訊(為下三角) (作弊)。處理的平行計算的問題,因此可以計算很多的層數;encode的時候可以顧及上下文的資訊;

但是現實生活中監督資料少

無監督方法學習word embedding 同時考慮了上下文:使用pretraining的方法得到乙個雙向的語言模型,當乙個句子來的時候分別通過前向和後向,最後每個詞得到2n個向量(n為lstm堆疊的層數,2是前後向),最後通過加權組合起來得到新的向量作為該詞的向量。因為這些向量是考慮上下文的,做了指代消解的,所以是比word embedding更好的。

但是elmo是把上下文相關的embedding作為特徵,這個上下文的embedding是通過語言模型無監督的語料學習到的,所以和我們真是的任務有一點的差異,所以並不是所有的都適合我們的任務

openai gpt 也是通過transformer學習到乙個語言模型,但是可以根據任務進行fine-tuning,但是這裡的transformer是不含有encoder部分,所以decoder部分不包含encoder-decoder的attention部分,而只存在self-attention的attention機制,層數(12層)比elmo的層數深,所以取得的效果比elmo好很多。

我們在訓練語言模型的時候是乙個句子比如情感分類,但是對於語言相似度這樣的兩個句子的我們可以吧兩個句子拼起來,為了判斷不同的句子使用delim連線

但是由於模型方面的約束(decoder的mask)使得只可以看句子前面的資訊;還有pretraining與fine-tunning的不匹配(比如相似度計算,訓練的時候是乙個句子,tunning出現兩個句子)

於是bert提出了masked lm(language model)解決單向資訊流的問題,使用nsp(next sentence prediction) multi-task learning 把pretraining變成兩個句子的輸入,使得pretraining和fine-tunning都是輸入兩個句子的任務

如下圖,輸入兩個句子,兩個句子使用乙個sep分隔符來分割(備註:這裡bpe編碼是機器翻譯裡面的常見的方式,position embedding是位置編碼,segment embedding標明分別是屬於那個句子)

怎麼解決單向資訊流呢?:一般都是只看前面的資訊不看後面的資訊或者從後往前看,同樣是看不到完整的資訊,bert就換了乙個任務,在對15%的字或者詞中,80%的詞進行mask,10%的詞隨機替換成其他的字或者詞,10%捕捉改變,這樣讓模型來**,類似於完形填空,這樣bert學到self-attention能後考慮雙向的資訊的模型

怎麼弄兩個句子呢?:50%的概率抽取兩個連續的句子,50%的概率隨機抽取兩個句子,聯絡的句子就**為,否則為0。這種關係的**可以學習到兩個句子的關係,這就可以在問答之類的任務裡都很有作用。

這樣做了乙個masked lm 和nsp multi-task learnning 聯合的多工的學習,就可以學習到乙個很好的pretraining的模型。

使用:例如對於情感分類,通過bert編碼,獲得第乙個時刻的輸出向量,然後再到上面接乙個全連線層再做個分類,然後用標註監督的資料來fine-tunning bert和全連線之類的引數。

那麼為什麼使用第乙個詞的embedding呢?可以用第二個第三個嗎?:不可以!就像編碼it,雖然會參考其他的詞,但是主要還是編碼it的語義 ,如果使用it去做分類是完全不行的,而【cls】是乙個沒有任何語義的詞,它的輸出語義全部參考自其他的詞,所以用它來**是沒有問題的。當然,把所有時刻的輸出都平起來進行lstm也是沒有問題的!

最後的loss不僅要計算**結果的los

s1loss_1

loss1​

,還要考慮被mask的 部分稱為los

s2loss_2

loss2​

對於2個句子的任務也是同樣的使用第0時刻的embedding進行**

對於問答類認為輸出的是這個詞是否是句子的開始或者結束

序列資料來**每個時刻的標籤

我們使用bert的話是不從頭開始訓練pretraining的,因為需要大量的資料,我們可以使用中文的bert,也就是圖中的最後乙個。同時介紹一下別的,uncase就是不區分大小寫

BERT理論學習 10

elmo由雙向lstm作為特徵獲取器,最後得到了三層embedding,最底層是單詞的word embedding,向上一層為單詞位置的embedding,句法資訊多一些 再向上也是單詞位置的embedding,語法資訊多一些。對於新的乙個句子,將會得到三個embedding,然後有乙個權重a,將三...

bert學習筆記

如上圖,正如上一節所說,bert的核心結構其實跟transformer的encoder部分差不多。關於transformer的相關介紹,可檢視 transformer學習筆記 那麼這裡就不再贅述了。雖然bert跟transformer的encoder部分基本差不多,但是還是有一些地方需要注意一下。在...

學習筆記(三) BERT

結構 兩個bilstm 1.考慮上下文資訊,每個詞都給出三個embedding word embedding 1st lstm layer embedding 2nd lstm layer embedding,針對不同的上下文資訊給三個embedding賦予不同的權重。2.利用長文字而不是視窗學習e...