本文根據(jù)李宏毅老師2019最新的機(jī)器學(xué)習(xí)視頻整理。
視頻地址:https://www.bilibili.com/video/av46561029/?p=61
ppt下載地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML19.html
1聪蘸、背景
機(jī)器是如何理解我們的文字的呢谎亩?最早的技術(shù)是1-of-N encoding,把每一個(gè)詞匯表示成一個(gè)向量宇姚,每一個(gè)向量都只有一個(gè)地方為1,其他地方為0夫凸。但是這么做詞匯之間的關(guān)聯(lián)沒(méi)有考慮浑劳,因?yàn)椴煌~之間的距離都是一樣的。
所以夭拌,接下來(lái)有了word class的概念魔熏,舉例說(shuō)dog、cat和bird都是動(dòng)物鸽扁,它們應(yīng)該是同類蒜绽。但是動(dòng)物之間也是有區(qū)別的,如dog和cat是哺乳類動(dòng)物桶现,和鳥類還是有些區(qū)別的躲雅。
后來(lái)有了更進(jìn)階的想法,稱作word embedding骡和,我們用一個(gè)向量來(lái)表示一個(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。
2逮刨、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)∧囊粚拥妮敵鰜?lái)代表單詞的embedding呢阳距?ELMO的做法就是我全都要:
在ELMO中,一個(gè)單詞會(huì)得到多個(gè)embedding结借,對(duì)不同的embedding進(jìn)行加權(quán)求和筐摘,可以得到最后的embedding用于下游任務(wù)。要說(shuō)明一個(gè)這里的embedding個(gè)數(shù)船老,下圖中只畫了兩層RNN輸出的hidden state蓄拣,其實(shí)輸入到RNN的原始embedding也是需要的,所以你會(huì)看到說(shuō)右下角的圖片中努隙,包含了三個(gè)embedding惫搏。
但不同的權(quán)重是基于下游任務(wù)學(xué)習(xí)出來(lái)的癌别,上圖中右下角給了5個(gè)不同的任務(wù)戒财,其得到的embedding權(quán)重各不相同阅束。
3、Bert
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è)多分類模型中根悼,來(lái)預(yù)測(cè)被蓋住的單詞凶异。
另一種方法是預(yù)測(cè)下一個(gè)句子,這里挤巡,先把兩句話連起來(lái)剩彬,中間加一個(gè)[SEP]作為兩個(gè)句子的分隔符。而在兩個(gè)句子的開(kāi)頭矿卑,放一個(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)過(guò)Bert得到的embedding輸出到二分類模型中勤讽,得到分類結(jié)果。二分類模型從頭開(kāi)始學(xué)拗踢,而Bert在預(yù)訓(xùn)練的基礎(chǔ)上進(jìn)行微調(diào)(fine-tuning)脚牍。
文中還有很多其他的應(yīng)用,如單詞分類:
如自然語(yǔ)言推理任務(wù)巢墅,給定一個(gè)前提/假設(shè)诸狭,得到推論是否正確:
最后一個(gè)例子是抽取式QA,抽取式的意思是輸入一個(gè)原文和問(wèn)題君纫,輸出兩個(gè)整數(shù)start和end驯遇,代表答案在原文中的起始位置和結(jié)束位置,兩個(gè)位置中間的結(jié)果就是答案蓄髓。
具體怎么解決剛才的QA問(wèn)題呢叉庐?把問(wèn)題 - 分隔符 - 原文輸入到BERT中,每一個(gè)單詞輸出一個(gè)黃顏色的embedding会喝,這里還需要學(xué)習(xí)兩個(gè)(一個(gè)橙色一個(gè)藍(lán)色)的向量陡叠,這兩個(gè)向量分別與原文中每個(gè)單詞對(duì)應(yīng)的embedding進(jìn)行點(diǎn)乘玩郊,經(jīng)過(guò)softmax之后得到輸出最高的位置。正常情況下start <= end匾竿,但如果start > end的話瓦宜,說(shuō)明是矛盾的case,此題無(wú)解岭妖。
Bert一出來(lái)就開(kāi)始在各項(xiàng)比賽中嶄露頭角:
這里李宏毅老師還舉例了百度提出的ERNIE临庇,ERNIE也是芝麻街的人物,而且還是Bert的好朋友昵慌,這里沒(méi)有細(xì)講假夺,感興趣的話大家可以看下原文。
Bert學(xué)到了什么呢斋攀?可以看下下面兩個(gè)文獻(xiàn)(給大伙貼出來(lái):https://arxiv.org/abs/1905.05950 和https://openreview.net/pdf?id=SJzSgnRcKX):
4已卷、GPT-2
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)單來(lái)說(shuō)就是模型的遷移能力非常好),如閱讀理解任務(wù)旦袋,不需要任何閱讀理解的訓(xùn)練集骤菠,就可以得到很好的結(jié)果。
GPT-2可以自己進(jìn)行寫作疤孕,寫得還是不錯(cuò)的商乎!
好了,筆記就整理到這里了祭阀!