RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

遷移學(xué)習(xí)與模型預(yù)訓(xùn)練:何去何從

WpOh_rgznai100 ? 來(lái)源:lq ? 2019-07-18 11:29 ? 次閱讀

2018年是NLP的收獲大年,模型預(yù)訓(xùn)練技術(shù)終于被批量成功應(yīng)用于多項(xiàng)NLP任務(wù)。之前搞NLP的人一直羨慕搞CV的人,在ImageNet上訓(xùn)練好的模型,居然拿到各種任務(wù)里用都非常有效?,F(xiàn)在情形有點(diǎn)逆轉(zhuǎn)了。搞CV的人開始羨慕搞NLP的人了。CV界用的還是在有監(jiān)督數(shù)據(jù)上訓(xùn)練出來(lái)的模型,而NLP那幫家伙居然直接搞出了在無(wú)監(jiān)督數(shù)據(jù)上的通用預(yù)訓(xùn)練模型!要知道NLP中最不缺的就是無(wú)監(jiān)督的文本數(shù)據(jù),幾乎就是要多少有多少。還有個(gè)好消息是目前NLP中通用預(yù)訓(xùn)練模型的效果還遠(yuǎn)沒(méi)達(dá)到極限。目前發(fā)現(xiàn)只要使用更多的無(wú)監(jiān)督數(shù)據(jù)訓(xùn)練模型,模型效果就會(huì)更優(yōu)。這種簡(jiǎn)單粗暴的優(yōu)化方法對(duì)大公司來(lái)說(shuō)實(shí)在再經(jīng)濟(jì)不過(guò)。而且,算法本身的效果也在快速迭代中。NLP的未來(lái)真是一片光明啊~

BERT發(fā)布之后,點(diǎn)燃了NLP各界的歡騰,各路神仙開始加班加點(diǎn)各顯神通,很多相關(guān)工作被發(fā)表出來(lái)。本文會(huì)介紹其中的一些代表性工作,但更重要的是希望理清這些背后的邏輯,為它們歸歸類。通過(guò)這些思考,我自己也對(duì)NLP以后的工作方向有些預(yù)測(cè),供大家參考。

本文的內(nèi)容主要包括以下幾部分:

我對(duì)遷移學(xué)習(xí)和模型預(yù)訓(xùn)練的一些思考,以及對(duì)未來(lái)工作方向的粗略預(yù)測(cè)

各類代表性工作的具體介紹(熟悉的同學(xué)可忽略),又細(xì)分為以下幾大類:

有監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練

自監(jiān)督訓(xùn)練

無(wú)監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練

多個(gè)有監(jiān)督數(shù)據(jù)同時(shí)訓(xùn)練:多任務(wù)學(xué)習(xí)

3. 一些我們的實(shí)踐經(jīng)驗(yàn)、別人和自己的觀點(diǎn)、以及總結(jié)和感想

第一和第三部分內(nèi)容相對(duì)少,原創(chuàng)密度大點(diǎn),大家要是趕時(shí)間的話看這兩部分就夠了。第二部分的內(nèi)容都是具體技術(shù),有很多很好的文章都介紹過(guò)。放在本文當(dāng)中一是為了文章的完備性,另一個(gè)是里面提到的一些知識(shí)點(diǎn)在其他地方?jīng)]怎么提到。第三部分也會(huì)涉及到我們(愛(ài)因互動(dòng))自己在一些任務(wù)上的實(shí)驗(yàn)工作,期望這些結(jié)果能堅(jiān)定大家在自己的工作中把模型預(yù)訓(xùn)練技術(shù)用起來(lái)。

終于可以開始了。

一、遷移學(xué)習(xí)與模型預(yù)訓(xùn)練:何去何從

▌遷移學(xué)習(xí)分類

把我們當(dāng)前要處理的NLP任務(wù)叫做T(T稱為目標(biāo)任務(wù)),遷移學(xué)習(xí)技術(shù)做的事是利用另一個(gè)任務(wù)S(S稱為源任務(wù))來(lái)提升任務(wù)T的效果,也即把S的信息遷移到T中。至于怎么遷移信息就有很多方法了,可以直接利用S的數(shù)據(jù),也可以利用在S上訓(xùn)練好的模型,等等。

依據(jù)目標(biāo)任務(wù)T是否有標(biāo)注數(shù)據(jù),可以把遷移學(xué)習(xí)技術(shù)分為兩大類,每個(gè)大類里又可以分為多個(gè)小類。

第一大類是T沒(méi)有任何標(biāo)注數(shù)據(jù),比如現(xiàn)在很火的無(wú)監(jiān)督翻譯技術(shù)。但這類技術(shù)目前主要還是偏學(xué)術(shù)研究,離工業(yè)應(yīng)用還有挺長(zhǎng)距離的。工業(yè)應(yīng)用中的絕大部分任務(wù),我們總是能想辦法標(biāo)注一些數(shù)據(jù)的。而且,目前有監(jiān)督模型效果要顯著優(yōu)于無(wú)監(jiān)督模型。所以,面對(duì)完全沒(méi)有標(biāo)注數(shù)據(jù)的任務(wù),最明智的做法是先借助于無(wú)監(jiān)督技術(shù)(如聚類/降維)分析數(shù)據(jù),然后做一些數(shù)據(jù)標(biāo)注,把原始的無(wú)監(jiān)督任務(wù)轉(zhuǎn)變?yōu)橛斜O(jiān)督任務(wù)進(jìn)行求解。基于這些原因,本文不再介紹這大類相關(guān)的工作。

第二大類是T有標(biāo)注數(shù)據(jù),或者說(shuō)T是個(gè)有監(jiān)督任務(wù)。這類遷移學(xué)習(xí)技術(shù)又可以依據(jù)源任務(wù)是否有監(jiān)督,以及訓(xùn)練順序兩個(gè)維度,大致分為四小類:

源任務(wù)S是無(wú)監(jiān)督的,且源數(shù)據(jù)和目標(biāo)數(shù)據(jù)同時(shí)用于訓(xùn)練:此時(shí)主要就是自監(jiān)督(self-supervised)學(xué)習(xí)技術(shù),代表工作有之后會(huì)講到的CVT。

源任務(wù)S是有監(jiān)督的,且源數(shù)據(jù)和目標(biāo)數(shù)據(jù)同時(shí)用于訓(xùn)練:此時(shí)主要就是多任務(wù)(multi-task)學(xué)習(xí)技術(shù),代表工作有之后會(huì)講到的MT-DNN。

源任務(wù)S是無(wú)監(jiān)督的,且先使用源數(shù)據(jù)訓(xùn)練,再使用目標(biāo)數(shù)據(jù)訓(xùn)練(序貫訓(xùn)練):此時(shí)主要就是以BERT為代表的無(wú)監(jiān)督模型預(yù)訓(xùn)練技術(shù),代表工作有ELMo、ULMFiT、GPT/GPT-2、BERT、MASS、UNILM。

源任務(wù)S是有監(jiān)督的,且先使用源數(shù)據(jù)訓(xùn)練,再使用目標(biāo)數(shù)據(jù)訓(xùn)練(序貫訓(xùn)練):此時(shí)主要就是有監(jiān)督模型預(yù)訓(xùn)練技術(shù),類似CV中在ImageNet上有監(jiān)督訓(xùn)練模型,然后把此模型遷移到其他任務(wù)上去的范式。代表工作有之后會(huì)講到的CoVe。

何去何從

▌現(xiàn)狀分析

先說(shuō)說(shuō)上表中四個(gè)類別的各自命運(yùn)。以BERT為代表的無(wú)監(jiān)督模型預(yù)訓(xùn)練技術(shù)顯然是最有前途的。之前也說(shuō)了,NLP中最不缺的就是無(wú)監(jiān)督數(shù)據(jù)。只要堆計(jì)算資源就能提升效果的話,再簡(jiǎn)單不過(guò)了。

而無(wú)監(jiān)督預(yù)訓(xùn)練的成功,也就基本擠壓掉了自監(jiān)督學(xué)習(xí)提升段位的空間。這里說(shuō)的自監(jiān)督學(xué)習(xí)不是泛指,而是特指同時(shí)利用無(wú)監(jiān)督數(shù)據(jù)和當(dāng)前有監(jiān)督數(shù)據(jù)一起訓(xùn)練模型的方式。既然是同時(shí)訓(xùn)練,就不太可能大規(guī)模地利用無(wú)監(jiān)督數(shù)據(jù)(要不然就要為每個(gè)特定任務(wù)都訓(xùn)練很久,不現(xiàn)實(shí)),這樣帶來(lái)的效果就沒(méi)法跟無(wú)監(jiān)督預(yù)訓(xùn)練方式相比。

但自監(jiān)督學(xué)習(xí)還是有存在空間的,比如現(xiàn)在發(fā)現(xiàn)在做有監(jiān)督任務(wù)訓(xùn)練時(shí),把語(yǔ)言模型作為輔助損失函數(shù)加入到目標(biāo)函數(shù)中,可以減輕精調(diào)或多任務(wù)學(xué)習(xí)時(shí)的災(zāi)難性遺忘(Catastrophic Forgetting)問(wèn)題,提升訓(xùn)練的收斂速度。所以有可能在訓(xùn)練時(shí)加入一些同領(lǐng)域的無(wú)監(jiān)督數(shù)據(jù),不僅能減輕遺忘問(wèn)題,還可能因?yàn)樽屇P捅A粝赂嗟念I(lǐng)域信息而提升最終模型的泛化性。但這個(gè)方向迎來(lái)大的發(fā)展可能性不大。

而類似CV中使用大規(guī)模有監(jiān)督數(shù)據(jù)做模型預(yù)訓(xùn)練這條路,看著也比較暗淡,它自己?jiǎn)为?dú)不太可能有很大前景。

幾個(gè)原因:

1) 這條路已經(jīng)嘗試了很久,沒(méi)有很顯著的效果提升。

2) NLP中獲取大規(guī)模標(biāo)注數(shù)據(jù)很難,而且還要求對(duì)應(yīng)任務(wù)足夠復(fù)雜以便學(xué)習(xí)出的模型包含各種語(yǔ)言知識(shí)。雖然機(jī)器翻譯任務(wù)很有希望成為這種任務(wù),但它也存在很多問(wèn)題,比如小語(yǔ)種的翻譯標(biāo)注數(shù)據(jù)很少,翻譯標(biāo)注數(shù)據(jù)主要還是單句形式,從中沒(méi)法學(xué)習(xí)到背景信息或多輪等信息。但從另一個(gè)方面看,NLP搞了這么久,其實(shí)還是積累了很多標(biāo)注或者結(jié)構(gòu)化數(shù)據(jù),比如知識(shí)圖譜。如何把這些信息融合到具體任務(wù)中最近一直都是很活躍的研究方向,相信將來(lái)也會(huì)是。只是BERT出來(lái)后,這種做法的價(jià)值更像是打補(bǔ)丁,而不是搭地基了。

多任務(wù)學(xué)習(xí)作為代價(jià)較小的方法,前景還是很光明的。多個(gè)同領(lǐng)域甚至同數(shù)據(jù)上的不同任務(wù)同時(shí)訓(xùn)練,不僅能降低整體的訓(xùn)練時(shí)間,還能降低整體的預(yù)測(cè)時(shí)間(如果同時(shí)被使用),還能互相提升效果,何樂(lè)而不為。當(dāng)然,多任務(wù)學(xué)習(xí)的目標(biāo)一開始就不是搭地基。

上面說(shuō)了這么多,其實(shí)想說(shuō)的重點(diǎn)在下面。這些技術(shù)不一定非要單獨(dú)使用啊,組合起來(lái)一起用,取長(zhǎng)補(bǔ)短不是就皆大歡喜了嘛。

先回顧下現(xiàn)在的無(wú)監(jiān)督模型預(yù)訓(xùn)練流程,如下圖:

首先是利用大的無(wú)監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練通用模型,優(yōu)化目標(biāo)主要是語(yǔ)言模型(或其變種)。第二步,利用有監(jiān)督數(shù)據(jù)精調(diào)上一步得到的通用模型。這么做的目的是期望精調(diào)以后的通用模型更強(qiáng)調(diào)這個(gè)特定任務(wù)所包含的語(yǔ)言信息。這一步是可選的(所以圖中對(duì)應(yīng)加了括號(hào)),有些模型框架下沒(méi)有這個(gè)步驟,比如BERT里面就沒(méi)有。第三步才是利用有監(jiān)督數(shù)據(jù)中對(duì)應(yīng)的標(biāo)注數(shù)據(jù)訓(xùn)練特定任務(wù)對(duì)應(yīng)的模型。

那這個(gè)流程接下來(lái)會(huì)怎么發(fā)展呢?

▌未來(lái)可期

上面我已經(jīng)對(duì)四類方法做了分別的介紹,包括對(duì)它們各自前途的簡(jiǎn)單判斷,也介紹了當(dāng)下效果最好的模型預(yù)訓(xùn)練流程。相信未來(lái)NLP的很多工作都會(huì)圍繞這個(gè)流程的優(yōu)化展開。我判斷這個(gè)流程會(huì)繼續(xù)發(fā)展為下面這個(gè)樣子:

詳細(xì)說(shuō)明下每個(gè)步驟:

第一步還是利用大的無(wú)監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練通用模型。但這里面目前可以改進(jìn)的點(diǎn)有很多,比如發(fā)展比Transformer更有效的特征抽取結(jié)構(gòu),現(xiàn)在的Evolved Transformer和Universal Transformer等都是這方面的探索。發(fā)展更有效更多樣化的預(yù)訓(xùn)練模型目標(biāo)函數(shù)。目前預(yù)訓(xùn)練模型的目標(biāo)函數(shù)主要是(Masked) LM和Next Sentence Prediction (NSP),還是挺單一的。面向文檔級(jí)背景或多輪這種長(zhǎng)文本信息,未來(lái)應(yīng)該會(huì)發(fā)展出更好的目標(biāo)函數(shù)。比如有可能會(huì)發(fā)展出針對(duì)多輪對(duì)話這種數(shù)據(jù)的目標(biāo)函數(shù)。

BERT主要面向的是NLU類型的任務(wù),目前微軟提出的MASS、UNILM從不同的角度把BERT框架推廣到NLG類型的任務(wù)上了,細(xì)節(jié)我們之后會(huì)講到。GPT-2利用更大的模型獲得了更好的語(yǔ)言模型。更多更好的數(shù)據(jù),更大的模型帶來(lái)的改進(jìn)有沒(méi)有極限?目前還不知道,相信很多公司已經(jīng)在做這方面的探索了。但這個(gè)游戲目前還是只有大公司能玩得起,訓(xùn)練通用大模型太耗錢了。提升訓(xùn)練效率,很自然的就是另一個(gè)很重要的優(yōu)化方向。

第二步是利用其他大任務(wù)的標(biāo)注數(shù)據(jù)或已有結(jié)構(gòu)化知識(shí)精調(diào)第一步獲得的通用模型。這一步不一定以單獨(dú)的形式存在,它也可以放到第一步中,在預(yù)訓(xùn)練通用模型時(shí)就把這些額外信息注入進(jìn)去,比如百度的ERNIE就是在預(yù)訓(xùn)練時(shí)就把實(shí)體信息注入進(jìn)去了。既然人類在漫長(zhǎng)的AI研究史上積累了大量各式各樣的結(jié)構(gòu)化數(shù)據(jù),比如機(jī)器翻譯標(biāo)注數(shù)據(jù),沒(méi)理由不把它們用起來(lái)。相信未來(lái)會(huì)有很多知識(shí)融合(注入)這方面的工作。

第三步和前面流程的第二步相同,即利用當(dāng)前任務(wù)數(shù)據(jù)進(jìn)一步精調(diào)上一步得到的通用模型。這么做的目的是期望精調(diào)后的模型更強(qiáng)調(diào)這個(gè)特定任務(wù)所包含的語(yǔ)言信息。ELMo的實(shí)驗(yàn)結(jié)論是,加入這一步往往能提升下一步的特定任務(wù)有監(jiān)督訓(xùn)練的收斂速度,但僅在部分任務(wù)上最終模型獲得了效果提升(在另一部分任務(wù)上持平)。

另一種做法是把這一步與下一步的特定任務(wù)有監(jiān)督訓(xùn)練放在一塊進(jìn)行,也即在特定任務(wù)有監(jiān)督訓(xùn)練時(shí)把語(yǔ)言模型作為輔助目標(biāo)函數(shù)加入到訓(xùn)練過(guò)程中,以期提升模型收斂速度,降低模型對(duì)已學(xué)到知識(shí)的遺忘速度,提升最終模型的效果。GPT的實(shí)驗(yàn)結(jié)論是,如果特定任務(wù)有監(jiān)督訓(xùn)練的數(shù)據(jù)量比較大時(shí),加入輔助語(yǔ)言模型能改善模型效果,但如果特定任務(wù)有監(jiān)督訓(xùn)練的數(shù)據(jù)量比較小時(shí),加入輔助語(yǔ)言模型反而會(huì)降低模型效果。但ULMFiT上的結(jié)論剛好相反。所以就試吧。

利用多任務(wù)或者單任務(wù)建模方式在有監(jiān)督數(shù)據(jù)集上訓(xùn)練特定任務(wù)模型。多任務(wù)的很多研究相信都能移植到這個(gè)流程當(dāng)中。我們之后會(huì)介紹的微軟工作MT-DNN就是利用BERT來(lái)做多任務(wù)學(xué)習(xí)的底層共享模型。論文中的實(shí)驗(yàn)表明加入多任務(wù)學(xué)習(xí)機(jī)制后效果有顯著提升。相信在這個(gè)方向還會(huì)有更多的探索工作出現(xiàn)。在單任務(wù)場(chǎng)景下,原來(lái)大家發(fā)展出的各種任務(wù)相關(guān)的模型,是否能在無(wú)監(jiān)督預(yù)訓(xùn)練時(shí)代帶來(lái)額外的收益,這也有待驗(yàn)證。

總結(jié)下,未來(lái)NLP的主要工作可能都會(huì)圍繞這個(gè)流程展開。對(duì)流程前面步驟的優(yōu)化帶來(lái)的收益比后面步驟大,也更難。所以諸君請(qǐng)自己拿捏吧~。

二、各類代表性工作

套用下前面對(duì)遷移學(xué)習(xí)分類的方式,把接下來(lái)要介紹的具體模型放到對(duì)應(yīng)的模塊里,這樣邏輯會(huì)更清楚一些。

我們先介紹CoVe和CVT。

▌?dòng)斜O(jiān)督模型預(yù)訓(xùn)練:CoVe

CoVe是在 McCann et al., Learned in Translation: Contextualized Word Vectors 這個(gè)論文中提出的。自然語(yǔ)言中的一詞多義非常常見,比如“蘋果手機(jī)”和“蘋果香蕉”里的“蘋果”,含義明顯不同。以Word2Vec為代表的詞表示方法沒(méi)法依據(jù)詞所在的當(dāng)前背景調(diào)整表示向量。所以NLPer一直在嘗試找背景相關(guān)的詞表示法(Contextualized Word Representation)。CoVe就是這方面的一個(gè)嘗試。

CoVe首先在翻譯標(biāo)注數(shù)據(jù)上預(yù)訓(xùn)練encoder2decoder模型。其中的encoder模塊使用的是BiLSTM。訓(xùn)練好的encoder,就可以作為特征抽取器,獲得任意句子中每個(gè)token的帶背景詞向量:

使用的時(shí)候,只要把和拼接起來(lái)就行。

論文作者在分類和匹配下游任務(wù)對(duì)CoVe的效果做過(guò)驗(yàn)證,效果肯定是有一些提升了,但提升也不是很明顯。

總結(jié)下CoVe的特點(diǎn):

預(yù)訓(xùn)練依賴于有監(jiān)督數(shù)據(jù)(翻譯數(shù)據(jù))。

CoVe結(jié)果以特征抽取的方式融合到下游任務(wù)模型中,但下游任務(wù)還是要自定義對(duì)應(yīng)的模型。

▌自監(jiān)督學(xué)習(xí)同時(shí)訓(xùn)練:CVT

CVT (Cross-View Training)在利用有監(jiān)督數(shù)據(jù)訓(xùn)練特定任務(wù)模型時(shí),同時(shí)會(huì)使用無(wú)監(jiān)督數(shù)據(jù)做自監(jiān)督學(xué)習(xí)。Encoder使用的是2層的CNN-BiLSTM,訓(xùn)練過(guò)程使用標(biāo)注數(shù)據(jù)和非標(biāo)注數(shù)據(jù)交替訓(xùn)練。利用標(biāo)注數(shù)據(jù)訓(xùn)練主預(yù)測(cè)模塊,同時(shí)構(gòu)造多個(gè)輔助模塊,輔助模塊利用非標(biāo)注數(shù)據(jù)擬合主模塊的預(yù)測(cè)概率。輔助模塊的輸入僅包含所有輸入中的部分信息,這個(gè)思想和dropout有點(diǎn)像,可以提高模型的穩(wěn)定性。不同的特定任務(wù),輔助模塊的構(gòu)造方式不同,如何選輸入中部分信息的方式也不同。

例如,對(duì)于序列標(biāo)注任務(wù),論文中以biLSTM第一層和第二層的狀態(tài)向量拼接后輸入進(jìn)主預(yù)測(cè)模塊。而4個(gè)輔助模塊則使用了第一層的各個(gè)單向狀態(tài)向量作為輸入。使用的是第一層前向LSTM當(dāng)前詞的狀態(tài)向量,使用的是第一層后向LSTM當(dāng)前詞的狀態(tài)向量。使用的是第一層前向LSTM前一個(gè)詞的狀態(tài)向量,而使用的是第一層后向LSTM后一個(gè)詞的狀態(tài)向量。

作者也在多任務(wù)學(xué)習(xí)上驗(yàn)證了CVT帶來(lái)效果提升。CVT使用多個(gè)標(biāo)注數(shù)據(jù)和非標(biāo)注數(shù)據(jù)交替訓(xùn)練。使用標(biāo)注數(shù)據(jù)訓(xùn)練時(shí),CVT隨機(jī)選擇一個(gè)任務(wù),優(yōu)化對(duì)應(yīng)任務(wù)的主模塊目標(biāo)函數(shù)。使用非標(biāo)注數(shù)據(jù)訓(xùn)練時(shí),CVT為所有任務(wù)產(chǎn)生對(duì)應(yīng)的輔助模塊。這些輔助模塊同時(shí)被訓(xùn)練,相當(dāng)于構(gòu)造了一些所有任務(wù)共用的標(biāo)注數(shù)據(jù)。這種共用的訓(xùn)練數(shù)據(jù)能提升模型收斂速度。作者認(rèn)為效果提升的主要原因是,同時(shí)訓(xùn)練多個(gè)任務(wù)能降低模型訓(xùn)練一個(gè)任務(wù)時(shí)遺忘其他任務(wù)知識(shí)的風(fēng)險(xiǎn)。

總結(jié)下CVT的特點(diǎn):

在訓(xùn)練特定任務(wù)模型時(shí)加入無(wú)監(jiān)督數(shù)據(jù)做自監(jiān)督學(xué)習(xí),獲得了精度的提升。其中輔助模塊的構(gòu)建是關(guān)鍵。

嗯,需要為不同任務(wù)定制不同的輔助模塊。

應(yīng)用于MTL問(wèn)題效果比ELMo好。

▌無(wú)監(jiān)督模型預(yù)訓(xùn)練

ELMo

ELMo (Embedding from Language Models) 的目的是找到一種帶背景的詞向量表示方法,以期在不同的背景下每個(gè)詞能夠獲得更準(zhǔn)確的表示向量。

ELMo的使用過(guò)程分為以下三個(gè)步驟:

第一步是預(yù)訓(xùn)練階段,ELMo利用2層的biLSTM和無(wú)監(jiān)督數(shù)據(jù)訓(xùn)練兩個(gè)單向的語(yǔ)言模型,它們統(tǒng)稱為biLM。

第二步利用特定任務(wù)的數(shù)據(jù)精調(diào)第一步得到的biLM。作者發(fā)現(xiàn)這步能顯著降低biLM在特定任務(wù)數(shù)據(jù)上的PPL,結(jié)果如下圖。但對(duì)特定任務(wù)最終的任務(wù)精度未必有幫助(但也不會(huì)降低任務(wù)精度)。作者發(fā)現(xiàn)在SNLI(推斷)任務(wù)上效果有提升,但在SST-5(情感分析)任務(wù)上效果沒(méi)變化。

第三步是訓(xùn)練特定的任務(wù)模型。任務(wù)模型的輸入是上面已訓(xùn)練biLM的各層狀態(tài)向量的組合向量。

其中是經(jīng)過(guò)softmax歸一化后的權(quán)重,是整體的scale參數(shù)。它們都是任務(wù)模型中待學(xué)習(xí)的參數(shù)。

可以以額外特征的方式,加入到特定任務(wù)的輸入和輸出特征中。作者發(fā)現(xiàn),對(duì)于某些任務(wù),把同時(shí)加入到輸入和輸出特征中效果最好,具體見下圖。

作者發(fā)現(xiàn),biLM底層LSTM的輸出狀態(tài)對(duì)句法任務(wù)(如POS)更有幫助,而高層LSTM的輸出狀態(tài)對(duì)語(yǔ)義任務(wù)(如WSD)更有幫助。ELMo對(duì)(標(biāo)注)數(shù)據(jù)量少的有監(jiān)督任務(wù)精度提升較大,對(duì)數(shù)據(jù)量多的任務(wù)效果提升就不明顯了。這說(shuō)明ELMo里存儲(chǔ)的信息比較少,還是它主要功能是幫助有監(jiān)督數(shù)據(jù)更好地提煉出其中的信息?

總結(jié)下ELMo的特點(diǎn):

把無(wú)監(jiān)督預(yù)訓(xùn)練技術(shù)成功應(yīng)用于多類任務(wù),獲得了效果提升。

ELMo以特征抽取的形式融入到下游任務(wù)中,所以不同下游任務(wù)依舊需要使用不同的對(duì)應(yīng)模型。

ELMo改進(jìn)的效果依賴于下游任務(wù)和對(duì)應(yīng)的模型,且改進(jìn)效果也不是特別大。

ULMFiT & SiATL

ULMFiT (Universal Language Model Fine-tuning) 使用和ELMo類似的流程:

使用通用數(shù)據(jù)預(yù)訓(xùn)練LM,模型使用了3層的AWD-LSTM。

在特定任務(wù)數(shù)據(jù)上精調(diào)LM,其中使用到差異精調(diào)和傾斜三角lr兩個(gè)策略。

以LM作為初始值,精調(diào)特定任務(wù)分類模型,其中使用到逐層解凍、差異精調(diào)和傾斜三角lr三個(gè)策略。經(jīng)過(guò)AWD-LSTM之后,輸出給分類器的向量為三個(gè)向量的拼接:。

最后一層最后一個(gè)詞對(duì)應(yīng)的向量;

最后一層每個(gè)詞向量做max pooling;

最后一層每個(gè)詞向量做mean pooling。

論文中提出了幾個(gè)優(yōu)化策略,能夠提升精調(diào)后模型的最終效果。

論文中的實(shí)驗(yàn)主要針對(duì)各種分類任務(wù),相比于之前最好的結(jié)果,ULMFiT把分類錯(cuò)誤率降低了18-24%。

論文中也設(shè)計(jì)了實(shí)驗(yàn)來(lái)說(shuō)明流程中第二步(在特定任務(wù)數(shù)據(jù)上精調(diào)LM)的作用。結(jié)果表明第二步的加入,能夠讓第三步的分類任務(wù)在很少的數(shù)據(jù)量下獲得好的結(jié)果。只要使用1%~10%的標(biāo)注數(shù)據(jù),就能達(dá)到不加第二步時(shí)的模型效果。

作者也設(shè)計(jì)了去除實(shí)驗(yàn)驗(yàn)證論文中提出的三個(gè)策略的效果:差異精調(diào)(discr)、傾斜三角lr(stlr)、逐層解凍(Freez)。結(jié)果表明相比于其他人提出的策略,這幾個(gè)策略能獲得更好的結(jié)果。而且,相比于不使用discr和stlr機(jī)制的精調(diào)策略(Full),ULMFiT模型更穩(wěn)定,沒(méi)出現(xiàn)災(zāi)難性遺忘。

之后的另一篇論文 An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models 建議了一些新的策略,解決精調(diào)時(shí)的災(zāi)難性遺忘問(wèn)題。模型稱為SiATL(Single-step Auxiliary loss Transfer Learning)。SiATL只包含兩個(gè)步驟:無(wú)監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練LM、精調(diào)分類模型。但在精調(diào)分類模型時(shí),SiATL把LM作為輔助目標(biāo)加入到優(yōu)化目標(biāo)函數(shù)當(dāng)中。SiATL的第二步相當(dāng)于把ULMFiT的第二步和第三步一起做了。所以它們的流程其實(shí)是一樣的。

預(yù)訓(xùn)練模型使用的是兩層LSTM+Linear,而分類模型在預(yù)訓(xùn)練模型的上面增加了一層帶self-attention的LSTM和輸出層。SiATL建議的幾個(gè)策略:

論文發(fā)現(xiàn)輔助LM目標(biāo)對(duì)于小數(shù)據(jù)集更有用,可能是輔助LM減輕了小數(shù)據(jù)集上的過(guò)擬合問(wèn)題。其中的系數(shù),論文實(shí)驗(yàn)發(fā)現(xiàn)初始取值為0.2,然后指數(shù)下降到0.1效果最好。的取值需要考慮到和的取值范圍。這個(gè)結(jié)論和ULMFiT中驗(yàn)證第二步流程作用的實(shí)驗(yàn)結(jié)果相同,也側(cè)面說(shuō)明了它們本質(zhì)上差不多。

另一個(gè)發(fā)現(xiàn)是如果預(yù)訓(xùn)練用的無(wú)監(jiān)督數(shù)據(jù)和任務(wù)數(shù)據(jù)所在領(lǐng)域不同,序貫解凍帶來(lái)的效果更明顯。這也是合理的,領(lǐng)域不同說(shuō)明災(zāi)難性遺忘問(wèn)題會(huì)更嚴(yán)重,所以遷移知識(shí)時(shí)要更加慎重,遷移過(guò)程要更慢。序貫解凍主要就是用途就是減輕災(zāi)難性遺忘問(wèn)題。

論文還發(fā)現(xiàn),和ULMFiT相比,SiATL在大數(shù)據(jù)集上效果差不多,但在小數(shù)據(jù)集要好很多。

總結(jié)下 ULMFiT 和 SiATL:

ULMFiT使用序貫訓(xùn)練的方式組合特定任務(wù)LM和任務(wù)目標(biāo)函數(shù),而SiATL使用同時(shí)訓(xùn)練的方式,也即加入輔助LM目標(biāo)函數(shù)。

它們建議的策略都是在解決災(zāi)難性遺忘問(wèn)題,也都解決的不錯(cuò)。可以考慮組合使用這些策略。

它們?cè)谛?shù)據(jù)集上都提升明顯,只要使用 1%~10% 的標(biāo)注數(shù)據(jù),就能達(dá)到之前的效果。

雖然它們只在分類任務(wù)上驗(yàn)證了各自的效果,但這些策略應(yīng)該可以推廣到其他任務(wù)上。

GPT/GPT-2

前面介紹的工作中預(yù)訓(xùn)練模型用的都是多層LSTM,而OpenAI GPT首次使用了Transformer作為L(zhǎng)M預(yù)訓(xùn)練模型。GPT使用12層的Transformer Decoder訓(xùn)練單向LM,也即mask掉當(dāng)前和后面的詞。

在做精調(diào)時(shí),使用最高層最后一個(gè)詞的向量作為后續(xù)任務(wù)的輸入,類似SiATL也加入了輔助LM目標(biāo)函數(shù)。

GPT的另一個(gè)大貢獻(xiàn)是為下游任務(wù)引入了統(tǒng)一的模型框架,也即不再需要為特定任務(wù)定制復(fù)雜的模型結(jié)構(gòu)了。不同的任務(wù)只需把輸入數(shù)據(jù)做簡(jiǎn)單的轉(zhuǎn)換即可。

GPT在多種類型的任務(wù)上做了實(shí)驗(yàn),12個(gè)任務(wù)中的9個(gè)任務(wù)有提升,最高提升幅度在9%左右,效果相當(dāng)不錯(cuò)。

針對(duì)預(yù)訓(xùn)練、輔助LM和Transformer,論文中做了去除實(shí)驗(yàn),結(jié)果表明預(yù)訓(xùn)練最重要,去掉會(huì)導(dǎo)致指標(biāo)下降14.8%,而Transformer改為L(zhǎng)STM也會(huì)導(dǎo)致指標(biāo)下降5.6%。比較詭異的是去掉輔助LM的實(shí)驗(yàn)結(jié)果。去掉輔助LM,只在QQP (Quora Question Pairs)和NLI上導(dǎo)致指標(biāo)下降。在其他任務(wù)上反而提升了指標(biāo)。作者觀察到的趨勢(shì)是輔助LM對(duì)于大的數(shù)據(jù)集比小的數(shù)據(jù)集更有幫助。這也跟ULMFiT和SiATL中的結(jié)論相反。

總結(jié)下GPT的主要貢獻(xiàn):

驗(yàn)證了Transformer在Unsupervised Pretraining中的有效性。

驗(yàn)證了更大的模型效果更好:6 --> 12 層。

為下游任務(wù)引入了通用的求解框架,不再為任務(wù)做模型定制。

之后OpenAI又訓(xùn)練一個(gè)更大的模型,叫GPT-2。GPT-2把GPT中12層的Transformer提升到48層,參數(shù)數(shù)量是GPT的十幾倍,達(dá)到了15億。

GPT-2依舊使用單向LM訓(xùn)練語(yǔ)言模型,但使用數(shù)量更多、質(zhì)量更好、覆蓋面更廣的數(shù)據(jù)進(jìn)行訓(xùn)練。而且,GPT-2沒(méi)有針對(duì)特定模型的精調(diào)流程了。作者想強(qiáng)調(diào)的是,預(yù)訓(xùn)練模型中已經(jīng)包含很多特定任務(wù)所需的信息了,只要想辦法把它們?nèi)〕鰜?lái)直接用即可,可以不用為特定任務(wù)標(biāo)注數(shù)據(jù),真正達(dá)到通用模型的能力。

那,沒(méi)有精調(diào)如何做特定任務(wù)呢?一些任務(wù)說(shuō)明如下:

不做精調(diào)的GPT-2不僅在很多特定任務(wù)上已經(jīng)達(dá)到了SOTA,還在生成任務(wù)上達(dá)到了嚇人的精度。

BERT

和GPT一樣,BERT的基本模型使用了Transformer,只是模型又變大了(12層變成了24層)。

相比于GPT的單向LM,BERT使用了雙向LM。但顯然預(yù)測(cè)時(shí)不能讓待預(yù)測(cè)的詞看到自己,所以需要把待預(yù)測(cè)詞mask掉。BERT建議了masked LM機(jī)制,即隨機(jī)mask輸入中的k%個(gè)詞,然后利用雙向LM預(yù)測(cè)這些詞。

但mask時(shí)需要把握好度。mask太少的話,訓(xùn)練時(shí)每次目標(biāo)函數(shù)中包含的詞太少,訓(xùn)練起來(lái)就要迭代很多步。mask太多的話,又會(huì)導(dǎo)致背景信息丟失很多,與預(yù)測(cè)時(shí)的情景不符。而且,簡(jiǎn)單的mask會(huì)帶來(lái)預(yù)訓(xùn)練和精調(diào)訓(xùn)練的不一致性:精調(diào)階段,輸入數(shù)據(jù)里是不mask詞的。

BERT建議了以下的策略,解決這些問(wèn)題:

BERT的另一大貢獻(xiàn),是引入了新的預(yù)訓(xùn)練目標(biāo)Next Sentence Prediction (NSP)。對(duì)于兩個(gè)句子A和B,NSP預(yù)測(cè)B是不是A的下一個(gè)句子。訓(xùn)練時(shí)NSP的正樣本就是從文檔從隨機(jī)選的兩個(gè)臨近句子,而負(fù)樣本就是B是隨機(jī)從文檔中選取的,與A的位置沒(méi)關(guān)系。NSP可以學(xué)習(xí)句子與句子間的關(guān)系。

預(yù)訓(xùn)練的目標(biāo)函數(shù)是Masked LM和NSP的加和。

BERT的輸入詞向量是三個(gè)向量之和:

Token Embedding:WordPiece tokenization subword詞向量。

Segment Embedding:表明這個(gè)詞屬于哪個(gè)句子(NSP需要兩個(gè)句子)。

Position Embedding:學(xué)習(xí)出來(lái)的embedding向量。這與Transformer不同,Transformer中是預(yù)先設(shè)定好的值。

BERT也為下游任務(wù)引入了通用的求解框架,不再為任務(wù)做模型定制。對(duì)于分類和匹配任務(wù),下游任務(wù)只要使用第一個(gè)詞[CLS]對(duì)應(yīng)的最上層輸出詞向量作為分類器的輸入向量即可。對(duì)于抽取式QA和序列標(biāo)注問(wèn)題,使用每個(gè)詞對(duì)應(yīng)的最上層輸出詞向量作為下游任務(wù)的輸入即可。

BERT的驚艷結(jié)果,引爆了NLP行業(yè)。BERT在11個(gè)任務(wù)上獲得了最好效果,GLUE上達(dá)到了80.4%,提升了整整7.6個(gè)點(diǎn),把SQuAD v1.1 F1又往上提升了1.5個(gè)點(diǎn),達(dá)到了93.2 。

BERT的去除實(shí)驗(yàn)表明,雙向LM和NSP帶了的提升最大。

另一個(gè)結(jié)論是,增加模型參數(shù)數(shù)量可以提升模型效果。

BERT預(yù)訓(xùn)練模型的輸出結(jié)果,無(wú)非就是一個(gè)或多個(gè)向量。下游任務(wù)可以通過(guò)精調(diào)(改變預(yù)訓(xùn)練模型參數(shù))或者特征抽?。ú桓淖冾A(yù)訓(xùn)練模型參數(shù),只是把預(yù)訓(xùn)練模型的輸出作為特征輸入到下游任務(wù))兩種方式進(jìn)行使用。BERT原論文使用了精調(diào)方式,但也嘗試了特征抽取方式的效果,比如在NER任務(wù)上,最好的特征抽取方式只比精調(diào)差一點(diǎn)點(diǎn)。但特征抽取方式的好處可以預(yù)先計(jì)算好所需的向量,存下來(lái)就可重復(fù)使用,極大提升下游任務(wù)模型訓(xùn)練的速度。

后來(lái)也有其他人針對(duì)ELMo和BERT比較了這兩種使用方式的精度差異。下面列出基本結(jié)論:

總結(jié)下BERT的主要貢獻(xiàn):

引入了Masked LM,使用雙向LM做模型預(yù)訓(xùn)練。

為預(yù)訓(xùn)練引入了新目標(biāo)NSP,它可以學(xué)習(xí)句子與句子間的關(guān)系。

進(jìn)一步驗(yàn)證了更大的模型效果更好:12 --> 24 層。

為下游任務(wù)引入了很通用的求解框架,不再為任務(wù)做模型定制。

刷新了多項(xiàng)NLP任務(wù)的記錄,引爆了NLP無(wú)監(jiān)督預(yù)訓(xùn)練技術(shù)。

MASS

BERT只能做NLU類型的任務(wù),無(wú)法直接用于文本產(chǎn)生式(NLG)類型的任務(wù),如摘要、翻譯、對(duì)話生成。NLG的基本框架是encoder2decoder,微軟的MASS (MAsked Sequence to Sequence pre-training)把BERT推廣到NLG任務(wù)。MASS的結(jié)構(gòu)如下,它的訓(xùn)練數(shù)據(jù)依舊是單句話,但是會(huì)隨機(jī)mask這句話中連續(xù)的k個(gè)詞,然后把這些詞放入decoder模塊的相同位置,而encoder中只保留未被mask的詞。MASS期望decoder利用encoder的信息和decoder前面的詞,預(yù)測(cè)這些被mask的詞。

比較有意思的是,BERT和GPT都是MASS的特例。當(dāng)k=1時(shí),也即隨機(jī)mask單個(gè)詞時(shí),MASS就退化成BERT;當(dāng)k=句子長(zhǎng)度時(shí),也即mask所有詞時(shí),MASS就退化成GPT,或者標(biāo)準(zhǔn)的單向LM。

論文中使用了4層的Transformer作為encoder和decoder,跟encoder使用BERT,decoder 使用標(biāo)準(zhǔn)單向LM的框架BERT+LM做了效果對(duì)比,PPL上降低了不少。而且作者也對(duì)比了k取不同值時(shí)的效果變化,結(jié)果發(fā)現(xiàn)在多個(gè)任務(wù)上它取50%句子長(zhǎng)度都是最優(yōu)的。

為什么MASS能取得比較好的效果?作者給出了以下解釋:

Encoder中mask部分tokens,迫使它理解unmasked tokens。

Decoder中需要預(yù)測(cè)masked的連續(xù)tokens,讓decoder能獲取更多的語(yǔ)言信息。

Decoder中只保留了masked的tokens,而不是所有的tokens,迫使decoder也會(huì)盡量從encoder中抽取信息。

作者也做了兩個(gè)去除實(shí)驗(yàn)驗(yàn)證上面的后兩條解釋。

總結(jié)下MASS的特點(diǎn):

把BERT推廣到NLG類型任務(wù),并且統(tǒng)一了BERT和傳統(tǒng)單向LM框架。

實(shí)驗(yàn)表明MASS效果比BERT+LM好,但實(shí)驗(yàn)使用的模型太小,不確定這種優(yōu)勢(shì)在模型變大后是否還會(huì)存在。

UNILM

UNILM (UNIfied pretrained Language Model)是微軟另一波人最近放出的論文。UNILM同時(shí)訓(xùn)練BERT中的雙向LM、GPT中的單向LM和seq2seq中的LM。用的方法也很自然,核心思想在Transformer那篇論文中其實(shí)就已經(jīng)在用了。

UNILM中的核心框架還是Transformer,只是用無(wú)監(jiān)督數(shù)據(jù)預(yù)訓(xùn)練模型時(shí),同時(shí)以雙向LM、單向LM和seq2seq LM為目標(biāo)函數(shù)。這些目標(biāo)函數(shù)共享一個(gè)Transformer結(jié)構(gòu),訓(xùn)練也都使用了類似BERT中的[MASK]機(jī)制。

和BERT的雙向LM不同的是,單向LM在做self-attention時(shí)不能使用這個(gè)詞后面的詞。seq2seq LM在做decoder 預(yù)測(cè)時(shí)也有類似的約束,做self-attention時(shí)能使用encoder中的所有詞,以及decoder中當(dāng)前詞(替換為[MASK]了)和前面的詞,而不能使用decoder中這個(gè)詞后面的詞。UNILM在做self-attention時(shí)通過(guò)mask機(jī)制來(lái)滿足這些約束,也即在softmax函數(shù)中把后面詞對(duì)應(yīng)的向量元素值改為-∞。

seq2seq LM是把兩個(gè)句子拼起來(lái)(和BERT相同)直接輸入一個(gè)Transformer(只是預(yù)測(cè)encoder和decoder中被mask的詞時(shí),對(duì)self-attention使用了不同的約束條件),所以encoder和decoder使用的是同一個(gè)Transformer。seq2seq LM的訓(xùn)練樣本,和NSP任務(wù)類似,為連續(xù)的兩個(gè)句子,然后隨機(jī)mask掉兩個(gè)句子中的詞讓模型進(jìn)行預(yù)測(cè)。

對(duì)詞隨機(jī)mask的機(jī)制和BERT類似,只是會(huì)以一定概率mask臨近的兩個(gè)或三個(gè)詞,具體說(shuō)明如下:

訓(xùn)練時(shí)目標(biāo)函數(shù)的設(shè)定也參照BERT,只是要同時(shí)兼顧雙向LM、單向LM和seq2seq LM。作者使用的模型大小同,也即用了24層的Transformer。

精調(diào)階段,對(duì)于NLU類型的任務(wù)UNILM和BERT相同。對(duì)于NLG類型的任務(wù),UNILM隨機(jī)mask decoder中的一些詞,然后再預(yù)測(cè)它們。以下是UNILM應(yīng)用于生成式QA任務(wù)的做法,效果提升很明顯。

對(duì)于GLUE的所有任務(wù),UNILM據(jù)說(shuō)是首次不添加外部數(shù)據(jù)打贏BERT的模型!

總結(jié)下UNILM的特點(diǎn):

預(yù)訓(xùn)練同時(shí)訓(xùn)練雙向LM、單向LM和seq2seq LM,使用mask機(jī)制解決self-attention中的約束問(wèn)題。

可以處理NLU和NLG類型的各種任務(wù)。

在GLUE上首次不加外部數(shù)據(jù)打贏了BERT。

多任務(wù)學(xué)習(xí):MT-DNN

MT-DNN (Multi-Task Deep Neural Network)是去年年底微軟的一篇工作,思路很簡(jiǎn)單,就是在MTL中把BERT引入進(jìn)來(lái)作為底層共享的特征抽取模塊。

預(yù)訓(xùn)練就是BERT,精調(diào)時(shí)每個(gè)batch隨機(jī)選一個(gè)任務(wù)進(jìn)行優(yōu)化。整體算法步驟如下:

MT-DNN在GLUE上效果比BERT好不少,當(dāng)然主要原因可能是加入了額外的數(shù)據(jù)了。作者也對(duì)比了多任務(wù)與單任務(wù)的結(jié)果,多任務(wù)確實(shí)能給每個(gè)任務(wù)都帶來(lái)效果提升。

總結(jié)下MT-DNN的特點(diǎn):

框架簡(jiǎn)單明了:MT-DNN = BERT + MTL。

三、實(shí)踐、觀點(diǎn)、總結(jié)

▌實(shí)踐與建議

雖然前面介紹的很多模型都能找到實(shí)現(xiàn)代碼。但從可用性來(lái)說(shuō),對(duì)于NLU類型的問(wèn)題,基本只需考慮ELMo,ULMFiT和BERT。而前兩個(gè)沒(méi)有中文的預(yù)訓(xùn)練模型,需要自己找數(shù)據(jù)做預(yù)訓(xùn)練。BERT有官方發(fā)布的中文預(yù)訓(xùn)練模型,很多深度學(xué)習(xí)框架也都有BERT的對(duì)應(yīng)實(shí)現(xiàn),而且BERT的效果一般是最好的。但BERT的問(wèn)題是速度有點(diǎn)慢,使用12層的模型,對(duì)單個(gè)句子(30個(gè)字以內(nèi))的預(yù)測(cè)大概需要100~200毫秒。如果這個(gè)性能對(duì)你的應(yīng)用沒(méi)問(wèn)題的話,建議直接用BERT。

對(duì)于分類問(wèn)題,如果特定任務(wù)的標(biāo)注數(shù)據(jù)量在幾千到一兩萬(wàn),可以直接精調(diào)BERT,就算在CPU上跑幾十個(gè)epoches也就一兩天能完事,GPU上要快10倍以上。如果標(biāo)注數(shù)據(jù)量過(guò)大或者覺(jué)得訓(xùn)練時(shí)間太長(zhǎng),可以使用特征抽取方式。先用BERT抽取出句子向量表達(dá),后續(xù)的分類器只要讀入這些向量即可。

我們目前在很多分類問(wèn)題上測(cè)試了BERT的效果,確實(shí)比之前的模型都有提升,有些問(wèn)題上提升很明顯。下圖給出了一些結(jié)果示例。

愛(ài)因互動(dòng)作為企業(yè)對(duì)話機(jī)器人服務(wù)提供商,我們會(huì)處理很多的QA (Query Answer)和QQ (Query Question)匹配任務(wù)。比如在常用的檢索機(jī)器人FAQBot中,用戶的一個(gè)query來(lái)了,F(xiàn)AQBot首先從標(biāo)準(zhǔn)問(wèn)答庫(kù)中檢索出一些候選問(wèn)題/答案,然后排序或匹配模塊再計(jì)算query跟每個(gè)候選問(wèn)題/答案的匹配度,再按這些匹配度從高到低排序,top1的結(jié)果返回給用戶。上圖中給出了一個(gè)QQ 匹配的結(jié)果,原始模型的準(zhǔn)確度為83.5%,BERT精調(diào)后的模型準(zhǔn)確度提升到88.3%。

BERT當(dāng)然可以直接用來(lái)計(jì)算兩個(gè)句子的匹配度,只要把query和每個(gè)候選句子拼起來(lái),然后走一遍BERT就能算出匹配度。這樣做的問(wèn)題是,如果有100個(gè)候選結(jié)果,就要算100次,就算把它們打包一起算,CPU上的時(shí)間開銷在線上場(chǎng)景也是扛不住的。但如果使用Siamese結(jié)構(gòu),我們就可以把候選句子的BERT向量表達(dá)預(yù)先算好,然后線上只需要計(jì)算query的BERT向量表達(dá),然后再計(jì)算query和候選句子向量的匹配度即可,這樣時(shí)間消耗就可以控制在200ms以內(nèi)了。

使用Siamese這種結(jié)構(gòu)理論上會(huì)降低最終的匹配效果,之前也有相關(guān)工作驗(yàn)證過(guò)在一些問(wèn)題上確實(shí)如此。我們目前在自己的三個(gè)數(shù)據(jù)上做了對(duì)比實(shí)驗(yàn)(見下圖),發(fā)現(xiàn)在兩個(gè)問(wèn)題上效果確實(shí)略有下降,而在另一個(gè)問(wèn)題上效果基本保持不變。我估計(jì)只要后續(xù)交互層設(shè)計(jì)的合理,Siamese結(jié)構(gòu)不會(huì)比原始BERT精調(diào)差很多。

▌?dòng)^點(diǎn)

按理ELMo的想法很簡(jiǎn)單,也沒(méi)什么模型創(chuàng)新,為什么之前就沒(méi)人做出來(lái)然后引爆無(wú)監(jiān)督模型預(yù)訓(xùn)練方向?BERT的一作Jacob Devlin認(rèn)為主要原因是之前使用的數(shù)據(jù)不夠多,模型不夠大。無(wú)監(jiān)督預(yù)訓(xùn)練要獲得好效果,付出的代價(jià)需要比有監(jiān)督訓(xùn)練大到1000到10w倍才能獲得好的效果。之前沒(méi)人想到要把數(shù)據(jù)和模型規(guī)模提高這么多。

為了讓預(yù)訓(xùn)練的模型能對(duì)多種下游任務(wù)都有幫助,也即預(yù)訓(xùn)練模型要足夠通用,模型就不能僅僅只學(xué)到帶背景的詞表示這個(gè)信息,還需要學(xué)到很多其他信息。而預(yù)測(cè)被mask的詞,就可能要求模型學(xué)到很多信息,句法的,語(yǔ)義的等等。所以,相對(duì)于只解決某個(gè)下游特定任務(wù),預(yù)訓(xùn)練模型要通用的話,就要大很多。目前發(fā)現(xiàn)只要使用更多(數(shù)量更多、質(zhì)量更好、覆蓋面更廣)的無(wú)監(jiān)督數(shù)據(jù)訓(xùn)練更大的模型,最終效果就會(huì)更優(yōu)。目前還不知道這個(gè)趨勢(shì)的極限在什么量級(jí)。

BERT雖然對(duì)NLU的各類任務(wù)都提升很大,但目前依舊存在很多待驗(yàn)證的問(wèn)題。比如如何更高效地進(jìn)行預(yù)訓(xùn)練和線上預(yù)測(cè)使用,如何融合更長(zhǎng)的背景和結(jié)構(gòu)化知識(shí),如何在多模態(tài)場(chǎng)景下使用,在BERT之后追加各種任務(wù)相關(guān)的模塊是否能帶來(lái)額外收益等等。這些機(jī)會(huì)我在第一部分已經(jīng)講到,就不再贅述了。

▌總結(jié)和一點(diǎn)感(敢)想

最后,簡(jiǎn)單總結(jié)一下。

無(wú)監(jiān)督預(yù)訓(xùn)練技術(shù)已經(jīng)在NLP中得到了廣泛驗(yàn)證。BERT成功應(yīng)用于各種NLU類型的任務(wù),但無(wú)法直接用于NLG類型的任務(wù)。微軟最近的工作MASS把BERT推廣到NLG類型任務(wù),而UNILM既適用于NLU也適用于NLG任務(wù),效果還比BERT好一點(diǎn)點(diǎn)。

相信未來(lái)NLP的很多工作都會(huì)圍繞以下這個(gè)流程的優(yōu)化展開:

在這個(gè)過(guò)程中,我們還收獲了諸多副產(chǎn)品

相對(duì)于biLSTM,Transformers在知識(shí)抽取和存儲(chǔ)上效果更好,潛力還可發(fā)掘。它們之間的具體比較,推薦俊林老師的“放棄幻想,全面擁抱Transformer:自然語(yǔ)言處理三大特征抽取器(CNN/RNN/TF)比較”,里面介紹的很清楚。

目前無(wú)監(jiān)督模型預(yù)訓(xùn)練常用以下幾種目標(biāo)函數(shù):

一般的LM?;趖oken的交叉熵。

Masked LM。相比于一般的LM,masked LM能夠使用雙向tokens,且在模型訓(xùn)練和預(yù)測(cè)時(shí)的數(shù)據(jù)使用方式更接近,降低了它們之間的gap。

Consecutive masked LM。Mask時(shí)不僅隨機(jī)mask部分離散的token,還隨機(jī)mask一些連續(xù)的tokens,如bi-grams、tri-grams等。這種consecutive mask機(jī)制是否能帶來(lái)普遍效果提升,還待驗(yàn)證。

Next Sentence Prediction。預(yù)測(cè)連續(xù)的兩個(gè)句子是否有前后關(guān)系。

精調(diào)階段,除了任務(wù)相關(guān)的目標(biāo)函數(shù),還可以考慮把LM作為輔助目標(biāo)加到目標(biāo)函數(shù)中。加入LM輔助目標(biāo)能降低模型對(duì)已學(xué)到知識(shí)的遺忘速度,提升模型收斂速度,有些時(shí)候還能提升模型的精度。精調(diào)階段,學(xué)習(xí)率建議使用linear warmup and linear decay機(jī)制,降低模型對(duì)已學(xué)到知識(shí)的遺忘速度。如果要精調(diào)效果,可以考慮ULMFiT中引入的gradual unfreezing和discriminative fine-tuning:機(jī)制。

使用數(shù)量更多、質(zhì)量更好、覆蓋面更廣的無(wú)監(jiān)督數(shù)據(jù)訓(xùn)練更大的模型,最終效果就會(huì)更優(yōu)。目前還不知道這個(gè)趨勢(shì)的極限在什么地方。

最后說(shuō)一點(diǎn)自己的感想。

NLP中有一部分工作是在做人類知識(shí)或人類常識(shí)的結(jié)構(gòu)化表示。有了結(jié)構(gòu)化表示后,使用時(shí)再想辦法把這些表示注入到特定的使用場(chǎng)景中。比如知識(shí)圖譜的目標(biāo)就是用結(jié)構(gòu)化的語(yǔ)義網(wǎng)絡(luò)來(lái)表達(dá)人類的所有知識(shí)。這種結(jié)構(gòu)化表示理論上真的靠譜嗎?人類的知識(shí)真的能完全用結(jié)構(gòu)化信息清晰表示出來(lái)嗎?顯然是不能,我想這點(diǎn)其實(shí)很多人都知道,只是在之前的技術(shù)水平下,也沒(méi)有其他的方法能做的更好。所以這是個(gè)折中的臨時(shí)方案。

無(wú)監(jiān)督預(yù)訓(xùn)練技術(shù)的成功,說(shuō)明語(yǔ)言的很多知識(shí)其實(shí)是可以以非結(jié)構(gòu)化的方式被模型學(xué)習(xí)到并存儲(chǔ)在模型中的,只是目前整個(gè)過(guò)程我們并不理解,還是黑盒。相信以后很多其他方面的知識(shí)也能找到類似的非結(jié)構(gòu)化方案。所以我估計(jì)知識(shí)圖譜這類折中方案會(huì)逐漸被替代掉。當(dāng)然,這只是我個(gè)人的理解或者疑惑,僅供他人參考。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3226

    瀏覽量

    48807
  • nlp
    nlp
    +關(guān)注

    關(guān)注

    1

    文章

    488

    瀏覽量

    22033
  • 遷移學(xué)習(xí)
    +關(guān)注

    關(guān)注

    0

    文章

    74

    瀏覽量

    5559

原文標(biāo)題:雖被BERT碾壓,但還是有必要談?wù)凚ERT時(shí)代與后時(shí)代的NLP

文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【大語(yǔ)言模型:原理與工程實(shí)踐】大語(yǔ)言模型預(yù)訓(xùn)練

    大語(yǔ)言模型的核心特點(diǎn)在于其龐大的參數(shù)量,這賦予了模型強(qiáng)大的學(xué)習(xí)容量,使其無(wú)需依賴微調(diào)即可適應(yīng)各種下游任務(wù),而更傾向于培養(yǎng)通用的處理能力。然而,隨著學(xué)習(xí)容量的增加,對(duì)
    發(fā)表于 05-07 17:10

    遷移學(xué)習(xí)

    的基本原理和編程思想。理解在一個(gè)新的場(chǎng)景或數(shù)據(jù)集下,何時(shí)以及如何進(jìn)行遷移學(xué)習(xí)。利用PyTorch加載數(shù)據(jù)、搭建模型訓(xùn)練網(wǎng)絡(luò)以及進(jìn)行網(wǎng)絡(luò)微調(diào)操作。給定
    發(fā)表于 04-21 15:15

    基于預(yù)訓(xùn)練模型和長(zhǎng)短期記憶網(wǎng)絡(luò)的深度學(xué)習(xí)模型

    作為模型的初始化詞向量。但是,隨機(jī)詞向量存在不具備語(yǔ)乂和語(yǔ)法信息的缺點(diǎn);預(yù)訓(xùn)練詞向量存在¨一詞-乂”的缺點(diǎn),無(wú)法為模型提供具備上下文依賴的詞向量。針對(duì)該問(wèn)題,提岀了一種基于
    發(fā)表于 04-20 14:29 ?19次下載
    基于<b class='flag-5'>預(yù)</b><b class='flag-5'>訓(xùn)練</b><b class='flag-5'>模型</b>和長(zhǎng)短期記憶網(wǎng)絡(luò)的深度<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>模型</b>

    如何實(shí)現(xiàn)更綠色、經(jīng)濟(jì)的NLP預(yù)訓(xùn)練模型遷移

    NLP中,預(yù)訓(xùn)練模型Finetune是一種非常常見的解決問(wèn)題的范式。利用在海量文本上預(yù)訓(xùn)練得到的Bert、GPT等
    的頭像 發(fā)表于 03-21 15:33 ?2194次閱讀

    使用 NVIDIA TAO 工具套件和預(yù)訓(xùn)練模型加快 AI 開發(fā)

    可以訪問(wèn)預(yù)訓(xùn)練模型的完整源代碼和模型權(quán)重。 該工具套件能夠高效訓(xùn)練視覺(jué)和對(duì)話式 AI 模型。由于
    的頭像 發(fā)表于 12-15 19:40 ?1019次閱讀

    預(yù)訓(xùn)練數(shù)據(jù)大小對(duì)于預(yù)訓(xùn)練模型的影響

    BERT類模型的工作模式簡(jiǎn)單,但取得的效果也是極佳的,其在各項(xiàng)任務(wù)上的良好表現(xiàn)主要得益于其在大量無(wú)監(jiān)督文本上學(xué)習(xí)到的文本表征能力。那么如何從語(yǔ)言學(xué)的特征角度來(lái)衡量一個(gè)預(yù)訓(xùn)練
    的頭像 發(fā)表于 03-03 11:20 ?1421次閱讀

    什么是預(yù)訓(xùn)練 AI 模型?

    預(yù)訓(xùn)練 AI 模型是為了完成特定任務(wù)而在大型數(shù)據(jù)集上訓(xùn)練的深度學(xué)習(xí)模型。這些
    的頭像 發(fā)表于 04-04 01:45 ?1442次閱讀

    淺析4個(gè)計(jì)算機(jī)視覺(jué)領(lǐng)域常用遷移學(xué)習(xí)模型

    使用SOTA的預(yù)訓(xùn)練模型來(lái)通過(guò)遷移學(xué)習(xí)解決現(xiàn)實(shí)的計(jì)算機(jī)視覺(jué)問(wèn)題。
    的頭像 發(fā)表于 04-23 18:08 ?1830次閱讀
    淺析4個(gè)計(jì)算機(jī)視覺(jué)領(lǐng)域常用<b class='flag-5'>遷移</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>模型</b>

    什么是預(yù)訓(xùn)練AI模型?

    預(yù)訓(xùn)練 AI 模型是為了完成特定任務(wù)而在大型數(shù)據(jù)集上訓(xùn)練的深度學(xué)習(xí)模型。這些
    的頭像 發(fā)表于 05-25 17:10 ?1032次閱讀

    NLP中的遷移學(xué)習(xí):利用預(yù)訓(xùn)練模型進(jìn)行文本分類

    遷移學(xué)習(xí)徹底改變了自然語(yǔ)言處理(NLP)領(lǐng)域,允許從業(yè)者利用預(yù)先訓(xùn)練模型來(lái)完成自己的任務(wù),從而大大減少了訓(xùn)練時(shí)間和計(jì)算資源。在本文中,我們
    發(fā)表于 06-14 09:30 ?449次閱讀

    視覺(jué)深度學(xué)習(xí)遷移學(xué)習(xí)訓(xùn)練框架Torchvision介紹

    Torchvision是基于Pytorch的視覺(jué)深度學(xué)習(xí)遷移學(xué)習(xí)訓(xùn)練框架,當(dāng)前支持的圖像分類、對(duì)象檢測(cè)、實(shí)例分割、語(yǔ)義分割、姿態(tài)評(píng)估模型
    的頭像 發(fā)表于 09-22 09:49 ?899次閱讀
    視覺(jué)深度<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>遷移</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>訓(xùn)練</b>框架Torchvision介紹

    預(yù)訓(xùn)練模型的基本原理和應(yīng)用

    訓(xùn)練好的模型,這些模型通常在某些通用任務(wù)上表現(xiàn)出色,并且可以作為后續(xù)特定任務(wù)的起點(diǎn),通過(guò)遷移學(xué)習(xí)或微調(diào)(Fine-tuning)等方式進(jìn)行適
    的頭像 發(fā)表于 07-03 18:20 ?2761次閱讀

    大語(yǔ)言模型預(yù)訓(xùn)練

    能力,逐漸成為NLP領(lǐng)域的研究熱點(diǎn)。大語(yǔ)言模型預(yù)訓(xùn)練是這一技術(shù)發(fā)展的關(guān)鍵步驟,它通過(guò)在海量無(wú)標(biāo)簽數(shù)據(jù)上進(jìn)行訓(xùn)練,使模型
    的頭像 發(fā)表于 07-11 10:11 ?417次閱讀

    預(yù)訓(xùn)練遷移學(xué)習(xí)的區(qū)別和聯(lián)系

    預(yù)訓(xùn)練遷移學(xué)習(xí)是深度學(xué)習(xí)和機(jī)器學(xué)習(xí)領(lǐng)域中的兩個(gè)重要概念,它們?cè)谔岣?/div>
    的頭像 發(fā)表于 07-11 10:12 ?1006次閱讀

    直播預(yù)約 |數(shù)據(jù)智能系列講座第4期:預(yù)訓(xùn)練的基礎(chǔ)模型下的持續(xù)學(xué)習(xí)

    鷺島論壇數(shù)據(jù)智能系列講座第4期「預(yù)訓(xùn)練的基礎(chǔ)模型下的持續(xù)學(xué)習(xí)」10月30日(周三)20:00精彩開播期待與您云相聚,共襄學(xué)術(shù)盛宴!|直播信息報(bào)告題目
    的頭像 發(fā)表于 10-18 08:09 ?214次閱讀
    直播預(yù)約 |數(shù)據(jù)智能系列講座第4期:<b class='flag-5'>預(yù)</b><b class='flag-5'>訓(xùn)練</b>的基礎(chǔ)<b class='flag-5'>模型</b>下的持續(xù)<b class='flag-5'>學(xué)習(xí)</b>
    RM新时代网站-首页