ELMO, BERT, GPT === ###### tags: `李宏毅` * [李宏毅教學影片](https://www.youtube.com/watch?v=UYPa347-DdE&ab_channel=Hung-yiLee) * 以前的做法 * 1-of-N Encoding * 每個詞都有唯一的詞向量 * 缺點: 無法知道詞跟詞之間的相關性 * word class * 對詞做分類,相近意思的分一類 * 缺點: 太粗糙,無法看出更細部分別 * word embedding * soft 的 word class * 每個詞也用向量表示 * 語意相近的詞,向量會比較接近 * ELMO(Embeddings from Language Model) * 一個 RNN-based language model * 輸入一個詞,預測下一個詞,下下一個詞彙藉由前面所有的詞預測出來 * 但是這樣只有考慮前文,沒考慮後文,所以可以用一個 RNN 從後面預測回來 * ELMO 可以產生不只一個 embedding,之後會用參數 ɑ1, ɑ2 成以 h1, h2,其中 ɑ 是 down stream tasks 學來的 ![](https://i.imgur.com/WW5oBOr.png) * BERT(Bidirectional Encoder Representations from Transformers) * Transformer 的 encoder * 不需要有 label 的資料,只要有文本 * 丟進一個句子,每個句子都會輸出一個 embedding * 實作上,如果是中文,以字為單位作輸入比較恰當,因為假如用 one-hot-encodding 就不會太長 * Training 方法,以下兩個方法一起用會學得更好 1. 蓋掉部分詞彙(mask),並且預測它們。每個輸入(包含 mask)都會產生一個 embedding,之後把 mask 的 embedding 丟入 Linear Multi-class Classifier 猜測是哪個詞彙 ![](https://i.imgur.com/0m19ayI.png) 2. 預測兩個句子應不應該被接在一起,CLS 是輸出的結果,反正是用 self-attention,所以如果不考慮位置向量的話是沒差的 ![](https://i.imgur.com/XlniiYD.png) * BERT 用法: 把 BERT 的 model 跟接下來的任務一起作訓練 * 輸入一個句子,輸出這個句子的 class。把要做分類的句子丟給 BERT,開頭再加一個 CLS 用來輸出。最後的 linear classifier 的參數是隨機初始化的,所以是從頭開始訓練,而 BERT 只要 fine-tune ![](https://i.imgur.com/7OrjGIc.png) * 輸入一個句子,輸出句子中每個詞的 class。每個詞產生出來的 embedding 都會丟入 linear classifier 預測是哪個 class ![](https://i.imgur.com/FalnmQH.png) * 輸入兩個句子,輸出一個 class。用於 Natural Language Inference,給前提假設和結果,判斷是否正確或是不知道。 ![](https://i.imgur.com/TmRnRUa.png) * 解 Extraction-based Question Answering。給一篇文章後問問題回答。輸入一篇文章 D 和一個問題 Q,輸出兩問數字 (s, e) 代表文章的第 s 到第 e 個詞是答案。因此等同於輸入兩個句子,每個詞產生一個 embedding,接下來和學出來的向量 S, E 分別作 dot product,結果最大的兩個就是要找的 s, e ![](https://i.imgur.com/dmvJ7Th.png) * ERNIE(Enhanced Representation Through Knowledge Integration) * BERT 一次只會蓋掉一個字,但是中文是以詞為單位,所以得要一次蓋掉整個詞,所以有 ERNIE * GPT(Generative Pre-Training) * 用很大量的文本訓練(1542M),ELMO 是 94M,BERT 是 340M * Transformer 的 decoder * Zero-shot Learning * Reading Comprehension * Summarization * Translation