ELMO,BERT和GPT簡介


Contextualized Word Embedding

同樣的單詞有不同的意思,比如下面的幾個句子,同樣有 “bank” ,卻有着不同的意思。但是用訓練出來的 Word2Vec 得到 “bank” 的向量會是一樣的。向量一樣說明 “word” 的意思是一樣的,事實上並不是如此。這是 Word2Vec 的缺陷。

下面的句子中,同樣是“bank”,確是不同的 token,只是有同樣的 type

我們期望每一個 word token 都有一個 embedding。每個 word token 的 embedding 依賴於它的上下文。這種方法叫做 Contextualized Word Embedding

 

EMLO

EMLO 是 Embeddings from Language Model 的縮寫,它是一個 RNN-based 的模型,只需要有大量句子就可以訓練。

我們可以把訓練的 RNN 隱藏層的權重拿出來,把詞匯經過隱藏層后輸出的向量當做這個單詞的 embedding,因為 RNN 是考慮上下文的,所以同一個單詞在不同的上下文中它會得到不同的向量。上面是一個正向里的 RNN,如果覺得考慮到的信息不夠,可以訓練雙向 RNN ,同樣將隱藏層的輸出作為 embedding。

如果我們的 RNN 有很多層,我們要拿那一隱藏層的輸出作為 embedding?

在 ELMO 中,它取出每一層得到的向量,經過運算得到我們每一個單詞的 embedding

比如上圖,假設我們有2層,所以每個單詞都會得到 2 個向量,最簡單的方法就是把兩個向量加起來作為這個單詞的embedding。

EMLO中會把兩個向量取出來,然后乘以不同的權重 $\alpha $,再將得到的我們得到的 embedding 做下游任務。

$\alpha $ 也是模型學習得到的,它會根據我們的下游任務一起訓練得到,所以不同的任務用到的 $\alpha $ 是不一樣的

比如我們的 embedding 可以有3個來源,如上圖所示。分別是

  • 原來沒有經過 contextualized 的 embedding,就是上面的 Token
  • Token 經過第一層抽出第一個 embedding 
  • Token 經過第二層抽出第二個 embedding 

顏色的深淺代表了權重的大小,可以看到不同的任務(SRL、Coref 等)有着不同的權重。

 

BERT

BERT 是 Bidirectional Encoder Representations from Transformers 的縮寫,BERT 是 Transformer 中的 Encoder。它由許多個 Encoder 堆疊而成

論文地址:https://arxiv.org/pdf/1810.04805.pdf

推薦的文章:https://cloud.tencent.com/developer/article/1389555

在 BERT 里面,我們的文本是不需要標簽的,只有收集到一堆句子就可以訓練了。

BERT 是 Encoder,所以可以看成輸入一個句子,輸出 embedding,每個 embedding 對應一個 word

上圖的例子我們是以 “詞” 為單位,有時候我們以 “字” 為單位會更好。比如中文的 “詞” 是很多的,但是常用的 “字” 是有限的。

在 BERT 中,有兩種訓練方法,一種是 Masked LM。另一種是 Next Sentence Prediction。但一般同時使用,會取得更好的效果。下圖是 BERT 的大體架構。可以看到 Pre-training 階段和 Fine-Tuning 階段中 BERT 模型,只有輸出層不同,其他部分是完全一樣的。

Masked LM

在 Masked LM 中,我們會把輸入的句子中隨機將15%的詞匯置換為一個特殊的 token ,叫做 [MASK]

其實並不是所有被選中的詞匯都會被替換為 [MASK] ,在 BERT 論文的 3.1 Pre-training BERT 中談到了 3 種方式。

(1)80% 被替換為 [MASK]

(2)10% 被替換為隨機 token 

(3)10% 不替換

BERT 的任務就是猜出這些被置換掉的詞匯的什么。

就像是一個填詞游戲,挖去一句話中的某個單詞,讓你自己填上合適的單詞

經過 BERT 后我們得到一個 embedding,再把置換為 [MASK] 的那個位置輸出的 embedding 通過一個線性分類器,預測這個單詞是什么

因為這個分類器是 Linear 的,所以它的能力非常非常弱,所以 BERT 要輸出一個非常好的 embedding,才能預測出被置換掉的單詞是什么

如果兩個不同的詞可以填在同一個句子,他們會有相似的embedding,因為他們語義相近

Next Sentence Prediction

在 Next Sentence Prediction 中,我們給 BERT 兩個句子,讓 BERT 預測這兩個句子是不是接在一起的

[SEP]:特殊的toekn,代表兩個句子的交界處

[CLS]:特殊的token,代表要做分類

我們再把 [CLS] 輸出的向量通過一個線性分類器,讓分類器判斷這兩個句子應不應該接在一起。

BERT 是 Transformer 的 Encoder,它用到了 self-attention 機制,可以讀到句子的全部信息,所以 [CLS] 可以放在開頭

BERT 論文中談到輸入的句子對中,以 A-B 描述這樣的句子對。B 有50%的概率不變,就是真正的下一句(IsNext)。也有 50% 的概率會變成其他句子(NotNext)。

我們也可以直接把這個向量輸入一個分類器中,判斷文本的類別,比如下面判斷垃圾郵件的實例

BERT的輸入

如上圖所處,BERT 的輸入 embedding 是 token embeddings、segment embeddings 和 position embedding 的和

token embedding:詞向量

segment embedding:表示句子是第一句還是第二句

position embedding:表示詞匯在句子中的位置

ERNIE

ERNIE 是 Enhance Representation through Knowledge Integration 的縮寫

ERNIE是專門為中文准備的,BERT的輸入以中文的字為單位,隨機蓋掉一些字后其實是很容易被猜出來的,如上圖所示。所以蓋掉一個詞匯比較合適。

 

GPT

GPT 是 Generative Pre-Training 的縮寫,它的參數量特別大,如下圖所示,它的參數量是 BERT 的4.5倍左右

 BERT 是 Transformer 的 Encoder,GPT則是 Transformer 的 Decoder。GPT 輸入一些詞匯,預測接下來的詞匯。其計算過程如下圖所示。

我們輸入單詞 “潮水”,經過許多層的 self-attention 后得到輸出 “退了”。再把 “退了” 作為輸入,預測下一個輸出。

GPT可以做閱讀理解、句子或段落生成和翻譯等NLP任務

下面的網址可以體驗訓練好的 GPT 

https://talktotransformer.com/

比如讓它自己寫代碼

也可以讓它寫文章、寫劇本什么的,網址就在上面,可以自己去體驗

參考資料

http://jalammar.github.io/illustrated-bert/

李宏毅深度學習


免責聲明!

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



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