本文根據(jù)李宏毅老師2019最新的機(jī)器學(xué)習(xí)視頻整理。
視頻地址:https://www.bilibili.com/video/av46561029/?p=61
ppt下載地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML19.html
機(jī)器是如何理解我們的文字的呢?最早的技術(shù)是1-of-N encoding,把每一個(gè)詞匯表示成一個(gè)向量,每一個(gè)向量都只有一個(gè)地方為1,其他地方為0。但是這么做詞匯之間的關(guān)聯(lián)沒有考慮,因?yàn)椴煌~之間的距離都是一樣的。
所以,接下來有了word class的概念,舉例說dog、cat和bird都是動(dòng)物,它們應(yīng)該是同類。但是動(dòng)物之間也是有區(qū)別的,如dog和cat是哺乳類動(dòng)物,和鳥類還是有些區(qū)別的。
后來有了更進(jìn)階的想法,稱作word embedding,我們用一個(gè)向量來表示一個(gè)單詞,相近的詞匯距離較近,如cat和dog。那word embedding怎么訓(xùn)練呢?比較熟知的就是word2vec方法。
但是呢,同一個(gè)詞是可能有不同的意思的,如下圖中的bank,前兩個(gè)指銀行,后兩個(gè)指河堤:
盡管有不同的意思,但使用傳統(tǒng)的word embedding的方法,相同的單詞都會(huì)對(duì)應(yīng)同樣的embedding。但我們希望針對(duì)不同意思的bank,可以給出不同的embedding表示。
根據(jù)上下文語(yǔ)境的不同,同一個(gè)單詞bank我們希望能夠得到不同的embedding,如果bank的意思是銀行,我們期望它們之間的embedding能夠相近,同時(shí)能夠與河堤意思的bank相距較遠(yuǎn)。
基于這個(gè)思想,首先有了ELMO。
ELMO是Embeddings from Language Model的簡(jiǎn)稱,ELMO是《芝麻街》中的一個(gè)角色。它是一個(gè)RNN-based的語(yǔ)言模型,其任務(wù)是學(xué)習(xí)句子中的下一個(gè)單詞或者前一個(gè)單詞是什么。
它是一個(gè)雙向的RNN網(wǎng)絡(luò),這樣每一個(gè)單詞都對(duì)應(yīng)兩個(gè)hidden state,進(jìn)行拼接便可以得到單詞的Embedding表示。當(dāng)同一個(gè)單詞上下文不一樣,得到的embedding就不同。
當(dāng)然,我們也可以搞更多層:
這么多層的RNN,內(nèi)部每一層輸出都是單詞的一個(gè)表示,那我們?nèi)∧囊粚拥妮敵鰜泶韱卧~的embedding呢?ELMO的做法就是我全都要:
在ELMO中,一個(gè)單詞會(huì)得到多個(gè)embedding,對(duì)不同的embedding進(jìn)行加權(quán)求和,可以得到最后的embedding用于下游任務(wù)。要說明一個(gè)這里的embedding個(gè)數(shù),下圖中只畫了兩層RNN輸出的hidden state,其實(shí)輸入到RNN的原始embedding也是需要的,所以你會(huì)看到說右下角的圖片中,包含了三個(gè)embedding。
但不同的權(quán)重是基于下游任務(wù)學(xué)習(xí)出來的,上圖中右下角給了5個(gè)不同的任務(wù),其得到的embedding權(quán)重各不相同。
Bert是Bidirectional Encoder Representations from Transformers的縮寫,它也是芝麻街的人物之一。Transformer中的Encoder就是Bert預(yù)訓(xùn)練的架構(gòu)。李宏毅老師特別提示:如果是中文的話,可以把字作為單位,而不是詞。
只是Transformer中的Encoder,那Bert怎么訓(xùn)練呢?文獻(xiàn)中給出了兩種訓(xùn)練的方法,第一個(gè)稱為Masked LM,做法是隨機(jī)把一些單詞變?yōu)镸ask,讓模型去猜測(cè)蓋住的地方是什么單詞。假設(shè)輸入里面的第二個(gè)詞匯是被蓋住的,把其對(duì)應(yīng)的embedding輸入到一個(gè)多分類模型中,來預(yù)測(cè)被蓋住的單詞。
另一種方法是預(yù)測(cè)下一個(gè)句子,這里,先把兩句話連起來,中間加一個(gè)[SEP]作為兩個(gè)句子的分隔符。而在兩個(gè)句子的開頭,放一個(gè)[CLS]標(biāo)志符,將其得到的embedding輸入到二分類的模型,輸出兩個(gè)句子是不是接在一起的。
實(shí)際中,同時(shí)使用兩種方法往往得到的結(jié)果最好。
在ELMO中,訓(xùn)練好的embedding是不會(huì)參與下游訓(xùn)練的,下游任務(wù)會(huì)訓(xùn)練不同embedding對(duì)應(yīng)的權(quán)重,但在Bert中,Bert是和下游任務(wù)一起訓(xùn)練的:
如果是分類任務(wù),在句子前面加一個(gè)標(biāo)志,將其經(jīng)過Bert得到的embedding輸出到二分類模型中,得到分類結(jié)果。二分類模型從頭開始學(xué),而Bert在預(yù)訓(xùn)練的基礎(chǔ)上進(jìn)行微調(diào)(fine-tuning)。
文中還有很多其他的應(yīng)用,如單詞分類:
如自然語(yǔ)言推理任務(wù),給定一個(gè)前提/假設(shè),得到推論是否正確:
最后一個(gè)例子是抽取式QA,抽取式的意思是輸入一個(gè)原文和問題,輸出兩個(gè)整數(shù)start和end,代表答案在原文中的起始位置和結(jié)束位置,兩個(gè)位置中間的結(jié)果就是答案。
具體怎么解決剛才的QA問題呢?把問題 - 分隔符 - 原文輸入到BERT中,每一個(gè)單詞輸出一個(gè)黃顏色的embedding,這里還需要學(xué)習(xí)兩個(gè)(一個(gè)橙色一個(gè)藍(lán)色)的向量,這兩個(gè)向量分別與原文中每個(gè)單詞對(duì)應(yīng)的embedding進(jìn)行點(diǎn)乘,經(jīng)過softmax之后得到輸出最高的位置。正常情況下start <= end,但如果start > end的話,說明是矛盾的case,此題無(wú)解。
Bert一出來就開始在各項(xiàng)比賽中嶄露頭角:
這里李宏毅老師還舉例了百度提出的ERNIE,ERNIE也是芝麻街的人物,而且還是Bert的好朋友,這里沒有細(xì)講,感興趣的話大家可以看下原文。
Bert學(xué)到了什么呢?可以看下下面兩個(gè)文獻(xiàn)(給大伙貼出來:https://arxiv.org/abs/1905.05950 和https://openreview.net/pdf?id=SJzSgnRcKX):
GPT是Generative Pre-Training 的簡(jiǎn)稱,但GPT不是芝麻街的人物。GPT-2的模型非常巨大,它其實(shí)是Transformer的Decoder。
GPT-2是Transformer的Decoder部分,輸入一個(gè)句子中的上一個(gè)詞,我們希望模型可以得到句子中的下一個(gè)詞。
由于GPT-2的模型非常巨大,它在很多任務(wù)上都達(dá)到了驚人的結(jié)果,甚至可以做到zero-shot learning(簡(jiǎn)單來說就是模型的遷移能力非常好),如閱讀理解任務(wù),不需要任何閱讀理解的訓(xùn)練集,就可以得到很好的結(jié)果。
GPT-2可以自己進(jìn)行寫作,寫得還是不錯(cuò)的!
聯(lián)系客服