ELMO,GPT,BERT初步學習

https://lilianweng.github.io/lil-log/2019/01/31/generalized-language-models.html
在2018年,諸如GPU, BERT等大體積的語言模型在各種任務上達到了比較好的效果。而我們在訓練語言模型的過程中,也不同於圖像的預訓練模型,NLP任務的預訓練不需要帶標籤的數據。
最剛開始的語言模型(word2vec, doc)訓練思路是基於詞共現的,而不會更具特定的上下文做改變。這種方式的embedding在一定程度上會有效,但是其提升程度是有限的。
這裏我們會提到多種對文本構建詞向量的方法,這些詞向量怎麼更加容易和高效低用於下游NLP任務。

CoVe

CoVe(Contentual Word Vecotrs), attention的seq2seq的機器翻譯模型中得到的詞向量。【這裏的CoVe得到的是整個句子的向量】

NMT recap

NMT(Neural Machine Translation) 的encoder部分由兩層標準的biLSTM組成,decoder是一個帶有attiontion機制的LSTM。
以英-法翻譯爲例,在encoder端進行英語單詞embedding的訓練。
encoder的輸出,會帶有單詞上下文的信息,好處是對很多下游NLP任務有好處。
使用glvoe和CoVe共同做文本分類任務,其中glove提供了詞之間的共現關係,CoVe提供了句子的上下文信息。
CoVe的缺陷:

  1. 在有監督的翻譯任務上做預訓練,受制於語料。
  2. CoVe對最終任務性能的提升受限於具體的任務。
    接下來會說到的 ELMo模型克服瞭如下問題: 通過無監督的預訓練(GPT\BERT),可以用於各種下游任務。

ELMo

ELMo(Embedding from language Model),通過無監督的方式,使用預訓練語言模型來做包含上下文信息的單詞表徵。

bidirectional language model

使用雙向LSTM提取特徵,兩個LSTM共享embedding層和softmax層。
模型的目標是最小化negative log likelihood。

ELMo representations

在biLM的頂層,ELMo通過具體的任務學習,把各層的隱層堆疊起來,隱藏層的內容包括: embedding layer output和weight。
爲了評估不同的隱藏層捕獲的不同信息,ELMo使用不同層的表徵來表示語義特徵和語法特徵。

  1. semantic task: 單詞語義消歧。BILM的頂層隱藏層要優於第一層。
  2. syntax task: part-of-speech(POS)任務中,使用第一層要優於BiLM的頂層神經元。
    研究表明,語法信息在低層次的隱藏層中得到了比較好的表達,而語義信息是在高層的隱藏層中得到了較好的表達。【怎麼指定使用哪一層的神經元呢】

Use ELMo in Downstream Tsasks

這裏的語言模型是無監督的,理論上可以繼續加大。然而這個訓練依然是和任務無關的,所以還需要在具體的任務上,再做一些工作以提高性能。

Cross-View Training

Model Architecture

https://zhuanlan.zhihu.com/p/55182085

OpenAI GPT

GPT(generative pre-trainging transformer) ,雨ELMO比較相似。使用了更多的語料,體積上也更大。和ELMo主要體現在兩個方面的不同:

  1. 模型結構不同。ELMo是淺層的模型,將從左到右和從右到左的多層LSTM級聯起來;而GPT在decoder部分是一個多層的transformer。
  2. 在轄有任務紅,使用embedding的方式是不同的,ELMo在特殊任務重把embeedding當作外部特徵直接喂入,而GPT需要對特殊任務做微調。

transformer decoder as language model

與原生的transformer下關閉,這裏的模型丟棄了encoder部分,因此輸入爲一個單一的句子。
輸入句子,模型包含了多個transformer block,每個block又包含了一個multi-head self-attention以及pointwise feed-forward層。最終輸出爲經過softmax歸一化的分佈式表達。
在損失函數上,GPT和ELMo一樣,都是negative log-likelihood。

BPE

Byte Pair Encoding(BPE)用來對輸入序列進行編碼。BPE最初是是使用在壓縮算法重,後來被應用於解決機器翻譯重的OOV問題,我們可以解決極少出現的單詞問題,並翻譯爲一種新的語言。爲了把很少出現或UNK的單詞分解爲多個subwords,BPE通過迭代和貪婪的方法將單個token進行有分割的拼接。

superviesed fine-tuning

GTP與任務無關,只可以使用預訓練的方式直接進行訓練。
以分類任務爲例,在帶標籤的數據集重,輸入爲x=(x1,x2…,xn),輸出爲y。GPT先將x通過與訓練的transformer decoder,然後最後一層的輸出就是隱藏層表示,需要更新的權重是Wy,這些權重可以對特殊任務有更好的適應性。
loss爲最小化negative log-likelihood,另外添加LM loss會有更好的效果。

  1. 可以加快訓練階段的擬合速度
  2. 可以提升有監督模型的生成效果。
    可以應用的場景包括: 分類、蘊含關係、句子相似度、多項選擇等。
    在大部分的任務上可以達到一個比較好的效果。首先GPT在訓練階段可以接受盡可能多的數據,第二部微調階段,只需要提供較少的數據,以及少量的參數更新。
    但是GPT有一個限制,就是單向的模型,只能夠預測從左到右。

BERT

BERT(Bidirectional Encoder Representations from Transformers)同樣更可以在無標註的樣本上進行預訓練,然後在特殊任務上進行微調,不需要做額外的網絡搭建。
與GPT相比,BERT最大的不同在於其訓練方式是雙向的。模型可以學習到單詞的上下文信息。
BERT的結構是一個而多層的雙向transformer encoder。

pre-training tasks

BERT模型的訓練包含了兩個任務,Mask language model 和 Next sentence prediction

Mask language model

  1. 訓練階段每個單詞有15%的概率,使用[MASK]替換。而在微調的時候,是沒有[MASK]的,所以又加了一些trick,使用80%的概率,在挑選重的15%的單詞裏,繼續下替換MASK,有10%的概率隨機替換一個詞,10%的概率使用原來的詞。
  2. 模型只預測missing的單詞,【看不懂這裏…】

Next sentence prediction

考慮到在下游環境中,會涉及到句子間的關係信息,bert添加了一個文本二分類的任務,來判斷語料中下一個句子作爲當前句子的下一句是不是合適。

  1. 句子對均勻分佈,50%的是,50%的不是
  2. 模型輸出判斷句子B是不是A的下一句。
    這兩個人的特性,促使了我們的訓練數據可以無限多。訓練loss是LM likelihood lose與mean next sentence prediction likelihood的和。

input Embedding

輸入embedding主要包含三個組成:

  1. wordpiece tokenization embedding, 就是subword的embedding,可以解決rare word和oov的問題。
  2. segment embedding,當有兩個句子A,B的時候,會有分割符[SEP]的問題存在,這裏使用E(A)E(B)來區分句子的界限。
  3. position embedding,
    embedding的第一個位置是[CLS],將來在下游任務可以使用。

use bert in Downstream Tasks

bert的微調階段,也僅僅需要少量的參數加入。
對於分類任務,我們使用最後隱藏層的特殊字符[CLS],將其輸入dense層,然後做softmax。
對於QA問題入SQuAD,我們需要預測一個段落是不是一個問題的答案。bert對兩個touken給出概率分佈【這裏不是很清晰】

有三處需要再細看。

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