from 張俊林老師
Bert最近很火眷唉,應(yīng)該是最近最火爆的AI進(jìn)展,網(wǎng)上的評(píng)價(jià)很高囤官,那么Bert值得這么高的評(píng)價(jià)嗎冬阳?我個(gè)人判斷是值得。那為什么會(huì)有這么高的評(píng)價(jià)呢党饮?是因?yàn)樗兄卮蟮睦碚摶蛘吣P蛣?chuàng)新嗎肝陪?其實(shí)并沒(méi)有,從模型創(chuàng)新角度看一般刑顺,創(chuàng)新不算大氯窍。但是架不住效果太好了,基本刷新了很多NLP的任務(wù)的最好性能蹲堂,有些任務(wù)還被刷爆了狼讨,這個(gè)才是關(guān)鍵。另外一點(diǎn)是Bert具備廣泛的通用性柒竞,就是說(shuō)絕大部分NLP任務(wù)都可以采用類(lèi)似的兩階段模式直接去提升效果政供,這個(gè)第二關(guān)鍵。客觀的說(shuō)布隔,把Bert當(dāng)做最近兩年NLP重大進(jìn)展的集大成者更符合事實(shí)离陶。
本文的主題是自然語(yǔ)言處理中的預(yù)訓(xùn)練過(guò)程,會(huì)大致說(shuō)下NLP中的預(yù)訓(xùn)練技術(shù)是一步一步如何發(fā)展到Bert模型的衅檀,從中可以很自然地看到Bert的思路是如何逐漸形成的枕磁,Bert的歷史沿革是什么,繼承了什么术吝,創(chuàng)新了什么计济,為什么效果那么好,主要原因是什么排苍,以及為何說(shuō)模型創(chuàng)新不算太大沦寂,為何說(shuō)Bert是近年來(lái)NLP重大進(jìn)展的集大成者典唇。我們一步一步來(lái)講秘遏,而串起來(lái)這個(gè)故事的脈絡(luò)就是自然語(yǔ)言的預(yù)訓(xùn)練過(guò)程,但是落腳點(diǎn)還是在Bert身上屉更。要講自然語(yǔ)言的預(yù)訓(xùn)練彤守,得先從圖像領(lǐng)域的預(yù)訓(xùn)練說(shuō)起毯侦。
圖像領(lǐng)域的預(yù)訓(xùn)練
自從深度學(xué)習(xí)火起來(lái)后,預(yù)訓(xùn)練過(guò)程就是做圖像或者視頻領(lǐng)域的一種比較常規(guī)的做法具垫,有比較長(zhǎng)的歷史了侈离,而且這種做法很有效,能明顯促進(jìn)應(yīng)用的效果筝蚕。
那么圖像領(lǐng)域怎么做預(yù)訓(xùn)練呢卦碾,上圖展示了這個(gè)過(guò)程,我們?cè)O(shè)計(jì)好網(wǎng)絡(luò)結(jié)構(gòu)以后起宽,對(duì)于圖像來(lái)說(shuō)一般是CNN的多層疊加網(wǎng)絡(luò)結(jié)構(gòu)洲胖,可以先用某個(gè)訓(xùn)練集合比如訓(xùn)練集合A或者訓(xùn)練集合B對(duì)這個(gè)網(wǎng)絡(luò)進(jìn)行預(yù)先訓(xùn)練,在A任務(wù)上或者B任務(wù)上學(xué)會(huì)網(wǎng)絡(luò)參數(shù)坯沪,然后存起來(lái)以備后用绿映。假設(shè)我們面臨第三個(gè)任務(wù)C,網(wǎng)絡(luò)結(jié)構(gòu)采取相同的網(wǎng)絡(luò)結(jié)構(gòu)腐晾,在比較淺的幾層CNN結(jié)構(gòu)叉弦,網(wǎng)絡(luò)參數(shù)初始化的時(shí)候可以加載A任務(wù)或者B任務(wù)學(xué)習(xí)好的參數(shù),其它CNN高層參數(shù)仍然隨機(jī)初始化赴魁。之后我們用C任務(wù)的訓(xùn)練數(shù)據(jù)來(lái)訓(xùn)練網(wǎng)絡(luò)卸奉,此時(shí)有兩種做法钝诚,一種是淺層加載的參數(shù)在訓(xùn)練C任務(wù)過(guò)程中不動(dòng)颖御,這種方法被稱為“Frozen”;另外一種是底層網(wǎng)絡(luò)參數(shù)盡管被初始化了,在C任務(wù)訓(xùn)練過(guò)程中仍然隨著訓(xùn)練的進(jìn)程不斷改變,這種一般叫“Fine-Tuning”潘拱,顧名思義疹鳄,就是更好地把參數(shù)進(jìn)行調(diào)整使得更適應(yīng)當(dāng)前的C任務(wù)。一般圖像或者視頻領(lǐng)域要做預(yù)訓(xùn)練一般都這么做芦岂。
這么做有幾個(gè)好處瘪弓,首先,如果手頭任務(wù)C的訓(xùn)練集合數(shù)據(jù)量較少的話禽最,現(xiàn)階段的好用的CNN比如Resnet/Densenet/Inception等網(wǎng)絡(luò)結(jié)構(gòu)層數(shù)很深腺怯,幾百萬(wàn)上千萬(wàn)參數(shù)量算起步價(jià),上億參數(shù)的也很常見(jiàn)川无,訓(xùn)練數(shù)據(jù)少很難很好地訓(xùn)練這么復(fù)雜的網(wǎng)絡(luò)呛占,但是如果其中大量參數(shù)通過(guò)大的訓(xùn)練集合比如ImageNet預(yù)先訓(xùn)練好直接拿來(lái)初始化大部分網(wǎng)絡(luò)結(jié)構(gòu)參數(shù),然后再用C任務(wù)手頭比較可憐的數(shù)據(jù)量上Fine-tuning過(guò)程去調(diào)整參數(shù)讓它們更適合解決C任務(wù)懦趋,那事情就好辦多了晾虑。這樣原先訓(xùn)練不了的任務(wù)就能解決了,即使手頭任務(wù)訓(xùn)練數(shù)據(jù)也不少仅叫,加個(gè)預(yù)訓(xùn)練過(guò)程也能極大加快任務(wù)訓(xùn)練的收斂速度帜篇,所以這種預(yù)訓(xùn)練方式是老少皆宜的解決方案,另外療效又好诫咱,所以在做圖像處理領(lǐng)域很快就流行開(kāi)來(lái)笙隙。
那么新的問(wèn)題來(lái)了,為什么這種預(yù)訓(xùn)練的思路是可行的坎缭?
目前我們已經(jīng)知道逃沿,對(duì)于層級(jí)的CNN結(jié)構(gòu)來(lái)說(shuō),不同層級(jí)的神經(jīng)元學(xué)習(xí)到了不同類(lèi)型的圖像特征幻锁,由底向上特征形成層級(jí)結(jié)構(gòu)凯亮,如上圖所示,如果我們手頭是個(gè)人臉識(shí)別任務(wù)哄尔,訓(xùn)練好網(wǎng)絡(luò)后假消,把每層神經(jīng)元學(xué)習(xí)到的特征可視化肉眼看一看每層學(xué)到了啥特征,你會(huì)看到最底層的神經(jīng)元學(xué)到的是線段等特征岭接,圖示的第二個(gè)隱層學(xué)到的是人臉五官的輪廓富拗,第三層學(xué)到的是人臉的輪廓,通過(guò)三步形成了特征的層級(jí)結(jié)構(gòu)鸣戴,越是底層的特征越是所有不論什么領(lǐng)域的圖像都會(huì)具備的比如邊角線弧線等底層基礎(chǔ)特征啃沪,越往上抽取出的特征越與手頭任務(wù)相關(guān)。正因?yàn)榇苏灶A(yù)訓(xùn)練好的網(wǎng)絡(luò)參數(shù)创千,尤其是底層的網(wǎng)絡(luò)參數(shù)抽取出特征跟具體任務(wù)越無(wú)關(guān),越具備任務(wù)的通用性,所以這是為何一般用底層預(yù)訓(xùn)練好的參數(shù)初始化新任務(wù)網(wǎng)絡(luò)參數(shù)的原因追驴。而高層特征跟任務(wù)關(guān)聯(lián)較大械哟,實(shí)際可以不用使用,或者采用Fine-tuning用新數(shù)據(jù)集合清洗掉高層無(wú)關(guān)的特征抽取器殿雪。
一般我們喜歡用ImageNet來(lái)做網(wǎng)絡(luò)的預(yù)訓(xùn)練暇咆,主要有兩點(diǎn),一方面ImageNet是圖像領(lǐng)域里有超多事先標(biāo)注好訓(xùn)練數(shù)據(jù)的數(shù)據(jù)集合丙曙,分量足是個(gè)很大的優(yōu)勢(shì)爸业,量越大訓(xùn)練出的參數(shù)越靠譜;另外一方面因?yàn)镮mageNet有1000類(lèi)亏镰,類(lèi)別多沃呢,算是通用的圖像數(shù)據(jù),跟領(lǐng)域沒(méi)太大關(guān)系拆挥,所以通用性好薄霜,預(yù)訓(xùn)練完后哪哪都能用,是個(gè)萬(wàn)金油纸兔。分量足的萬(wàn)金油當(dāng)然老少通吃惰瓜,人人喜愛(ài)。
聽(tīng)完上述話汉矿,如果你是具備研究素質(zhì)的人崎坊,也就是說(shuō)具備好奇心,你一定會(huì)問(wèn)下面這個(gè)問(wèn)題:”既然圖像領(lǐng)域預(yù)訓(xùn)練這么好用洲拇,那干嘛自然語(yǔ)言處理不做這個(gè)事情呢奈揍?是不是搞NLP的人比搞CV的傻啊赋续?就算你傻男翰,你看見(jiàn)人家這么做,有樣學(xué)樣不就行了嗎纽乱?這不就是創(chuàng)新嗎蛾绎,也許能成,萬(wàn)一成了鸦列,你看租冠,你的成功來(lái)得就是這么突然!”
嗯,好問(wèn)題薯嗤,其實(shí)搞NLP的人一點(diǎn)都不比你傻顽爹,早就有人嘗試過(guò)了,不過(guò)總體而言不太成功而已骆姐。聽(tīng)說(shuō)過(guò)word embedding嗎镜粤?2003年出品捏题,陳年技術(shù),馥郁芳香繁仁。word embedding其實(shí)就是NLP里的早期預(yù)訓(xùn)練技術(shù)涉馅。當(dāng)然也不能說(shuō)word embedding不成功归园,一般加到下游任務(wù)里黄虱,都能有1到2個(gè)點(diǎn)的性能提升,只是沒(méi)有那么耀眼的成功而已庸诱。
沒(méi)聽(tīng)過(guò)捻浦?那下面就把這段陳年老賬講給你聽(tīng)聽(tīng)。
Word Embedding考古史
這塊大致講講Word Embedding的故事桥爽,很粗略朱灿,因?yàn)榫W(wǎng)上關(guān)于這個(gè)技術(shù)講的文章太多了,汗牛沖動(dòng)钠四,我不屬牛盗扒,此刻更沒(méi)有流汗,所以其實(shí)絲毫沒(méi)有想講Word Embedding的沖動(dòng)和激情缀去,但是要說(shuō)預(yù)訓(xùn)練又得從這開(kāi)始侣灶,那就粗略地講講,主要是引出后面更精彩的部分缕碎。在說(shuō)Word Embedding之前褥影,先更粗略地說(shuō)下語(yǔ)言模型,因?yàn)橐话鉔LP里面做預(yù)訓(xùn)練一般的選擇是用語(yǔ)言模型任務(wù)來(lái)做咏雌。
什么是語(yǔ)言模型凡怎?其實(shí)看上面這張PPT上扣下來(lái)的圖就明白了,為了能夠量化地衡量哪個(gè)句子更像一句人話赊抖,可以設(shè)計(jì)如上圖所示函數(shù)统倒,核心函數(shù)P的思想是根據(jù)句子里面前面的一系列前導(dǎo)單詞預(yù)測(cè)后面跟哪個(gè)單詞的概率大小(理論上除了上文之外氛雪,也可以引入單詞的下文聯(lián)合起來(lái)預(yù)測(cè)單詞出現(xiàn)概率)檐薯。句子里面每個(gè)單詞都有個(gè)根據(jù)上文預(yù)測(cè)自己的過(guò)程,把所有這些單詞的產(chǎn)生概率乘起來(lái)注暗,數(shù)值越大代表這越像一句人話坛缕。語(yǔ)言模型壓下暫且不表,我隱約預(yù)感到我這么講你可能還是不太會(huì)明白捆昏,但是大概這個(gè)意思赚楚,不懂的可以去網(wǎng)上找,資料多得一樣地汗牛沖動(dòng)骗卜。
假設(shè)現(xiàn)在讓你設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)宠页,去做這個(gè)語(yǔ)言模型的任務(wù)左胞,就是說(shuō)給你很多語(yǔ)料做這個(gè)事情,訓(xùn)練好一個(gè)神經(jīng)網(wǎng)絡(luò)举户,訓(xùn)練好之后烤宙,以后輸入一句話的前面幾個(gè)單詞,要求這個(gè)網(wǎng)絡(luò)輸出后面緊跟的單詞應(yīng)該是哪個(gè)俭嘁,你會(huì)怎么做躺枕?
你可以像上圖這么設(shè)計(jì)這個(gè)網(wǎng)絡(luò)結(jié)構(gòu),這其實(shí)就是大名鼎鼎的中文人稱“神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型”供填,英文小名NNLM的網(wǎng)絡(luò)結(jié)構(gòu)拐云,用來(lái)做語(yǔ)言模型。這個(gè)工作有年頭了近她,是個(gè)陳年老工作叉瘩,是Bengio 在2003年發(fā)表在JMLR上的論文。它生于2003粘捎,火于2013薇缅,以后是否會(huì)不朽暫且不知,但是不幸的是出生后應(yīng)該沒(méi)有引起太大反響攒磨,沉寂十年終于時(shí)來(lái)運(yùn)轉(zhuǎn)沉冤得雪泳桦,在2013年又被NLP考古工作者從海底濕淋淋地?fù)瞥鰜?lái)了祭入神殿。為什么會(huì)發(fā)生這種技術(shù)奇遇記咧纠?你要想想2013年是什么年頭蓬痒,是深度學(xué)習(xí)開(kāi)始滲透NLP領(lǐng)域的光輝時(shí)刻,萬(wàn)里長(zhǎng)征第一步漆羔,而NNLM可以算是南昌起義第一槍梧奢。在深度學(xué)習(xí)火起來(lái)之前,極少有人用神經(jīng)網(wǎng)絡(luò)做NLP問(wèn)題演痒,如果你10年前堅(jiān)持用神經(jīng)網(wǎng)絡(luò)做NLP亲轨,估計(jì)別人會(huì)認(rèn)為你這人神經(jīng)有問(wèn)題。所謂紅塵滾滾鸟顺,誰(shuí)也擋不住歷史發(fā)展趨勢(shì)的車(chē)輪惦蚊,這就是個(gè)很好的例子。
上面是閑話讯嫂,閑言碎語(yǔ)不要講蹦锋,我們回來(lái)講一講NNLM的思路。先說(shuō)訓(xùn)練過(guò)程欧芽,現(xiàn)在看其實(shí)很簡(jiǎn)單莉掂,見(jiàn)過(guò)RNN、LSTM千扔、CNN后的你們回頭再看這個(gè)網(wǎng)絡(luò)甚至顯得有些簡(jiǎn)陋憎妙。學(xué)習(xí)任務(wù)是輸入某個(gè)句中單詞 [圖片上傳失敗...(image-cf33d7-1591887612341)]
前面句子的t-1個(gè)單詞库正,要求網(wǎng)絡(luò)正確預(yù)測(cè)單詞Bert,即最大化:
[圖片上傳失敗...(image-25fbfc-1591887612341)]
前面任意單詞 [圖片上傳失敗...(image-64897d-1591887612341)]
用Onehot編碼(比如:0001000)作為原始單詞輸入厘唾,之后乘以矩陣Q后獲得向量 [圖片上傳失敗...(image-66aba-1591887612341)]
褥符,每個(gè)單詞的 [圖片上傳失敗...(image-b2f6f9-1591887612341)]
拼接,上接隱層抚垃,然后接softmax去預(yù)測(cè)后面應(yīng)該后續(xù)接哪個(gè)單詞喷楣。這個(gè) [圖片上傳失敗...(image-d926f3-1591887612341)]
是什么?這其實(shí)就是單詞對(duì)應(yīng)的Word Embedding值讯柔,那個(gè)矩陣Q包含V行屎即,V代表詞典大小离赫,每一行內(nèi)容代表對(duì)應(yīng)單詞的Word embedding值。只不過(guò)Q的內(nèi)容也是網(wǎng)絡(luò)參數(shù)耸三,需要學(xué)習(xí)獲得惋耙,訓(xùn)練剛開(kāi)始用隨機(jī)值初始化矩陣Q捣炬,當(dāng)這個(gè)網(wǎng)絡(luò)訓(xùn)練好之后,矩陣Q的內(nèi)容被正確賦值绽榛,每一行代表一個(gè)單詞對(duì)應(yīng)的Word embedding值湿酸。所以你看,通過(guò)這個(gè)網(wǎng)絡(luò)學(xué)習(xí)語(yǔ)言模型任務(wù)灭美,這個(gè)網(wǎng)絡(luò)不僅自己能夠根據(jù)上文預(yù)測(cè)后接單詞是什么推溃,同時(shí)獲得一個(gè)副產(chǎn)品,就是那個(gè)矩陣Q届腐,這就是單詞的Word Embedding是被如何學(xué)會(huì)的铁坎。
2013年最火的用語(yǔ)言模型做Word Embedding的工具是Word2Vec,后來(lái)又出了Glove犁苏,Word2Vec是怎么工作的呢硬萍?看下圖。
Word2Vec的網(wǎng)絡(luò)結(jié)構(gòu)其實(shí)和NNLM是基本類(lèi)似的围详,只是這個(gè)圖長(zhǎng)得清晰度差了點(diǎn)朴乖,看上去不像,其實(shí)它們是親兄弟助赞。不過(guò)這里需要指出:盡管網(wǎng)絡(luò)結(jié)構(gòu)相近买羞,而且也是做語(yǔ)言模型任務(wù),但是其訓(xùn)練方法不太一樣雹食。Word2Vec有兩種訓(xùn)練方法畜普,一種叫CBOW,核心思想是從一個(gè)句子里面把一個(gè)詞摳掉婉徘,用這個(gè)詞的上文和下文去預(yù)測(cè)被摳掉的這個(gè)詞漠嵌;第二種叫做Skip-gram咐汞,和CBOW正好反過(guò)來(lái),輸入某個(gè)單詞儒鹿,要求網(wǎng)絡(luò)預(yù)測(cè)它的上下文單詞化撕。而你回頭看看,NNLM是怎么訓(xùn)練的约炎?是輸入一個(gè)單詞的上文植阴,去預(yù)測(cè)這個(gè)單詞。這是有顯著差異的圾浅。為什么Word2Vec這么處理掠手?原因很簡(jiǎn)單,因?yàn)閃ord2Vec和NNLM不一樣狸捕,NNLM的主要任務(wù)是要學(xué)習(xí)一個(gè)解決語(yǔ)言模型任務(wù)的網(wǎng)絡(luò)結(jié)構(gòu)喷鸽,語(yǔ)言模型就是要看到上文預(yù)測(cè)下文,而word embedding只是無(wú)心插柳的一個(gè)副產(chǎn)品灸拍。但是Word2Vec目標(biāo)不一樣做祝,它單純就是要word embedding的,這是主產(chǎn)品鸡岗,所以它完全可以隨性地這么去訓(xùn)練網(wǎng)絡(luò)混槐。
為什么要講Word2Vec呢?這里主要是要引出CBOW的訓(xùn)練方法轩性,BERT其實(shí)跟它有關(guān)系声登,后面會(huì)講它們之間是如何的關(guān)系,當(dāng)然它們的關(guān)系BERT作者沒(méi)說(shuō)揣苏,是我猜的悯嗓,至于我猜的對(duì)不對(duì),后面你看后自己判斷舒岸。
使用Word2Vec或者Glove绅作,通過(guò)做語(yǔ)言模型任務(wù),就可以獲得每個(gè)單詞的Word Embedding蛾派,那么這種方法的效果如何呢俄认?上圖給了網(wǎng)上找的幾個(gè)例子,可以看出有些例子效果還是很不錯(cuò)的洪乍,一個(gè)單詞表達(dá)成Word Embedding后眯杏,很容易找出語(yǔ)義相近的其它詞匯。
我們的主題是預(yù)訓(xùn)練壳澳,那么問(wèn)題是Word Embedding這種做法能算是預(yù)訓(xùn)練嗎岂贩?這其實(shí)就是標(biāo)準(zhǔn)的預(yù)訓(xùn)練過(guò)程。要理解這一點(diǎn)要看看學(xué)會(huì)Word Embedding后下游任務(wù)是怎么用它的巷波。
假設(shè)如上圖所示萎津,我們有個(gè)NLP的下游任務(wù)卸伞,比如QA,就是問(wèn)答問(wèn)題锉屈,所謂問(wèn)答問(wèn)題荤傲,指的是給定一個(gè)問(wèn)題X,給定另外一個(gè)句子Y,要判斷句子Y是否是問(wèn)題X的正確答案颈渊。問(wèn)答問(wèn)題假設(shè)設(shè)計(jì)的網(wǎng)絡(luò)結(jié)構(gòu)如上圖所示遂黍,這里不展開(kāi)講了,懂得自然懂俊嗽,不懂的也沒(méi)關(guān)系雾家,因?yàn)檫@點(diǎn)對(duì)于本文主旨來(lái)說(shuō)不關(guān)鍵,關(guān)鍵是網(wǎng)絡(luò)如何使用訓(xùn)練好的Word Embedding的绍豁。它的使用方法其實(shí)和前面講的NNLM是一樣的芯咧,句子中每個(gè)單詞以O(shè)nehot形式作為輸入,然后乘以學(xué)好的Word Embedding矩陣Q妹田,就直接取出單詞對(duì)應(yīng)的Word Embedding了唬党。這乍看上去好像是個(gè)查表操作鹃共,不像是預(yù)訓(xùn)練的做法是吧鬼佣?其實(shí)不然,那個(gè)Word Embedding矩陣Q其實(shí)就是網(wǎng)絡(luò)Onehot層到embedding層映射的網(wǎng)絡(luò)參數(shù)矩陣霜浴。所以你看到了晶衷,使用Word Embedding等價(jià)于什么?等價(jià)于把Onehot層到embedding層的網(wǎng)絡(luò)用預(yù)訓(xùn)練好的參數(shù)矩陣Q初始化了阴孟。這跟前面講的圖像領(lǐng)域的低層預(yù)訓(xùn)練過(guò)程其實(shí)是一樣的晌纫,區(qū)別無(wú)非Word Embedding只能初始化第一層網(wǎng)絡(luò)參數(shù),再高層的參數(shù)就無(wú)能為力了永丝。下游NLP任務(wù)在使用Word Embedding的時(shí)候也類(lèi)似圖像有兩種做法锹漱,一種是Frozen,就是Word Embedding那層網(wǎng)絡(luò)參數(shù)固定不動(dòng)慕嚷;另外一種是Fine-Tuning哥牍,就是Word Embedding這層參數(shù)使用新的訓(xùn)練集合訓(xùn)練也需要跟著訓(xùn)練過(guò)程更新掉。
上面這種做法就是18年之前NLP領(lǐng)域里面采用預(yù)訓(xùn)練的典型做法喝检,之前說(shuō)過(guò)嗅辣,Word Embedding其實(shí)對(duì)于很多下游NLP任務(wù)是有幫助的,只是幫助沒(méi)有大到閃瞎忘記戴墨鏡的圍觀群眾的雙眼而已挠说。那么新問(wèn)題來(lái)了澡谭,為什么這樣訓(xùn)練及使用Word Embedding的效果沒(méi)有期待中那么好呢?答案很簡(jiǎn)單损俭,因?yàn)閃ord Embedding有問(wèn)題唄蛙奖。這貌似是個(gè)比較弱智的答案潘酗,關(guān)鍵是Word Embedding存在什么問(wèn)題?這其實(shí)是個(gè)好問(wèn)題雁仲。
這片在Word Embedding頭上籠罩了好幾年的烏云是什么崎脉?是多義詞問(wèn)題。我們知道伯顶,多義詞是自然語(yǔ)言中經(jīng)常出現(xiàn)的現(xiàn)象囚灼,也是語(yǔ)言靈活性和高效性的一種體現(xiàn)。多義詞對(duì)Word Embedding來(lái)說(shuō)有什么負(fù)面影響祭衩?如上圖所示灶体,比如多義詞Bank,有兩個(gè)常用含義掐暮,但是Word Embedding在對(duì)bank這個(gè)單詞進(jìn)行編碼的時(shí)候,是區(qū)分不開(kāi)這兩個(gè)含義的樟结,因?yàn)樗鼈儽M管上下文環(huán)境中出現(xiàn)的單詞不同灰羽,但是在用語(yǔ)言模型訓(xùn)練的時(shí)候,不論什么上下文的句子經(jīng)過(guò)word2vec怠噪,都是預(yù)測(cè)相同的單詞bank恐似,而同一個(gè)單詞占的是同一行的參數(shù)空間,這導(dǎo)致兩種不同的上下文信息都會(huì)編碼到相同的word embedding空間里去傍念。所以word embedding無(wú)法區(qū)分多義詞的不同語(yǔ)義矫夷,這就是它的一個(gè)比較嚴(yán)重的問(wèn)題。
你可能覺(jué)得自己很聰明捂寿,說(shuō)這可以解決啊口四,確實(shí)也有很多研究人員提出很多方法試圖解決這個(gè)問(wèn)題,但是從今天往回看秦陋,這些方法看上去都成本太高或者太繁瑣了蔓彩,有沒(méi)有簡(jiǎn)單優(yōu)美的解決方案呢?
ELMO提供了一種簡(jiǎn)潔優(yōu)雅的解決方案。
從Word Embedding到ELMO
ELMO是“Embedding from Language Models”的簡(jiǎn)稱赤嚼,其實(shí)這個(gè)名字并沒(méi)有反應(yīng)它的本質(zhì)思想旷赖,提出ELMO的論文題目:“Deep contextualized word representation”更能體現(xiàn)其精髓,而精髓在哪里更卒?在deep contextualized這個(gè)短語(yǔ)等孵,一個(gè)是deep,一個(gè)是context蹂空,其中context更關(guān)鍵俯萌。在此之前的Word Embedding本質(zhì)上是個(gè)靜態(tài)的方式,所謂靜態(tài)指的是訓(xùn)練好之后每個(gè)單詞的表達(dá)就固定住了上枕,以后使用的時(shí)候咐熙,不論新句子上下文單詞是什么,這個(gè)單詞的Word Embedding不會(huì)跟著上下文場(chǎng)景的變化而改變辨萍,所以對(duì)于比如Bank這個(gè)詞棋恼,它事先學(xué)好的Word Embedding中混合了幾種語(yǔ)義 ,在應(yīng)用中來(lái)了個(gè)新句子锈玉,即使從上下文中(比如句子包含money等詞)明顯可以看出它代表的是“銀行”的含義爪飘,但是對(duì)應(yīng)的Word Embedding內(nèi)容也不會(huì)變,它還是混合了多種語(yǔ)義拉背。這是為何說(shuō)它是靜態(tài)的师崎,這也是問(wèn)題所在。ELMO的本質(zhì)思想是:我事先用語(yǔ)言模型學(xué)好一個(gè)單詞的Word Embedding去团,此時(shí)多義詞無(wú)法區(qū)分抡诞,不過(guò)這沒(méi)關(guān)系。在我實(shí)際使用Word Embedding的時(shí)候土陪,單詞已經(jīng)具備了特定的上下文了,這個(gè)時(shí)候我可以根據(jù)上下文單詞的語(yǔ)義去調(diào)整單詞的Word Embedding表示肴熏,這樣經(jīng)過(guò)調(diào)整后的Word Embedding更能表達(dá)在這個(gè)上下文中的具體含義鬼雀,自然也就解決了多義詞的問(wèn)題了。所以ELMO本身是個(gè)根據(jù)當(dāng)前上下文對(duì)Word Embedding動(dòng)態(tài)調(diào)整的思路蛙吏。
ELMO采用了典型的兩階段過(guò)程源哩,第一個(gè)階段是利用語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練;第二個(gè)階段是在做下游任務(wù)時(shí)鸦做,從預(yù)訓(xùn)練網(wǎng)絡(luò)中提取對(duì)應(yīng)單詞的網(wǎng)絡(luò)各層的Word Embedding作為新特征補(bǔ)充到下游任務(wù)中励烦。上圖展示的是其預(yù)訓(xùn)練過(guò)程,它的網(wǎng)絡(luò)結(jié)構(gòu)采用了雙層雙向LSTM泼诱,目前語(yǔ)言模型訓(xùn)練的任務(wù)目標(biāo)是根據(jù)單詞 [圖片上傳失敗...(image-40efe8-1591887612341)]
的上下文去正確預(yù)測(cè)單詞 [圖片上傳失敗...(image-6f3052-1591887612341)]
坛掠, [圖片上傳失敗...(image-429e51-1591887612341)]
之前的單詞序列Context-before稱為上文,之后的單詞序列Context-after稱為下文。圖中左端的前向雙層LSTM代表正方向編碼器屉栓,輸入的是從左到右順序的除了預(yù)測(cè)單詞外 [圖片上傳失敗...(image-4ab765-1591887612341)]
的上文Context-before;右端的逆向雙層LSTM代表反方向編碼器友多,輸入的是從右到左的逆序的句子下文Context-after域滥;每個(gè)編碼器的深度都是兩層LSTM疊加酬土。這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)其實(shí)在NLP中是很常用的撤缴。使用這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)利用大量語(yǔ)料做語(yǔ)言模型任務(wù)就能預(yù)先訓(xùn)練好這個(gè)網(wǎng)絡(luò)刹枉,如果訓(xùn)練好這個(gè)網(wǎng)絡(luò)后,輸入一個(gè)新句子 [圖片上傳失敗...(image-c12580-1591887612341)]
屈呕,句子中每個(gè)單詞都能得到對(duì)應(yīng)的三個(gè)Embedding:最底層是單詞的Word Embedding微宝,往上走是第一層雙向LSTM中對(duì)應(yīng)單詞位置的Embedding,這層編碼單詞的句法信息更多一些虎眨;再往上走是第二層LSTM中對(duì)應(yīng)單詞位置的Embedding蟋软,這層編碼單詞的語(yǔ)義信息更多一些。也就是說(shuō)嗽桩,ELMO的預(yù)訓(xùn)練過(guò)程不僅僅學(xué)會(huì)單詞的Word Embedding岳守,還學(xué)會(huì)了一個(gè)雙層雙向的LSTM網(wǎng)絡(luò)結(jié)構(gòu),而這兩者后面都有用碌冶。
上面介紹的是ELMO的第一階段:預(yù)訓(xùn)練階段湿痢。那么預(yù)訓(xùn)練好網(wǎng)絡(luò)結(jié)構(gòu)后,如何給下游任務(wù)使用呢扑庞?上圖展示了下游任務(wù)的使用過(guò)程譬重,比如我們的下游任務(wù)仍然是QA問(wèn)題,此時(shí)對(duì)于問(wèn)句X罐氨,我們可以先將句子X(jué)作為預(yù)訓(xùn)練好的ELMO網(wǎng)絡(luò)的輸入臀规,這樣句子X(jué)中每個(gè)單詞在ELMO網(wǎng)絡(luò)中都能獲得對(duì)應(yīng)的三個(gè)Embedding,之后給予這三個(gè)Embedding中的每一個(gè)Embedding一個(gè)權(quán)重a栅隐,這個(gè)權(quán)重可以學(xué)習(xí)得來(lái)塔嬉,根據(jù)各自權(quán)重累加求和玩徊,將三個(gè)Embedding整合成一個(gè)。然后將整合后的這個(gè)Embedding作為X句在自己任務(wù)的那個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中對(duì)應(yīng)單詞的輸入邑遏,以此作為補(bǔ)充的新特征給下游任務(wù)使用佣赖。對(duì)于上圖所示下游任務(wù)QA中的回答句子Y來(lái)說(shuō)也是如此處理。因?yàn)镋LMO給下游提供的是每個(gè)單詞的特征形式记盒,所以這一類(lèi)預(yù)訓(xùn)練的方法被稱為“Feature-based Pre-Training”站宗。至于為何這么做能夠達(dá)到區(qū)分多義詞的效果绷落,你可以想一想,其實(shí)比較容易想明白原因。
上面這個(gè)圖是TagLM采用類(lèi)似ELMO的思路做命名實(shí)體識(shí)別任務(wù)的過(guò)程身冀,其步驟基本如上述ELMO的思路默辨,所以此處不展開(kāi)說(shuō)了沽翔。TagLM的論文發(fā)表在2017年的ACL會(huì)議上锄俄,作者就是AllenAI里做ELMO的那些人,所以可以將TagLM看做ELMO的一個(gè)前導(dǎo)工作冰肴。前幾天這個(gè)PPT發(fā)出去后有人質(zhì)疑說(shuō)FastAI的在18年4月提出的ULMFiT才是拋棄傳統(tǒng)Word Embedding引入新模式的開(kāi)山之作屈藐,我深不以為然。首先TagLM出現(xiàn)的更早而且模式基本就是ELMO的思路熙尉;另外ULMFiT使用的是三階段模式联逻,在通用語(yǔ)言模型訓(xùn)練之后,加入了一個(gè)領(lǐng)域語(yǔ)言模型預(yù)訓(xùn)練過(guò)程检痰,而且論文重點(diǎn)工作在這塊包归,方法還相對(duì)比較繁雜,這并不是一個(gè)特別好的主意铅歼,因?yàn)轭I(lǐng)域語(yǔ)言模型的限制是它的規(guī)模往往不可能特別大公壤,精力放在這里不太合適,放在通用語(yǔ)言模型上感覺(jué)更合理椎椰;再者厦幅,盡管ULFMiT實(shí)驗(yàn)做了6個(gè)任務(wù),但是都集中在分類(lèi)問(wèn)題相對(duì)比較窄俭识,不如ELMO驗(yàn)證的問(wèn)題領(lǐng)域廣慨削,我覺(jué)得這就是因?yàn)榈诙侥莻€(gè)領(lǐng)域語(yǔ)言模型帶來(lái)的限制。所以綜合看套媚,盡管ULFMiT也是個(gè)不錯(cuò)的工作,但是重要性跟ELMO比至少還是要差一檔磁椒,當(dāng)然這是我個(gè)人看法堤瘤。每個(gè)人的學(xué)術(shù)審美口味不同,我個(gè)人一直比較贊賞要么簡(jiǎn)潔有效體現(xiàn)問(wèn)題本質(zhì)要么思想特別游離現(xiàn)有框架腦洞開(kāi)得異常大的工作浆熔,所以ULFMiT我看論文的時(shí)候就感覺(jué)看著有點(diǎn)難受本辐,覺(jué)得這工作沒(méi)抓住重點(diǎn)而且特別麻煩,但是看ELMO論文感覺(jué)就賞心悅目,覺(jué)得思路特別清晰順暢慎皱,看完暗暗點(diǎn)贊老虫,心里說(shuō)這樣的文章獲得NAACL2018最佳論文當(dāng)之無(wú)愧,比ACL很多最佳論文也好得不是一點(diǎn)半點(diǎn)茫多,這就是好工作帶給一個(gè)有經(jīng)驗(yàn)人士的一種在讀論文時(shí)候就能產(chǎn)生的本能的感覺(jué)祈匙,也就是所謂的這道菜對(duì)上了食客的審美口味。
前面我們提到靜態(tài)Word Embedding無(wú)法解決多義詞的問(wèn)題天揖,那么ELMO引入上下文動(dòng)態(tài)調(diào)整單詞的embedding后多義詞問(wèn)題解決了嗎夺欲?解決了,而且比我們期待的解決得還要好今膊。上圖給了個(gè)例子些阅,對(duì)于Glove訓(xùn)練出的Word Embedding來(lái)說(shuō),多義詞比如play斑唬,根據(jù)它的embedding找出的最接近的其它單詞大多數(shù)集中在體育領(lǐng)域市埋,這很明顯是因?yàn)橛?xùn)練數(shù)據(jù)中包含play的句子中體育領(lǐng)域的數(shù)量明顯占優(yōu)導(dǎo)致;而使用ELMO恕刘,根據(jù)上下文動(dòng)態(tài)調(diào)整后的embedding不僅能夠找出對(duì)應(yīng)的“演出”的相同語(yǔ)義的句子缤谎,而且還可以保證找出的句子中的play對(duì)應(yīng)的詞性也是相同的,這是超出期待之處雪营。之所以會(huì)這樣弓千,是因?yàn)槲覀兩厦嫣岬竭^(guò),第一層LSTM編碼了很多句法信息献起,這在這里起到了重要作用洋访。
ELMO經(jīng)過(guò)這般操作,效果如何呢谴餐?實(shí)驗(yàn)效果見(jiàn)上圖姻政,6個(gè)NLP任務(wù)中性能都有幅度不同的提升,最高的提升達(dá)到25%左右岂嗓,而且這6個(gè)任務(wù)的覆蓋范圍比較廣汁展,包含句子語(yǔ)義關(guān)系判斷,分類(lèi)任務(wù)厌殉,閱讀理解等多個(gè)領(lǐng)域食绿,這說(shuō)明其適用范圍是非常廣的,普適性強(qiáng)公罕,這是一個(gè)非常好的優(yōu)點(diǎn)器紧。
那么站在現(xiàn)在這個(gè)時(shí)間節(jié)點(diǎn)看,ELMO有什么值得改進(jìn)的缺點(diǎn)呢楼眷?首先铲汪,一個(gè)非常明顯的缺點(diǎn)在特征抽取器選擇方面熊尉,ELMO使用了LSTM而不是新貴Transformer,Transformer是谷歌在17年做機(jī)器翻譯任務(wù)的“Attention is all you need”的論文中提出的掌腰,引起了相當(dāng)大的反響狰住,很多研究已經(jīng)證明了Transformer提取特征的能力是要遠(yuǎn)強(qiáng)于LSTM的。如果ELMO采取Transformer作為特征提取器齿梁,那么估計(jì)Bert的反響遠(yuǎn)不如現(xiàn)在的這種火爆場(chǎng)面催植。另外一點(diǎn),ELMO采取雙向拼接這種融合特征的能力可能比Bert一體化的融合特征方式弱士飒,但是查邢,這只是一種從道理推斷產(chǎn)生的懷疑,目前并沒(méi)有具體實(shí)驗(yàn)說(shuō)明這一點(diǎn)酵幕。
我們?nèi)绻袳LMO這種預(yù)訓(xùn)練方法和圖像領(lǐng)域的預(yù)訓(xùn)練方法對(duì)比扰藕,發(fā)現(xiàn)兩者模式看上去還是有很大差異的。除了以ELMO為代表的這種基于特征融合的預(yù)訓(xùn)練方法外芳撒,NLP里還有一種典型做法邓深,這種做法和圖像領(lǐng)域的方式就是看上去一致的了,一般將這種方法稱為“基于Fine-tuning的模式”笔刹,而GPT就是這一模式的典型開(kāi)創(chuàng)者芥备。
從Word Embedding到GPT
GPT是“Generative Pre-Training”的簡(jiǎn)稱,從名字看其含義是指的生成式的預(yù)訓(xùn)練舌菜。GPT也采用兩階段過(guò)程萌壳,第一個(gè)階段是利用語(yǔ)言模型進(jìn)行預(yù)訓(xùn)練,第二階段通過(guò)Fine-tuning的模式解決下游任務(wù)日月。上圖展示了GPT的預(yù)訓(xùn)練過(guò)程袱瓮,其實(shí)和ELMO是類(lèi)似的,主要不同在于兩點(diǎn):首先爱咬,特征抽取器不是用的RNN尺借,而是用的Transformer,上面提到過(guò)它的特征抽取能力要強(qiáng)于RNN精拟,這個(gè)選擇很明顯是很明智的燎斩;其次,GPT的預(yù)訓(xùn)練雖然仍然是以語(yǔ)言模型作為目標(biāo)任務(wù)蜂绎,但是采用的是單向的語(yǔ)言模型栅表,所謂“單向”的含義是指:語(yǔ)言模型訓(xùn)練的任務(wù)目標(biāo)是根據(jù) [圖片上傳失敗...(image-f13b38-1591887612341)]
單詞的上下文去正確預(yù)測(cè)單詞 [圖片上傳失敗...(image-2e7db1-1591887612341)]
, [圖片上傳失敗...(image-ca4914-1591887612341)]
之前的單詞序列Context-before稱為上文师枣,之后的單詞序列Context-after稱為下文谨读。ELMO在做語(yǔ)言模型預(yù)訓(xùn)練的時(shí)候,預(yù)測(cè)單詞 [圖片上傳失敗...(image-7ecc38-1591887612341)]
同時(shí)使用了上文和下文坛吁,而GPT則只采用Context-before這個(gè)單詞的上文來(lái)進(jìn)行預(yù)測(cè)劳殖,而拋開(kāi)了下文。這個(gè)選擇現(xiàn)在看不是個(gè)太好的選擇拨脉,原因很簡(jiǎn)單哆姻,它沒(méi)有把單詞的下文融合進(jìn)來(lái),這限制了其在更多應(yīng)用場(chǎng)景的效果玫膀,比如閱讀理解這種任務(wù)矛缨,在做任務(wù)的時(shí)候是可以允許同時(shí)看到上文和下文一起做決策的。如果預(yù)訓(xùn)練時(shí)候不把單詞的下文嵌入到Word Embedding中帖旨,是很吃虧的箕昭,白白丟掉了很多信息。
這里強(qiáng)行插入一段簡(jiǎn)單提下Transformer解阅,盡管上面提到了落竹,但是說(shuō)的還不完整,補(bǔ)充兩句货抄。首先述召,Transformer是個(gè)疊加的“自注意力機(jī)制(Self Attention)”構(gòu)成的深度網(wǎng)絡(luò),是目前NLP里最強(qiáng)的特征提取器蟹地,注意力這個(gè)機(jī)制在此被發(fā)揚(yáng)光大积暖,從任務(wù)的配角不斷搶?xiě)颍钡絋ransformer一躍成為踢開(kāi)RNN和CNN傳統(tǒng)特征提取器怪与,榮升頭牌夺刑,大紅大紫。你問(wèn)了:什么是注意力機(jī)制分别?這里再插個(gè)廣告遍愿,對(duì)注意力不了解的可以參考鄙人16年出品17年修正的下文:“深度學(xué)習(xí)中的注意力模型”,補(bǔ)充下相關(guān)基礎(chǔ)知識(shí)茎杂,如果不了解注意力機(jī)制你肯定會(huì)落后時(shí)代的發(fā)展错览。而介紹Transformer比較好的文章可以參考以下兩篇文章:一個(gè)是Jay Alammar可視化地介紹Transformer的博客文章The Illustrated Transformer ,非常容易理解整個(gè)機(jī)制煌往,建議先從這篇看起倾哺;然后可以參考哈佛大學(xué)NLP研究組寫(xiě)的“The Annotated Transformer. ”,代碼原理雙管齊下刽脖,講得非常清楚。我相信上面兩個(gè)文章足以讓你了解Transformer了曲管,所以這里不展開(kāi)介紹却邓。
其次,我的判斷是Transformer在未來(lái)會(huì)逐漸替代掉RNN成為主流的NLP工具院水,RNN一直受困于其并行計(jì)算能力腊徙,這是因?yàn)樗旧斫Y(jié)構(gòu)的序列性依賴導(dǎo)致的简十,盡管很多人在試圖通過(guò)修正RNN結(jié)構(gòu)來(lái)修正這一點(diǎn),但是我不看好這種模式撬腾,因?yàn)榻o馬車(chē)換輪胎不如把它升級(jí)到汽車(chē)螟蝙,這個(gè)道理很好懂,更何況目前汽車(chē)的雛形已經(jīng)出現(xiàn)了民傻,干嘛還要執(zhí)著在換輪胎這個(gè)事情呢胰默?是吧?再說(shuō)CNN漓踢,CNN在NLP里一直沒(méi)有形成主流牵署,CNN的最大優(yōu)點(diǎn)是易于做并行計(jì)算,所以速度快喧半,但是在捕獲NLP的序列關(guān)系尤其是長(zhǎng)距離特征方面天然有缺陷奴迅,不是做不到而是做不好,目前也有很多改進(jìn)模型薯酝,但是特別成功的不多半沽。綜合各方面情況,很明顯Transformer同時(shí)具備并行性好吴菠,又適合捕獲長(zhǎng)距離特征者填,沒(méi)有理由不在賽跑比賽中跑不過(guò)RNN和CNN。
好了做葵,題外話結(jié)束占哟,我們?cè)倩氐街黝},接著說(shuō)GPT酿矢。上面講的是GPT如何進(jìn)行第一階段的預(yù)訓(xùn)練榨乎,那么假設(shè)預(yù)訓(xùn)練好了網(wǎng)絡(luò)模型,后面下游任務(wù)怎么用瘫筐?它有自己的個(gè)性蜜暑,和ELMO的方式大有不同。
上圖展示了GPT在第二階段如何使用策肝。首先肛捍,對(duì)于不同的下游任務(wù)來(lái)說(shuō),本來(lái)你可以任意設(shè)計(jì)自己的網(wǎng)絡(luò)結(jié)構(gòu)之众,現(xiàn)在不行了拙毫,你要向GPT的網(wǎng)絡(luò)結(jié)構(gòu)看齊,把任務(wù)的網(wǎng)絡(luò)結(jié)構(gòu)改造成和GPT的網(wǎng)絡(luò)結(jié)構(gòu)是一樣的棺禾。然后缀蹄,在做下游任務(wù)的時(shí)候,利用第一步預(yù)訓(xùn)練好的參數(shù)初始化GPT的網(wǎng)絡(luò)結(jié)構(gòu),這樣通過(guò)預(yù)訓(xùn)練學(xué)到的語(yǔ)言學(xué)知識(shí)就被引入到你手頭的任務(wù)里來(lái)了缺前,這是個(gè)非常好的事情蛀醉。再次,你可以用手頭的任務(wù)去訓(xùn)練這個(gè)網(wǎng)絡(luò)诡延,對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行Fine-tuning滞欠,使得這個(gè)網(wǎng)絡(luò)更適合解決手頭的問(wèn)題。就是這樣肆良。看到了么逸绎?這有沒(méi)有讓你想起最開(kāi)始提到的圖像領(lǐng)域如何做預(yù)訓(xùn)練的過(guò)程(請(qǐng)參考上圖那句非常容易暴露年齡的歌詞)惹恃?對(duì),這跟那個(gè)模式是一模一樣的棺牧。
這里引入了一個(gè)新問(wèn)題:對(duì)于NLP各種花樣的不同任務(wù)巫糙,怎么改造才能靠近GPT的網(wǎng)絡(luò)結(jié)構(gòu)呢?
[圖片上傳中...(image-e43f77-1591887612341-16)]
GPT論文給了一個(gè)改造施工圖如上颊乘,其實(shí)也很簡(jiǎn)單:對(duì)于分類(lèi)問(wèn)題参淹,不用怎么動(dòng),加上一個(gè)起始和終結(jié)符號(hào)即可乏悄;對(duì)于句子關(guān)系判斷問(wèn)題浙值,比如Entailment,兩個(gè)句子中間再加個(gè)分隔符即可檩小;對(duì)文本相似性判斷問(wèn)題开呐,把兩個(gè)句子順序顛倒下做出兩個(gè)輸入即可,這是為了告訴模型句子順序不重要规求;對(duì)于多項(xiàng)選擇問(wèn)題筐付,則多路輸入,每一路把文章和答案選項(xiàng)拼接作為輸入即可阻肿。從上圖可看出瓦戚,這種改造還是很方便的,不同任務(wù)只需要在輸入部分施工即可丛塌。
GPT的效果是非常令人驚艷的较解,在12個(gè)任務(wù)里,9個(gè)達(dá)到了最好的效果姨伤,有些任務(wù)性能提升非常明顯哨坪。
那么站在現(xiàn)在的時(shí)間節(jié)點(diǎn)看,GPT有什么值得改進(jìn)的地方呢乍楚?其實(shí)最主要的就是那個(gè)單向語(yǔ)言模型当编,如果改造成雙向的語(yǔ)言模型任務(wù)估計(jì)也沒(méi)有Bert太多事了。當(dāng)然徒溪,即使如此GPT也是非常非常好的一個(gè)工作忿偷,跟Bert比金顿,其作者炒作能力亟待提升。
Bert的誕生
我們經(jīng)過(guò)跋山涉水鲤桥,終于到了目的地Bert模型了揍拆。
Bert采用和GPT完全相同的兩階段模型,首先是語(yǔ)言模型預(yù)訓(xùn)練茶凳;其次是使用Fine-Tuning模式解決下游任務(wù)嫂拴。和GPT的最主要不同在于在預(yù)訓(xùn)練階段采用了類(lèi)似ELMO的雙向語(yǔ)言模型,當(dāng)然另外一點(diǎn)是語(yǔ)言模型的數(shù)據(jù)規(guī)模要比GPT大。所以這里Bert的預(yù)訓(xùn)練過(guò)程不必多講了。
第二階段白胀,F(xiàn)ine-Tuning階段,這個(gè)階段的做法和GPT是一樣的辩恼。當(dāng)然,它也面臨著下游任務(wù)網(wǎng)絡(luò)結(jié)構(gòu)改造的問(wèn)題谓形,在改造任務(wù)方面Bert和GPT有些不同灶伊,下面簡(jiǎn)單介紹一下。
在介紹Bert如何改造下游任務(wù)之前寒跳,先大致說(shuō)下NLP的幾類(lèi)問(wèn)題聘萨,說(shuō)這個(gè)是為了強(qiáng)調(diào)Bert的普適性有多強(qiáng)。通常而言冯袍,絕大部分NLP問(wèn)題可以歸入上圖所示的四類(lèi)任務(wù)中:一類(lèi)是序列標(biāo)注匈挖,這是最典型的NLP任務(wù),比如中文分詞康愤,詞性標(biāo)注儡循,命名實(shí)體識(shí)別,語(yǔ)義角色標(biāo)注等都可以歸入這一類(lèi)問(wèn)題征冷,它的特點(diǎn)是句子中每個(gè)單詞要求模型根據(jù)上下文都要給出一個(gè)分類(lèi)類(lèi)別择膝。第二類(lèi)是分類(lèi)任務(wù),比如我們常見(jiàn)的文本分類(lèi)检激,情感計(jì)算等都可以歸入這一類(lèi)肴捉。它的特點(diǎn)是不管文章有多長(zhǎng),總體給出一個(gè)分類(lèi)類(lèi)別即可叔收。第三類(lèi)任務(wù)是句子關(guān)系判斷齿穗,比如Entailment,QA饺律,語(yǔ)義改寫(xiě)窃页,自然語(yǔ)言推理等任務(wù)都是這個(gè)模式,它的特點(diǎn)是給定兩個(gè)句子,模型判斷出兩個(gè)句子是否具備某種語(yǔ)義關(guān)系脖卖;第四類(lèi)是生成式任務(wù)乒省,比如機(jī)器翻譯,文本摘要畦木,寫(xiě)詩(shī)造句袖扛,看圖說(shuō)話等都屬于這一類(lèi)。它的特點(diǎn)是輸入文本內(nèi)容后十籍,需要自主生成另外一段文字蛆封。
對(duì)于種類(lèi)如此繁多而且各具特點(diǎn)的下游NLP任務(wù),Bert如何改造輸入輸出部分使得大部分NLP任務(wù)都可以使用Bert預(yù)訓(xùn)練好的模型參數(shù)呢妓雾?上圖給出示例娶吞,對(duì)于句子關(guān)系類(lèi)任務(wù),很簡(jiǎn)單械姻,和GPT類(lèi)似,加上一個(gè)起始和終結(jié)符號(hào)机断,句子之間加個(gè)分隔符即可楷拳。對(duì)于輸出來(lái)說(shuō),把第一個(gè)起始符號(hào)對(duì)應(yīng)的Transformer最后一層位置上面串接一個(gè)softmax分類(lèi)層即可吏奸。對(duì)于分類(lèi)問(wèn)題欢揖,與GPT一樣,只需要增加起始和終結(jié)符號(hào)奋蔚,輸出部分和句子關(guān)系判斷任務(wù)類(lèi)似改造她混;對(duì)于序列標(biāo)注問(wèn)題,輸入部分和單句分類(lèi)是一樣的泊碑,只需要輸出部分Transformer最后一層每個(gè)單詞對(duì)應(yīng)位置都進(jìn)行分類(lèi)即可坤按。從這里可以看出,上面列出的NLP四大任務(wù)里面馒过,除了生成類(lèi)任務(wù)外臭脓,Bert其它都覆蓋到了,而且改造起來(lái)很簡(jiǎn)單直觀腹忽。盡管Bert論文沒(méi)有提来累,但是稍微動(dòng)動(dòng)腦子就可以想到,其實(shí)對(duì)于機(jī)器翻譯或者文本摘要窘奏,聊天機(jī)器人這種生成式任務(wù)嘹锁,同樣可以稍作改造即可引入Bert的預(yù)訓(xùn)練成果。只需要附著在S2S結(jié)構(gòu)上着裹,encoder部分是個(gè)深度Transformer結(jié)構(gòu)领猾,decoder部分也是個(gè)深度Transformer結(jié)構(gòu)。根據(jù)任務(wù)選擇不同的預(yù)訓(xùn)練數(shù)據(jù)初始化encoder和decoder即可。這是相當(dāng)直觀的一種改造方法瘤运。當(dāng)然窍霞,也可以更簡(jiǎn)單一點(diǎn),比如直接在單個(gè)Transformer結(jié)構(gòu)上加裝隱層產(chǎn)生輸出也是可以的拯坟。不論如何但金,從這里可以看出,NLP四大類(lèi)任務(wù)都可以比較方便地改造成Bert能夠接受的方式郁季。這其實(shí)是Bert的非常大的優(yōu)點(diǎn)冷溃,這意味著它幾乎可以做任何NLP的下游任務(wù),具備普適性梦裂,這是很強(qiáng)的似枕。
Bert采用這種兩階段方式解決各種NLP任務(wù)效果如何?在11個(gè)各種類(lèi)型的NLP任務(wù)中達(dá)到目前最好的效果年柠,某些任務(wù)性能有極大的提升凿歼。一個(gè)新模型好不好,效果才是王道冗恨。
到這里我們可以再梳理下幾個(gè)模型之間的演進(jìn)關(guān)系答憔。從上圖可見(jiàn),Bert其實(shí)和ELMO及GPT存在千絲萬(wàn)縷的關(guān)系掀抹,比如如果我們把GPT預(yù)訓(xùn)練階段換成雙向語(yǔ)言模型虐拓,那么就得到了Bert;而如果我們把ELMO的特征抽取器換成Transformer傲武,那么我們也會(huì)得到Bert蓉驹。所以你可以看出:Bert最關(guān)鍵兩點(diǎn),一點(diǎn)是特征抽取器采用Transformer揪利;第二點(diǎn)是預(yù)訓(xùn)練的時(shí)候采用雙向語(yǔ)言模型态兴。
那么新問(wèn)題來(lái)了:對(duì)于Transformer來(lái)說(shuō),怎么才能在這個(gè)結(jié)構(gòu)上做雙向語(yǔ)言模型任務(wù)呢土童?乍一看上去好像不太好搞诗茎。我覺(jué)得吧,其實(shí)有一種很直觀的思路献汗,怎么辦敢订?看看ELMO的網(wǎng)絡(luò)結(jié)構(gòu)圖,只需要把兩個(gè)LSTM替換成兩個(gè)Transformer罢吃,一個(gè)負(fù)責(zé)正向楚午,一個(gè)負(fù)責(zé)反向特征提取,其實(shí)應(yīng)該就可以尿招。當(dāng)然這是我自己的改造矾柜,Bert沒(méi)這么做阱驾。那么Bert是怎么做的呢?我們前面不是提過(guò)Word2Vec嗎怪蔑?我前面肯定不是漫無(wú)目的地提到它里覆,提它是為了在這里引出那個(gè)CBOW訓(xùn)練方法,所謂寫(xiě)作時(shí)候埋伏筆的“草蛇灰線缆瓣,伏脈千里”喧枷,大概就是這個(gè)意思吧?前面提到了CBOW方法弓坞,它的核心思想是:在做語(yǔ)言模型任務(wù)的時(shí)候隧甚,我把要預(yù)測(cè)的單詞摳掉,然后根據(jù)它的上文Context-Before和下文Context-after去預(yù)測(cè)單詞渡冻。其實(shí)Bert怎么做的戚扳?Bert就是這么做的。從這里可以看到方法間的繼承關(guān)系族吻。當(dāng)然Bert作者沒(méi)提Word2Vec及CBOW方法帽借,這是我的判斷,Bert作者說(shuō)是受到完形填空任務(wù)的啟發(fā)超歌,這也很可能宜雀,但是我覺(jué)得他們要是沒(méi)想到過(guò)CBOW估計(jì)是不太可能的。
從這里可以看出握础,在文章開(kāi)始我說(shuō)過(guò)Bert在模型方面其實(shí)沒(méi)有太大創(chuàng)新,更像一個(gè)最近幾年NLP重要技術(shù)的集大成者悴品,原因在于此禀综,當(dāng)然我不確定你怎么看,是否認(rèn)同這種看法苔严,而且我也不關(guān)心你怎么看定枷。其實(shí)Bert本身的效果好和普適性強(qiáng)才是最大的亮點(diǎn)。
那么Bert本身在模型和方法角度有什么創(chuàng)新呢届氢?就是論文中指出的Masked 語(yǔ)言模型和Next Sentence Prediction欠窒。而Masked語(yǔ)言模型上面講了,本質(zhì)思想其實(shí)是CBOW退子,但是細(xì)節(jié)方面有改進(jìn)岖妄。
Masked雙向語(yǔ)言模型向上圖展示這么做:隨機(jī)選擇語(yǔ)料中15%的單詞,把它摳掉寂祥,也就是用[Mask]掩碼代替原始單詞荐虐,然后要求模型去正確預(yù)測(cè)被摳掉的單詞。但是這里有個(gè)問(wèn)題:訓(xùn)練過(guò)程大量看到[mask]標(biāo)記丸凭,但是真正后面用的時(shí)候是不會(huì)有這個(gè)標(biāo)記的福扬,這會(huì)引導(dǎo)模型認(rèn)為輸出是針對(duì)[mask]這個(gè)標(biāo)記的腕铸,但是實(shí)際使用又見(jiàn)不到這個(gè)標(biāo)記,這自然會(huì)有問(wèn)題铛碑。為了避免這個(gè)問(wèn)題狠裹,Bert改造了一下,15%的被上天選中要執(zhí)行[mask]替身這項(xiàng)光榮任務(wù)的單詞中汽烦,只有80%真正被替換成[mask]標(biāo)記涛菠,10%被貍貓換太子隨機(jī)替換成另外一個(gè)單詞,10%情況這個(gè)單詞還待在原地不做改動(dòng)刹缝。這就是Masked雙向語(yǔ)音模型的具體做法碗暗。
至于說(shuō)“Next Sentence Prediction”,指的是做語(yǔ)言模型預(yù)訓(xùn)練的時(shí)候梢夯,分兩種情況選擇兩個(gè)句子言疗,一種是選擇語(yǔ)料中真正順序相連的兩個(gè)句子;另外一種是第二個(gè)句子從語(yǔ)料庫(kù)中拋色子颂砸,隨機(jī)選擇一個(gè)拼到第一個(gè)句子后面噪奄。我們要求模型除了做上述的Masked語(yǔ)言模型任務(wù)外,附帶再做個(gè)句子關(guān)系預(yù)測(cè)人乓,判斷第二個(gè)句子是不是真的是第一個(gè)句子的后續(xù)句子勤篮。之所以這么做,是考慮到很多NLP任務(wù)是句子關(guān)系判斷任務(wù)色罚,單詞預(yù)測(cè)粒度的訓(xùn)練到不了句子關(guān)系這個(gè)層級(jí)碰缔,增加這個(gè)任務(wù)有助于下游句子關(guān)系判斷任務(wù)。所以可以看到戳护,它的預(yù)訓(xùn)練是個(gè)多任務(wù)過(guò)程金抡。這也是Bert的一個(gè)創(chuàng)新。
上面這個(gè)圖給出了一個(gè)我們此前利用微博數(shù)據(jù)和開(kāi)源的Bert做預(yù)訓(xùn)練時(shí)隨機(jī)抽出的一個(gè)中文訓(xùn)練實(shí)例腌且,從中可以體會(huì)下上面講的masked語(yǔ)言模型和下句預(yù)測(cè)任務(wù)梗肝。訓(xùn)練數(shù)據(jù)就長(zhǎng)這種樣子。
順帶講解下Bert的輸入部分铺董,也算是有些特色巫击。它的輸入部分是個(gè)線性序列,兩個(gè)句子通過(guò)分隔符分割精续,最前面和最后增加兩個(gè)標(biāo)識(shí)符號(hào)坝锰。每個(gè)單詞有三個(gè)embedding:位置信息embedding,這是因?yàn)镹LP中單詞順序是很重要的特征驻右,需要在這里對(duì)位置信息進(jìn)行編碼什黑;單詞embedding,這個(gè)就是我們之前一直提到的單詞embedding;第三個(gè)是句子embedding堪夭,因?yàn)榍懊嫣岬接?xùn)練數(shù)據(jù)都是由兩個(gè)句子構(gòu)成的愕把,那么每個(gè)句子有個(gè)句子整體的embedding項(xiàng)對(duì)應(yīng)給每個(gè)單詞拣凹。把單詞對(duì)應(yīng)的三個(gè)embedding疊加,就形成了Bert的輸入恨豁。
至于Bert在預(yù)訓(xùn)練的輸出部分如何組織嚣镜,可以參考上圖的注釋。
[圖片上傳中...(image-1ca53a-1591887612340-1)]
我們說(shuō)過(guò)Bert效果特別好橘蜜,那么到底是什么因素起作用呢菊匿?如上圖所示,對(duì)比試驗(yàn)可以證明计福,跟GPT相比跌捆,雙向語(yǔ)言模型起到了最主要的作用,對(duì)于那些需要看到下文的任務(wù)來(lái)說(shuō)尤其如此象颖。而預(yù)測(cè)下個(gè)句子來(lái)說(shuō)對(duì)整體性能來(lái)說(shuō)影響不算太大佩厚,跟具體任務(wù)關(guān)聯(lián)度比較高。
最后说订,我講講我對(duì)Bert的評(píng)價(jià)和看法抄瓦,我覺(jué)得Bert是NLP里里程碑式的工作,對(duì)于后面NLP的研究和工業(yè)應(yīng)用會(huì)產(chǎn)生長(zhǎng)久的影響陶冷,這點(diǎn)毫無(wú)疑問(wèn)钙姊。但是從上文介紹也可以看出,從模型或者方法角度看埂伦,Bert借鑒了ELMO煞额,GPT及CBOW,主要提出了Masked 語(yǔ)言模型及Next Sentence Prediction沾谜,但是這里Next Sentence Prediction基本不影響大局立镶,而Masked LM明顯借鑒了CBOW的思想。所以說(shuō)Bert的模型沒(méi)什么大的創(chuàng)新类早,更像最近幾年NLP重要進(jìn)展的集大成者,這點(diǎn)如果你看懂了上文估計(jì)也沒(méi)有太大異議嗜逻,如果你有大的異議涩僻,杠精這個(gè)大帽子我隨時(shí)準(zhǔn)備戴給你。如果歸納一下這些進(jìn)展就是:首先是兩階段模型栈顷,第一階段雙向語(yǔ)言模型預(yù)訓(xùn)練逆日,這里注意要用雙向而不是單向,第二階段采用具體任務(wù)Fine-tuning或者做特征集成萄凤;第二是特征抽取要用Transformer作為特征提取器而不是RNN或者CNN室抽;第三,雙向語(yǔ)言模型可以采取CBOW的方法去做(當(dāng)然我覺(jué)得這個(gè)是個(gè)細(xì)節(jié)問(wèn)題靡努,不算太關(guān)鍵坪圾,前兩個(gè)因素比較關(guān)鍵)晓折。Bert最大的亮點(diǎn)在于效果好及普適性強(qiáng),幾乎所有NLP任務(wù)都可以套用Bert這種兩階段解決思路兽泄,而且效果應(yīng)該會(huì)有明顯提升漓概。可以預(yù)見(jiàn)的是病梢,未來(lái)一段時(shí)間在NLP應(yīng)用領(lǐng)域胃珍,Transformer將占據(jù)主導(dǎo)地位,而且這種兩階段預(yù)訓(xùn)練方法也會(huì)主導(dǎo)各種應(yīng)用蜓陌。
另外觅彰,我們應(yīng)該弄清楚預(yù)訓(xùn)練這個(gè)過(guò)程本質(zhì)上是在做什么事情,本質(zhì)上預(yù)訓(xùn)練是通過(guò)設(shè)計(jì)好一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)來(lái)做語(yǔ)言模型任務(wù)钮热,然后把大量甚至是無(wú)窮盡的無(wú)標(biāo)注的自然語(yǔ)言文本利用起來(lái)填抬,預(yù)訓(xùn)練任務(wù)把大量語(yǔ)言學(xué)知識(shí)抽取出來(lái)編碼到網(wǎng)絡(luò)結(jié)構(gòu)中,當(dāng)手頭任務(wù)帶有標(biāo)注信息的數(shù)據(jù)有限時(shí)霉旗,這些先驗(yàn)的語(yǔ)言學(xué)特征當(dāng)然會(huì)對(duì)手頭任務(wù)有極大的特征補(bǔ)充作用痴奏,因?yàn)楫?dāng)數(shù)據(jù)有限的時(shí)候,很多語(yǔ)言學(xué)現(xiàn)象是覆蓋不到的厌秒,泛化能力就弱读拆,集成盡量通用的語(yǔ)言學(xué)知識(shí)自然會(huì)加強(qiáng)模型的泛化能力。如何引入先驗(yàn)的語(yǔ)言學(xué)知識(shí)其實(shí)一直是NLP尤其是深度學(xué)習(xí)場(chǎng)景下的NLP的主要目標(biāo)之一鸵闪,不過(guò)一直沒(méi)有太好的解決辦法檐晕,而ELMO/GPT/Bert的這種兩階段模式看起來(lái)無(wú)疑是解決這個(gè)問(wèn)題自然又簡(jiǎn)潔的方法,這也是這些方法的主要價(jià)值所在蚌讼。
對(duì)于當(dāng)前NLP的發(fā)展方向辟灰,我個(gè)人覺(jué)得有兩點(diǎn)非常重要,一個(gè)是需要更強(qiáng)的特征抽取器篡石,目前看Transformer會(huì)逐漸擔(dān)當(dāng)大任芥喇,但是肯定還是不夠強(qiáng)的,需要發(fā)展更強(qiáng)的特征抽取器凰萨;第二個(gè)就是如何優(yōu)雅地引入大量無(wú)監(jiān)督數(shù)據(jù)中包含的語(yǔ)言學(xué)知識(shí)继控,注意我這里強(qiáng)調(diào)地是優(yōu)雅,而不是引入胖眷,此前相當(dāng)多的工作試圖做各種語(yǔ)言學(xué)知識(shí)的嫁接或者引入武通,但是很多方法看著讓人牙疼,就是我說(shuō)的不優(yōu)雅珊搀。目前看預(yù)訓(xùn)練這種兩階段方法還是很有效的冶忱,也非常簡(jiǎn)潔,當(dāng)然后面肯定還會(huì)有更好的模型出現(xiàn)境析。
完了囚枪,這就是自然語(yǔ)言模型預(yù)訓(xùn)練的發(fā)展史眶拉。