BERT語言模型

1 Transformer原理

文章:《Attention Is All You Need》

模型架構圖如下:

transformer的結構由encoder編碼和decoder解碼組成。

1.1 Encoder

Encoder組件部分由一堆Layer(可以理解爲編碼器)構成(論文中是將6個Layer疊在一起)。Decoder解碼組件部分也是由相同數量(與編碼器對應)的解碼器(decoder)組成的。每個Layer由兩個sub-layer組成,分別是multi-head self-attention mechanism和fully connected feed-forward network,sub-layer的結構相同,但是沒有共享參數。

 

使用self-attrntion,考慮到以下三個需求:

  • the total computational complexity per layer 每層計算複雜度
  • the amount of computation that can be parallelized, as measured by the minimum number of sequential operations required.
  • the path length between long-range dependencies in the network

1.2 Decoder

Decoder組件部分與Encoder很想,但是它多了一個attention的sub-layer(解碼注意力層),用來關注輸入句子的相關部分(和seq2seq模型的注意力作用相似)。

Transformer的一個核心特性,在這裏輸入序列中每個位置的單詞都有自己獨特的路徑流入編碼器。在自注意力層中,這些路徑之間存在依賴關係。而前饋(feed-forward)層沒有這些依賴關係。因此在前饋(feed-forward)層時可以並行執行各種路徑。如下圖所示:

輸入句子: The animal didn't cross the street because it was too tired

隨着模型處理輸入序列的每個單詞,自注意力會關注整個輸入序列的所有單詞,幫助模型對本單詞更好地進行編碼。

如果你熟悉RNN(循環神經網絡),回憶一下它是如何維持隱藏層的。RNN會將它已經處理過的前面的所有單詞/向量的表示與它正在處理的當前單詞/向量結合起來。而自注意力機制會將所有相關單詞的理解融入到我們正在處理的單詞中。

當我們在編碼器#5(棧中最上層編碼器)中編碼“it”這個單詞的時,注意力機制的部分會去關注“The Animal”,將它的表示的一部分編入“it”的編碼中。

1.3 Positional Encoding

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

  • 用不同頻率的sine和cosine函數直接計算
  • 學習出一份positional embedding

作者試驗了上面兩種方法,兩者的結果很相近,最後選了第一種方法,是因爲它可以允許模型外推到比訓練期間遇到的序列長度更長的序列長度(We chose the sinusoidal version because it may allow the model to extrapolate to sequence lengths longer than the ones encountered during training)。

推薦文章:

Attention Is All You Need

【NLP】Transformer詳解

BERT大火卻不懂Transformer?讀這一篇就夠了

2 BERT 原理

文章《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT是一種基於微調的多層雙向Transformer編碼器,其中的Transformer與原始的Transformer是相同的。

BERT 利用了 Transformer 的 encoder 部分。
Transformer 是一種注意力機制,可以學習文本中單詞(或子單詞)之間的上下文關係。
Transformer 的原型包括兩個獨立的機制,一個 encoder 負責接收文本作爲輸入,一個 decoder 負責預測任務的結果。
BERT 的目標是生成語言模型,所以只需要 encoder 機制。

Transformer 的 encoder 是一次性讀取整個文本序列,而不是從左到右或從右到左地按順序讀取,因此它被認爲是雙向的,儘管說它是非定向的更準確。。

下圖是 Transformer 的 encoder 部分,輸入是一個 token 序列,先對其進行 embedding 稱爲向量,然後輸入給神經網絡,輸出是大小爲 H 的向量序列,每個向量對應着具有相同索引的 token。

在訓練語言模型時,存在定義預測目標的挑戰。 許多模型預測序列中的下一個單詞(例如“The child came home from ___”),這是一種固有地限制語境學習的方向性方法。 爲了克服這一挑戰,BERT模型使用兩個新的無監督預測任務對BERT進行預訓練,分別是Masked LM和Next Sentence Prediction。

2.1 Masked LM

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

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

  • 在編碼器輸出之上添加分類層。
  • 將輸出向量乘以嵌入矩陣,將它們轉換爲詞彙維度。
  • 用softmax計算詞彙表中每個單詞的概率。

2.2 Next Sentence Prediction

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

注意:作者特意說了語料的選取很關鍵,要選用document-level的而不是sentence-level的,這樣可以具備抽象連續長序列特徵的能力。

爲了幫助模型區分開訓練中的兩個句子,輸入在進入模型之前要按以下方式進行處理:

  1. 在第一個句子的開頭插入 [CLS] 標記,在每個句子的末尾插入 [SEP] 標記。
  2. 將表示句子 A 或句子 B 的一個句子 embedding 添加到每個 token 上。
  3. 給每個 token 添加一個位置 embedding,來表示它在序列中的位置。

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

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

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

爲了預測第二個句子是否是第一個句子的後續句子,用下面幾個步驟來預測:

  1. 整個輸入序列輸入給 Transformer 模型
  2. 用一個簡單的分類層將 [CLS] 標記的輸出變換爲 2×1 形狀的向量
  3. 用 softmax 計算 IsNextSequence 的概率

在訓練 BERT 模型時,Masked LM 和 Next Sentence Prediction 是一起訓練的,目標就是要最小化兩種策略的組合損失函數。

2.3 Fine-tuning (How to use BERT)

BERT可用於各種語言任務,而只需在覈心模型中添加一個層:

  • Classification tasks such as sentiment analysis are done similarly to Next Sentence classification, by adding a classification layer on top of the Transformer output for the [CLS] token.(在分類任務中,例如情感分析等,只需要在 Transformer 的輸出之上加一個分類層)
  • In Question Answering tasks (e.g. SQuAD v1.1), the software receives a question regarding a text sequence and is required to mark the answer in the sequence. Using BERT, a Q&A model can be trained by learning two extra vectors that mark the beginning and the end of the answer.(在問答任務(例如SQUAD v1.1)中,問答系統需要接收有關文本序列的 question,並且需要在序列中標記 answer。 可以使用 BERT 學習兩個標記 answer 開始和結尾的向量來訓練Q&A模型)
  • In Named Entity Recognition (NER), the software receives a text sequence and is required to mark the various types of entities (Person, Organization, Date, etc) that appear in the text. Using BERT, a NER model can be trained by feeding the output vector of each token into a classification layer that predicts the NER label.(在命名實體識別(NER)中,系統需要接收文本序列,標記文本中的各種類型的實體(人員,組織,日期等)。 可以用 BERT 將每個 token 的輸出向量送到預測 NER 標籤的分類層)

在 fine-tuning 中,大多數超參數可以保持與 BERT 相同,在論文中還給出了需要調整的超參數的具體指導

推薦文章:

《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

BERT算法原理解析

BERT – State of the Art Language Model for NLP             5 分鐘入門 Google 最強NLP模型:BERT

3 利用預訓練的BERT模型將句子轉換爲句向量,進行文本分類

code 尚未學習

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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