1.背景知識
one-hot -> word class -> word embedding
不過傳統的word embedding解決不了多義詞的問題。
2. ELMO
為了解決上述問題,首先有了ELMO。
它是一個雙向的RNN網絡,這樣每一個單詞都對應兩個hidden state,進行拼接便可以得到單詞的Embedding表示。當同一個單詞上下文不一樣,得到的embedding就不同。
當然也可以搞很多層,每一層得到的embedding都要。
根據下游任務,可以得到不同embedding的權重。
3. BERT
BERT只是Transformer中的Encoder,那Bert怎么訓練呢?有兩種方法。
第一個稱為Masked LM,做法是隨機把一些單詞變為Mask,讓模型去猜測蓋住的地方是什么單詞。
假設輸入里面的第二個詞匯是被蓋住的,把其對應的embedding輸入到一個多分類模型中,來預測被蓋住的單詞。
另一種方法是預測下一個句子,這里,先把兩句話連起來,中間加一個[SEP]作為兩個句子的分隔符。
而在兩個句子的開頭,放一個[CLS]標志符,將其得到的embedding輸入到二分類的模型,輸出兩個句子是不是接在一起的。
實際中,同時使用兩種方法往往得到的結果最好。
在ELMO中,訓練好的embedding是不會參與下游訓練的,下游任務會訓練不同embedding對應的權重,但在Bert中,Bert是和下游任務一起訓練的。
4. BERT的應用
如果是分類任務,在句子前面加一個標志,將其經過Bert得到的embedding輸出到二分類模型中,得到分類結果。二分類模型從頭開始學,而Bert在預訓練的基礎上進行微調(fine-tuning)。
單詞分類:
自然語言推理任務,給定一個前提/假設,判斷得到推論是否正確:
最后一個例子是抽取式QA,抽取式的意思是輸入一個原文和問題,輸出兩個整數start和end,代表答案在原文中的起始位置和結束位置,兩個位置中間的結果就是答案。
把問題 - 分隔符 - 原文輸入到BERT中,每一個單詞輸出一個黃顏色的embedding,這里還需要學習兩個(一個橙色一個藍色)的向量,這兩個向量分別與原文中每個單詞對應的embedding進行點乘,經過softmax之后得到輸出最高的位置。正常情況下start <= end,但如果start > end的話,說明是矛盾的case,此題無解。
BERT在各大比賽中刷榜:
5. ERNIE
百度的ERNIE。
BERT學到了什么?
6. GPT-2
GPT-2的模型非常巨大,它其實是Transformer的Decoder。
由於GPT-2的模型非常巨大,它在很多任務上都達到了驚人的結果,甚至可以做到zero-shot learning(簡單來說就是模型的遷移能力非常好),如閱讀理解任務,不需要任何閱讀理解的訓練集,就可以得到很好的結果。
還可以自己進行寫作,效果驚人。