NLP實踐-Task10

1.transformer

                                                                                   圖一、The Transformer Architecture

  如圖一所示是谷歌提出的transformer 的架構。這其中左半部分是 encoder 右半部分是 decoder。

  • Encoder: 由N=6個相同的layers組成, 每一層包含兩個sub-layers. 第一個sub-layer 就是多頭注意力層(multi-head attention layer)然後是一個簡單的全連接層。 其中每個sub-layer都加了residual connection(殘差連接)和normalisation(歸一化)。 
  • Decoder: 由N=6個相同的Layer組成,但這裏的layer和encoder不一樣, 這裏的layer包含了三個sub-layers, 其中有一個self-attention layer, encoder-decoder attention layer 最後是一個全連接層。前兩個sub-layer 都是基於multi-head attention layer。這裏有個特別點就是masking, masking 的作用就是防止在訓練的時候 使用未來的輸出的單詞。比如訓練時,第一個單詞是不能參考第二個單詞的生成結果的。Masking就會把這個信息變成0,用來保證預測位置 i 的信息只能基於比 i 小的輸出。

Attention

  • Scaled dot-product attention

  “Scaled dot-product attention”如下圖二所示,其輸入由維度爲d的查詢(Q)和鍵(K)以及維度爲d的值(V)組成,所有鍵計算查詢的點積,並應用softmax函數獲得值的權重。

圖二、兩種Attention實現框圖

“Scaled dot-product attention”具體的操作有三個步驟:

  • 每個query-key 會做出一個點乘的運算過程,同時爲了防止值過大除以維度的常數
  • 再到最後會乘以V (values) 用來當做attention vector
  • 最後會使用softmax 把他們歸一化

     數學公式表示如下:

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V \\

   在論文中, 這個算法是通過queries, keys and values 的形式描述的,非常抽象。這裏用了一張CMU NLP課裏的圖來進一步解釋, Q(queries), K (keys) and V(Values), 其中 Key and values 一般對應同樣的 vector, K=V 而Query vecotor  是對應目標句子的 word vector。如下圖三所示。

               圖三、Attention process (source:http://phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-09-attention.pdf)

 

  • Multi-head attention

   上面介紹的scaled dot-product attention, 看起來還有點簡單,網絡的表達能力還有一些簡單所以提出了多頭注意力機制(multi-head attention)。multi-head attention則是通過h個不同的線性變換對Q,K,V進行投影,最後將不同的attention結果拼接起來,self-attention則是取Q,K,V相同。

    論文中使用了8個平行的注意力層或者頭部。因此用的維度dk=dv=dmodel/h=64。

Position-wise feed-forward networks

   第二個sub-layer是個全連接層,之所以是position-wise是因爲處理的attention輸出是某一個位置i的attention輸出。全連接層公式如下所示:

Positional Encoding 

  除了主要的Encoder和Decoder,還有數據預處理的部分。Transformer拋棄了RNN,而RNN最大的優點就是在時間序列上對數據的抽象,所以文章中作者提出兩種Positional Encoding的方法,將encoding後的數據與embedding數據求和,加入了相對位置信息。 

  這裏使用了兩個構造函數sin、cos。pos用來表示單詞的位置信息,比如第一個單詞啦,第二個單詞什麼的。而 i 用來表達dimension 現在的例子裏,dmodel 是512, 那 i 應該是 0 到255. 這裏爲了好說明,如果2i= dmodel, PE 的函數就是sin(pos/10000), 那它的波長就是10000*2pi,  如果i=0, 那麼他的波長就是2pi.  這樣的sin, cos的函數是可以通過線性關係互相表達的。

 

優點

  作者主要講了以下幾點,複雜度分析圖如下圖四所示:  

圖四、Transformer模型與其他常用模型複雜度比較圖

   Transformer是第一個用純attention搭建的模型,不僅計算速度更快,在翻譯任務上也獲得了更好的結果。該模型徹底拋棄了傳統的神經網絡單元,爲我們今後的工作提供了全新的思路。

2.bert

BERT模型的全稱是Bidirectional Encoder Representations from Transformers,它是一種新型的語言模型。之所以說是一種新型的語言模型,是因爲它通過聯合調節所有層中的雙向Transformer來訓練預訓練深度雙向表示。

想深入瞭解BERT模型,首先應該理解語言模型。預訓練的語言模型對於衆多自然語言處理問題起到了重要作用,比如SQuAD問答任務、命名實體識別以及情感識別。目前將預訓練的語言模型應用到NLP任務主要有兩種策略,一種是基於特徵的語言模型,如ELMo模型;另一種是基於微調的語言模型,如OpenAI GPT。這兩類語言模型各有其優缺點,而BERT的出現,似乎融合了它們所有的優點,因此纔可以在諸多後續特定任務上取得最優的效果。

2.1 BERT模型總體結構

BERT是一種基於微調的多層雙向Transformer編碼器,其中的Transformer與原始的Transformer是相同的,並且實現了兩個版本的BERT模型,在兩個版本中前饋大小都設置爲4層:

lBERTBASE:L=12,H=768,A=12,Total Parameters=110M

lBERTLARGE:L=24,H=1024,A=16,Total Parameters=340M

其中層數(即Transformer blocks塊)表示爲L,隱藏大小表示爲H,自注意力的數量爲A。

2.2 BERT模型輸入

輸入表示可以在一個詞序列中表示單個文本句或一對文本(例如,[問題,答案])。對於給定的詞,其輸入表示是可以通過三部分Embedding求和組成。Embedding的可視化表示如下圖所示:

image

  • token Embeddings表示的是詞向量,第一個單詞是CLS標誌,可以用於之後的分類任務,對於非分類任務,可以忽略詞向量;

  • Segment Embeddings用來區別兩種句子,因爲預訓練不只做語言模型還要做以兩個句子爲輸入的分類任務;

  • Position Embeddings是通過模型學習得到的。

2.3 BERT模型預訓練任務

BERT模型使用兩個新的無監督預測任務對BERT進行預訓練,分別是Masked LM和Next Sentence Prediction:

2.3.1 Masked LM

爲了訓練深度雙向Transformer表示,採用了一種簡單的方法:隨機掩蓋部分輸入詞,然後對那些被掩蓋的詞進行預測,此方法被稱爲“Masked LM”(MLM)。預訓練的目標是構建語言模型,BERT模型採用的是bidirectional Transformer。那麼爲什麼採用“bidirectional”的方式呢?因爲在預訓練語言模型來處理下游任務時,我們需要的不僅僅是某個詞左側的語言信息,還需要右側的語言信息。

在訓練的過程中,隨機地掩蓋每個序列中15%的token,並不是像word2vec中的cbow那樣去對每一個詞都進行預測。MLM從輸入中隨機地掩蓋一些詞,其目標是基於其上下文來預測被掩蓋單詞的原始詞彙。與從左到右的語言模型預訓練不同,MLM目標允許表示融合左右兩側的上下文,這使得可以預訓練深度雙向Transformer。Transformer編碼器不知道它將被要求預測哪些單詞,或者哪些已經被隨機單詞替換,因此它必須對每個輸入詞保持分佈式的上下文表示。此外,由於隨機替換在所有詞中只發生1.5%,所以並不會影響模型對於語言的理解。

2.3.2 Next Sentence Prediction

很多句子級別的任務如自動問答(QA)和自然語言推理(NLI)都需要理解兩個句子之間的關係,譬如上述Masked LM任務中,經過第一步的處理,15%的詞彙被遮蓋。那麼在這一任務中我們需要隨機將數據劃分爲等大小的兩部分,一部分數據中的兩個語句對是上下文連續的,另一部分數據中的兩個語句對是上下文不連續的。然後讓Transformer模型來識別這些語句對中,哪些語句對是連續的,哪些對子不連續。

2.4 模型比較

ELMo、GPT、BERT都是近幾年提出的模型,在各自提出的時候都取得了不錯的成績。並且相互之間也是相輔相成的關係。

3個模型比較如下:

image

再往前看,在NLP中有着舉足輕重地位的模型和思想還有Word2vec、LSTM等。

Word2vec作爲里程碑式的進步,對NLP的發展產生了巨大的影響,但Word2vec本身是一種淺層結構,而且其訓練的詞向量所“學習”到的語義信息受制於窗口大小,因此後續有學者提出利用可以獲取長距離依賴的LSTM語言模型預訓練詞向量,而此種語言模型也有自身的缺陷,因爲此種模型是根據句子的上文信息來預測下文的,或者根據下文來預測上文,直觀上來說,我們理解語言都要考慮到左右兩側的上下文信息,但傳統的LSTM模型只學習到了單向的信息。

image

 

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