本文轉載自 知乎專欄 智慧對話機器人技術
2018年是NLP的收穫大年,模型預訓練技術終於被批次成功應用於多項NLP任務。之前搞NLP的人一直羨慕搞CV的人,在ImageNet上訓練好的模型,居然拿到各種任務裡用都非常有效。現在情形有點逆轉了。搞CV的人開始羨慕搞NLP的人了。CV界用的還是在有監督資料上訓練出來的模型,而NLP那幫傢伙居然直接搞出了在無監督資料上的通用預訓練模型!要知道NLP中最不缺的就是無監督的文字資料,幾乎就是要多少有多少。還有個好訊息是目前NLP中通用預訓練模型的效果還遠沒達到極限。目前發現只要使用更多的無監督資料訓練模型,模型效果就會更優。這種簡單粗暴的最佳化方法對大公司來說實在再經濟不過。而且,演算法本身的效果也在快速迭代中。NLP的未來真是一片光明啊~
BERT釋出之後,點燃了NLP各界的歡騰,各路神仙開始加班加點各顯神通,很多相關工作被發表出來。本文會介紹其中的一些代表性工作,但更重要的是希望理清這些背後的邏輯,為它們歸歸類。透過這些思考,我自己也對NLP以後的工作方向有些預測,供大家參考。
本文的內容主要包括以下幾部分:
我對遷移學習和模型預訓練的一些思考,以及對未來工作方向的粗略預測
各類代表性工作的具體介紹(熟悉的同學可忽略),又細分為以下幾大類:
有監督資料預訓練
自監督訓練
無監督資料預訓練
多個有監督資料同時訓練:多工學習
3. 一些我們的實踐經驗、別人和自己的觀點、以及總結和感想
第一和第三部分內容相對少,原創密度大點,大家要是趕時間的話看這兩部分就夠了。第二部分的內容都是具體技術,有很多很好的文章都介紹過。放在本文當中一是為了文章的完備性,另一個是裡面提到的一些知識點在其他地方沒怎麼提到。第三部分也會涉及到我們(愛因互動)自己在一些任務上的實驗工作,期望這些結果能堅定大家在自己的工作中把模型預訓練技術用起來。
終於可以開始了。
一、遷移學習與模型預訓練:何去何從
遷移學習分類
把我們當前要處理的NLP任務叫做T(T稱為目標任務),遷移學習技術做的事是利用另一個任務S(S稱為源任務)來提升任務T的效果,也即把S的資訊遷移到T中。至於怎麼遷移資訊就有很多方法了,可以直接利用S的資料,也可以利用在S上訓練好的模型,等等。
依據目標任務T是否有標註資料,可以把遷移學習技術分為兩大類,每個大類裡又可以分為多個小類。
第一大類是T沒有任何標註資料,比如現在很火的無監督翻譯技術。但這類技術目前主要還是偏學術研究,離工業應用還有挺長距離的。工業應用中的絕大部分任務,我們總是能想辦法標註一些資料的。而且,目前有監督模型效果要顯著優於無監督模型。所以,面對完全沒有標註資料的任務,最明智的做法是先借助於無監督技術(如聚類/降維)分析資料,然後做一些資料標註,把原始的無監督任務轉變為有監督任務進行求解。基於這些原因,本文不再介紹這大類相關的工作。
第二大類是T有標註資料,或者說T是個有監督任務。這類遷移學習技術又可以依據源任務是否有監督,以及訓練順序兩個維度,大致分為四小類:
源任務S是無監督的,且源資料和目標資料同時用於訓練:此時主要就是自監督(self-supervised)學習技術,代表工作有之後會講到的CVT。
源任務S是有監督的,且源資料和目標資料同時用於訓練:此時主要就是多工(multi-task)學習技術,代表工作有之後會講到的MT-DNN。
源任務S是無監督的,且先使用源資料訓練,再使用目標資料訓練(序貫訓練):此時主要就是以BERT為代表的無監督模型預訓練技術,代表工作有ELMo、ULMFiT、GPT/GPT-2、BERT、MASS、UNILM。
源任務S是有監督的,且先使用源資料訓練,再使用目標資料訓練(序貫訓練):此時主要就是有監督模型預訓練技術,類似CV中在ImageNet上有監督訓練模型,然後把此模型遷移到其他任務上去的正規化。代表工作有之後會講到的CoVe。
何去何從
現狀分析
先說說上表中四個類別的各自命運。以BERT為代表的無監督模型預訓練技術顯然是最有前途的。之前也說了,NLP中最不缺的就是無監督資料。只要堆計算資源就能提升效果的話,再簡單不過了。
而無監督預訓練的成功,也就基本擠壓掉了自監督學習提升段位的空間。這裡說的自監督學習不是泛指,而是特指同時利用無監督資料和當前有監督資料一起訓練模型的方式。既然是同時訓練,就不太可能大規模地利用無監督資料(要不然就要為每個特定任務都訓練很久,不現實),這樣帶來的效果就沒法跟無監督預訓練方式相比。但自監督學習還是有存在空間的,比如現在發現在做有監督任務訓練時,把語言模型作為輔助損失函式加入到目標函式中,可以減輕精調或多工學習時的災難性遺忘(Catastrophic Forgetting)問題,提升訓練的收斂速度。所以有可能在訓練時加入一些同領域的無監督資料,不僅能減輕遺忘問題,還可能因為讓模型保留下更多的領域資訊而提升最終模型的泛化性。但這個方向迎來大的發展可能性不大。
而類似CV中使用大規模有監督資料做模型預訓練這條路,看著也比較暗淡,它自己單獨不太可能有很大前景。幾個原因:1) 這條路已經嘗試了很久,沒有很顯著的效果提升。2) NLP中獲取大規模標註資料很難,而且還要求對應任務足夠複雜以便學習出的模型包含各種語言知識。雖然機器翻譯任務很有希望成為這種任務,但它也存在很多問題,比如小語種的翻譯標註資料很少,翻譯標註資料主要還是單句形式,從中沒法學習到背景資訊或多輪等資訊。但從另一個方面看,NLP搞了這麼久,其實還是積累了很多標註或者結構化資料,比如知識圖譜。如何把這些資訊融合到具體任務中最近一直都是很活躍的研究方向,相信將來也會是。只是BERT出來後,這種做法的價值更像是打補丁,而不是搭地基了。
多工學習作為代價較小的方法,前景還是很光明的。多個同領域甚至同資料上的不同任務同時訓練,不僅能降低整體的訓練時間,還能降低整體的預測時間(如果同時被使用),還能互相提升效果,何樂而不為。當然,多工學習的目標一開始就不是搭地基。
上面說了這麼多,其實想說的重點在下面。這些技術不一定非要單獨使用啊,組合起來一起用,取長補短不是就皆大歡喜了嘛。
先回顧下現在的無監督模型預訓練流程,如下圖:
首先是利用大的無監督資料預訓練通用模型,最佳化目標主要是語言模型(或其變種)。第二步,利用有監督資料精調上一步得到的通用模型。這麼做的目的是期望精調以後的通用模型更強調這個特定任務所包含的語言資訊。這一步是可選的(所以圖中對應加了括號
),有些模型框架下沒有這個步驟,比如BERT裡面就沒有。第三步才是利用有監督資料中對應的標註資料訓練特定任務對應的模型。
那這個流程接下來會怎麼發展呢?
未來可期
上面我已經對四類方法做了分別的介紹,包括對它們各自前途的簡單判斷,也介紹了當下效果最好的模型預訓練流程。相信未來NLP的很多工作都會圍繞這個流程的最佳化展開。我判斷這個流程會繼續發展為下面這個樣子:
詳細說明下每個步驟:
第一步還是利用大的無監督資料預訓練通用模型。但這裡面目前可以改進的點有很多,比如發展比Transformer更有效的特徵抽取結構,現在的Evolved Transformer和Universal Transformer等都是這方面的探索。發展更有效更多樣化的預訓練模型目標函式。目前預訓練模型的目標函式主要是(Masked) LM和Next Sentence Prediction (NSP),還是挺單一的。面向文件級背景或多輪這種長文字資訊,未來應該會發展出更好的目標函式。比如有可能會發展出針對多輪對話這種資料的目標函式。
BERT主要面向的是NLU型別的任務,目前微軟提出的MASS、UNILM從不同的角度把BERT框架推廣到NLG型別的任務上了,細節我們之後會講到。GPT-2利用更大的模型獲得了更好的語言模型。更多更好的資料,更大的模型帶來的改進有沒有極限?目前還不知道,相信很多公司已經在做這方面的探索了。但這個遊戲目前還是隻有大公司能玩得起,訓練通用大模型太耗錢了。提升訓練效率,很自然的就是另一個很重要的最佳化方向。第二步是利用其他大任務的標註資料或已有結構化知識精調第一步獲得的通用模型。這一步不一定以單獨的形式存在,它也可以放到第一步中,在預訓練通用模型時就把這些額外資訊注入進去,比如百度的ERNIE就是在預訓練時就把實體資訊注入進去了。既然人類在漫長的AI研究史上積累了大量各式各樣的結構化資料,比如機器翻譯標註資料,沒理由不把它們用起來。相信未來會有很多知識融合(注入)這方面的工作。
第三步和前面流程的第二步相同,即利用當前任務資料進一步精調上一步得到的通用模型。這麼做的目的是期望精調後的模型更強調這個特定任務所包含的語言資訊。ELMo的實驗結論是,加入這一步往往能提升下一步的特定任務有監督訓練的收斂速度,但僅在部分任務上最終模型獲得了效果提升(在另一部分任務上持平)。
另一種做法是把這一步與下一步的特定任務有監督訓練放在一塊進行,也即在特定任務有監督訓練時把語言模型作為輔助目標函式加入到訓練過程中,以期提升模型收斂速度,降低模型對已學到知識的遺忘速度,提升最終模型的效果。GPT的實驗結論是,如果特定任務有監督訓練的資料量比較大時,加入輔助語言模型能改善模型效果,但如果特定任務有監督訓練的資料量比較小時,加入輔助語言模型反而會降低模型效果。但ULMFiT上的結論剛好相反。。所以就試吧。利用多工或者單任務建模方式在有監督資料集上訓練特定任務模型。多工的很多研究相信都能移植到這個流程當中。我們之後會介紹的微軟工作MT-DNN就是利用BERT來做多工學習的底層共享模型。論文中的實驗表明加入多工學習機制後效果有顯著提升。相信在這個方向還會有更多的探索工作出現。在單任務場景下,原來大家發展出的各種任務相關的模型,是否能在無監督預訓練時代帶來額外的收益,這也有待驗證。
總結下,未來NLP的主要工作可能都會圍繞這個流程展開。對流程前面步驟的最佳化帶來的收益比後面步驟大,也更難。所以諸君請自己拿捏吧~。