NLP學習筆記16---transformer、bert


1.Transformer

 

  Google於2017年6月發布在arxiv上的一篇文章《Attention is all you need》,提出解決sequence to sequence問題的transformer模型,用全attention的結構代替了lstm,拋棄了之前傳統的encoder-decoder模型必須結合cnn或者rnn的固有模式,只用attention,可謂大道至簡。文章的主要目的是在減少計算量和提高並行效率的同時不損害最終的實驗結果( GLUE 上效果排名第一https://gluebenchmark.com/leaderboard),創新之處在於提出了兩個新的Attention機制,分別叫做 Scaled Dot-Product Attention 和 Multi-Head Attention。Transformer作者已經發布其在TensorFlow的tensor2tensor庫中。

(1)transformer的模型結構

  論文中的驗證Transformer的實驗室基於機器翻譯的,其本質上是一個Encoder-Decoder的結構,編碼器由6個編碼block組成(encoder每個block由self-attention,FFNN組成),同樣解碼器是6個解碼block組成(decoder每個block由self-attention,encoder-decoder attention以及FFNN組成),與所有的生成模型相同的是,編碼器的輸出會作為解碼器的輸入。Transformer可概括為:

具體模型結構如下圖:

  Encoder由Nx個相同的layer組成,layer指的就是上圖左側的單元,最左邊有個“Nx”(論文中是6x個)。每個Layer由兩個sub-layer組成,分別是multi-head self-attention mechanism和fully connected feed-forward network。其中每個sub-layer都加了residual connection和normalisation,即在兩個子層中會使用一個殘差連接,接着進行層標准化(layer normalization)。因此可以將sub-layer的輸出表示為:

(2)self-attention

  Self-Attention是Transformer最核心的內容,然而作者並沒有詳細講解,下面我們來補充一下作者遺漏的地方。回想Bahdanau等人提出的用Attention,其核心內容是為輸入向量的每個單詞學習一個權重,例如在下面的例子中我們判斷it代指的內容。

The animal didn't cross the street because it was too tired

在self-attention中,每個單詞有3個不同的向量,它們分別是Query向量( Q ),Key向量( K)和Value向量( V ),長度均是64。它們是通過3個不同的權值矩陣由嵌入向量 X 乘以三個不同的權值矩陣 W^Q , W^K , W^V 得到,其中三個矩陣的尺寸也是相同的。均是 512\times 64 。

那么Query,Key,Value是什么意思呢?它們在Attention的計算中扮演着什么角色呢?我們先看一下Attention的計算方法,整個過程可以分成7步:


上面步驟的可以表示:

實際計算過程中是采用基於矩陣的計算方式,那么論文中的 Q , V , K 的計算方式如:

總結為下面的矩陣形式:

這里也就是公式1的計算方式。

在self-attention需要強調的最后一點是其采用了殘差網絡中的short-cut結構,目的當然是解決深度學習中的退化問題,得到的最終結果如圖。

 

2.Bert

自google在2018年10月底公布BERT在11項nlp任務中的卓越表現后,BERT(Bidirectional Encoder Representation from Transformers)就成為NLP領域大火。

一句話概括,BERT的出現,徹底改變了預訓練產生詞向量下游具體NLP任務的關系,提出龍骨級的訓練詞向量概念。

(1)預訓練模型

 

BERT是一個預訓練的模型,那么什么是預訓練呢?舉例子進行簡單的介紹
假設已有A訓練集,先用A對網絡進行預訓練,在A任務上學會網絡參數,然后保存以備后用,當來一個新的任務B,采取相同的網絡結構,網絡參數初始化的時候可以加載A學習好的參數,其他的高層參數隨機初始化,之后用B任務的訓練數據來訓練網絡,當加載的參數保持不變時,稱為"frozen",當加載的參數隨着B任務的訓練進行不斷的改變,稱為“fine-tuning”,即更好地把參數進行調整使得更適合當前的B任務
<1>masked Language Model

為了訓練雙向特征,這里采用了Masked Language Model的預訓練方法,隨機mask句子中的部分token,然后訓練模型來預測被去掉的token。所謂MLM是指在訓練的時候隨機從輸入預料上mask掉一些單詞,然后通過的上下文預測該單詞,該任務非常像我們在中學時期經常做的完形填空。

具體操作是:

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

這里也有一個小trick,如果都用標記[MASK]代替token會影響模型,所以在隨機mask的時候采用以下策略:

在BERT的實驗中,15%的WordPiece Token會被隨機Mask掉。在訓練模型時,一個句子會被多次喂到模型中用於參數學習,但是Google並沒有在每次都mask掉這些單詞,而是在確定要Mask掉的單詞之后,80%的時候會直接替換為[Mask],10%的時候將其替換為其它任意單詞,10%的時候會保留原始Token

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

這么做的原因是如果句子中的某個Token100%都會被mask掉,那么在fine-tuning的時候模型就會有一些沒有見過的單詞。加入隨機Token的原因是因為Transformer要保持對每個輸入token的分布式表征,否則模型就會記住這個[mask]是token ’hairy‘。至於單詞帶來的負面影響,因為一個單詞被隨機替換掉的概率只有15%*10% =1.5%,這個負面影響其實是可以忽略不計的。

<2>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 使用單向信息

 

 

 

參考文獻:https://blog.csdn.net/pipisorry/article/details/84946653

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM