近代自然語言處理技術發展的『第四範式』
作者 | 劉鵬飛
整理 | NewBeeNLP
https://zhuanlan.zhihu.com/p/395115779
答案:(可能是)預訓練語言模型 加持下的 Prompt Learning
本文完?
顯然,僅知道這個答案並不是一件唯一重要的事情,除此之外,「瞭解其他三種範式是什麼以及範式之間轉化的內在邏輯的價值更加凸顯」。這有兩個好處:
-
對每種範式的特點有整體認識之後,可以讓我們對自己當前工作有個更好的定位,讓你的故事講得更有格局;
-
我們最終一定不只是想成爲某個範式下的推動者,而是成爲下一個新範式的引領者。而這其中的關鍵在於對推動範式演變的核心驅動力的把握,「這需要對現在以及過去進行總結。」
我們最近的一個工作正是基於這樣一個動機出發並完成的。論文以及相關的資源在這兒,大家感興趣可以閱讀(很有誠意的作品:),感謝所有優秀的的合作者們)。
- http://pretrain.nlpedia.ai/
當然這個博文也是希望能談些沒有最終放到論文裏的內容(論文一般會放一些比較嚴謹的的表述,而那些比較個人的,還未被論證的理解也同樣有價值。)
下面我們用幾個問題來驅動內容的介紹。
NLP 發展的四個範式是什麼?
我們將近代 NLP 技術的發展總結爲四種範式,分別爲:
-
P1. 非神經網絡時代的完全監督學習 (Fully Supervised Learning, Non-Neural Network)
-
P2. 基於神經網絡的完全監督學習 (Fully Supervised Learning, Neural Network)
-
P3. 預訓練,精調範式 (Pre-train, Fine-tune)
-
P4. 預訓練,提示,預測範式(Pre-train, Prompt, Predict)
不同範式演變過程中有怎樣的規律?
在這種不同範式變遷過程中,有些東西是不變的,把它們挖掘出來就很有意思,比如:
規律 1:每個範式都會涉及繁瑣的,需要人來參與(提供先驗)的工程(engineering)
- P1 非神經網絡時代的完全監督學習
「特徵工程(Feature Engineering):」 我們要進行 “無聊 “的特徵模板定義環節
- P2 基於神經網絡的完全監督學習
「結構工程 (Architecture Engineering):」 神經網絡雖然解放手動配置特徵模板所需要的人力,但是是以需要人工去設計合適網絡結構爲代價的。因此,在這樣的研究範式下,研究人員花了很多時間在探究最適配下游任務的結構偏置(Structural Bias)。比如是使用 “卷積循環變形金剛(Transformer)網絡“,還是使用” 卷積變形金剛(Transformer)循環網絡“。
- P3 預訓練,精調範式
「目標函數挖掘 (Objective Engineering):」 這個過程研究者往往是通過引入額外的目標函數到預訓練語言模型上,以便讓其更適配下游任務。這個過程有時候也需要些網絡結構的挖掘,但相比較而言,不是這個範式的主旋律,一個實際的原因在於:(1)預訓練過程本身費時,過度的結構偏置(structural bias)探索開銷過大;(2)精調的過程中,很多時候 預訓練語言模型本身提供的知識已經可以讓大家 “忘記” 使用卷積神經網絡和循環神經網絡的差異。
- P4 預訓練,提示,預測範式
「Prompt 挖掘工程:」 在這個過程我們往往不對預訓練語言模型改動太多,我們希望是通過對合適 prompt 的利用將下游任務建模的方式重新定義。
「規律 1 的應用:」
因爲有規律 1 的存在,我們可以更加辯證的看待新的範式,這句話的價值體現在兩個場景:
(1) 當我們使用新範式的方法的時候,能夠意識到它帶來的優異性能是以某種 “人力” 犧牲(需要一些人工設計加持)爲代價的,而如何讓這種人力代價將到最低,往往就是新範式裏需要解決的核心問題。
(2) 「當我們某個瞬間突然有些 “神奇” 的想法,它與現在的主流解決思路很不相同,可是實現它又需要一些很瑣碎的操作,那麼這個時候,恭喜你,因爲你很有可能在接近一個新的範式(或者新的解決框架),假如存在上帝視角的話,可能那個 “神” 在看着你,期待着你堅持下去,因爲你將會給這個領域的發展帶來與衆不同和進步。」
當然,從有想法到真正把它實現出來會成爲另一個關鍵點,而決定能否做成的因素中,比較重要的可能是:信心,堅持,對領域的理解,以及實現能力。
規律 2:新範式帶來的收益可以讓我們暫時 “忽略” 那些額外需要的人力代價
這似乎也是理所應當(不然,幹嘛要它)。
不過這裏值得注意的是,關於 “收益” 的定義並不唯一,它不只是被定義爲某個任務性能的提升,還可以是“幫我們做一些過去框架不能做的事情”,或者是新的研究場景。
比如,無論是神經網絡早期在 NLP 的應用,或者是 Seq2Seq 早期在翻譯上的應用,都沒有在性能上討得便宜(相比於傳統統計方法),可是這種顛覆性的想法給了我們太多可以想象的空間(比如既然翻譯可以用 Seq2Seq,那麼其他任務是不是也可以這樣呢?那麼 NLP 任務解決框架就可以被統一了嗎?)
「當我們回顧 P(N) 逐漸 取代 P(N-1) 的過程 (這裏 P 是指上面定義的範式)我們突然理解」:
-
P1->P2: 雖然我們常常吐槽神經網絡調參如煉丹,可是也在享受着不用手工配置模板,就能夠得到還不錯甚至更好結果的福利。與其說 “煉丹 “,「我覺得神經網絡的訓練更像是 “陶藝”,而傳統的特徵工程更像是 “煉丹”,因爲它對原材料(特徵)的選擇以及加入丹爐的順序(特徵組合)的要求幾乎非常苛刻」。(大家可以感受下,煉丹和陶藝的過程:
-
https://zhidao.baidu.com/question/936545101298430372.html
-
https://zhidao.baidu.com/question/458169192374974725.html)
-
P2->P3: 雖然探究 “哪一種損失函數引入到預訓練語言模型中更適配下游任務” 比較無聊,但比起排列組合各種網絡結構,卻不一定能獲得好性能而言,前者似乎還行。
-
P3->P4: 雖然 prompt 的定義很繁瑣,但是如果有個方法可以幫你回答 “BERT 效果都那麼好了 ,我還研究個啥 “這個問題,那它也挺有吸引力。並且,Prompt Learning 激活了很多新的研究場景,比如小樣本學習,這顯然可以成爲那些 GPU 資源受限研究者的福音。當然,「我理解 Prompt Learning 最重要的一個作用在於給我們 prompt(提示)了 NLP 發展可能的核心動力是什麼。這個大家如果感興趣,可以關注後續更新。」
「規律 2 的應用:」
可以幫助我們區分 “僞範式“與” 真範式“。如果新的建模體系實現的代價過於複雜,或者是收益甚微,那麼他可能不是比較有前景的範式了。
那麼被定位爲第四範式的 Prompt Learning 到底是什麼?爲什麼會在現在發生?
Prompt Learning 是指對輸入文本信息按照特定模板進行處理,把任務重構成一個更能充分利用預訓練語言模型處理的形式。
比如,假如我要判斷 “我喜歡這個電影 " 這句話的情感(“正面 "或者" 負面 "),原有的任務形式是把他看成一個分類問題
-
輸入:我喜歡這個電影
-
輸出:“正面 "或者" 負面 "
而如果用 Prompt Learning 去解決的話,任務可以變成 “完形填空 ",
-
輸入:我喜歡這個電影,整體上來看,這是一個 __ 的電影
-
輸出:“有趣的 "或者" 無聊的 "
着色輸入就是將輸入文本按照特定模板進行處理,而這樣做的目的是爲了更適配預訓練語言模型的形式。例如,BERT 的預訓練就是採用這種類似完型填空的形式。(所以 Prompt Leaning 的應用還需要對各種預訓練語言模型本身特點有深刻的理解,這個我們在論文裏(第三小節 )給了非常詳細的描述,告訴大家不同預訓練語言模型適配什麼樣的 Prompting 場景)
「關於這個定義,如果我們深挖一下,會發現一些美妙的點。」
(1)Prompt Learning 所涉及的技術似乎過去不少工作都有涉及?
沒錯,不管是對輸入的模板化處理,還是任務重構的操作,這都不是什麼新鮮的事情。我們在論文的第 9 小節有很詳細比較與 Prompt Learning 相關的一些(八個)“老 “的研究話題,比如”Query Reformulation“,比如 “QA-based Task Reformulation”。
(2)既然過去的工作都有涉及,爲什麼現在的 Prompt Learning 是一個新範式?
其實如果我們看上面對 Prompt Learning 的表述,這裏面隱含了個不容易被發現的假設,即
「“預訓練語言模型的知識真的很豐富,爲了更好的利用它,我們願意不惜以重構任務爲代價(因爲對任務重構本身涉及很多選擇決策,需要人來參與)。」
這說明,Prompt Learning 的範式裏 “任務重構”目的非常明確,即更好的利用預訓練語言模型。而這一點,就可以和過去 “Query reformulation/QA-based Task reformulation“工作區分開。原因很簡單,因爲,那個時候的 NLP 技術還不存在一個這麼強大的預訓練語言模型讓我們爲了” 迎合“它而去把任務進行重構。
(3)Prompt Learning 蘊含的假設(“預訓練語言模型的知識真的很豐富,爲了更好的利用它,我們願意不惜以重構任務爲代價)成立嗎?
它不一定成立,尤其是在預訓練語言模型比較弱的時候,比如,早期的一些上下文無關的詞向量模型,爲它而重構任務可能是一件得不償失的事情(這同時也回答了上面一個問題,爲什麼 Prompt Learning 會在這時候入場)。而從 BERT 以來,這種上下文相關的預訓練模型,他們不僅包含了豐富知識,另一個重要的點在於他們本身已經是個完整的小個體(比如,有輸入層,特徵提取層,輸出層),這意味着在我們給不同下游任務設計模型的時候,擁有了這樣一種可能性:不用設計新的網絡層,而是完全利用預訓練語言模型的網絡結構。而爲了達到這個目的需要做出一些改變,而這個改變就是利用 prompt 重構任務的輸入。
Prompt Learning 的主要研究點是什麼?現有工作都做了哪些探討?有價值的方向是什麼?
關於這個問題,我們努力嘗試在論文上給了一個儘可能清晰的梳理,大家可以結合論文中的概念(圖 1)去理解。
發生在第三個階段的的語言模型 Fine-tuning 範式和第四個範式的 Prompting 範式有什麼關係?
這裏分享一張我很喜歡,雖然最後沒有放在論文裏的圖。
圖中,圓形表示預訓練語言模型,矩形框表示的是各種下游 NLP 任務。那麼,「我們就有這樣一句話:大家都是希望讓 預訓練語言模型和下游任務靠的更近,只是實現的方式不一樣」,
「Fine-tuning 中:是預訓練語言模型 “遷就 “各種下游任務。」 具體體現就是上面提到的通過引入各種輔助任務 loss,將其添加到預訓練模型中,然後繼續 pre-training,以便讓其更加適配下游任務。總之,這個過程中,預訓練語言模型做出了更多的犧牲。
「Prompting 中,是各種下游任務 “遷就 “預訓練語言模型。」 具體體現也是上面介紹的,我們需要對不同任務進行重構,使得它達到適配預訓練語言模型的效果。總之,這個過程中,是下游任務做出了更多的犧牲。
「誠然,一個更加和諧的狀態應該是大家 “互相讓步 “,相信讀到這,大家心中應該有些不錯的 ideas 了。」
Prompt Learning 給了我們哪些 Prompts (劇透了哪些 NLP 發展可能的核心動力)?
最後,我用比較喜歡的一個總結來結束這篇博文 (如果有時間,後續會繼續更新這個總結的細節 lol)。
Prompting 本身不是目的,它是一種實現讓下游任務和預訓練語言模型更加接近的途徑,如果我們有其它更好的方式,那就可以引領下一個範式。
PS: 以上有很多個人觀點, 感悟,希望讀者 (1) 更批判的去閱讀 (2) 如果您贊同,在觀點轉述的時候能引用下,就很好。
一起交流
想和你一起學習進步!『**NewBeeNLP』**目前已經建立了多個不同方向交流羣(機器學習 / 深度學習 / 自然語言處理 / 搜索推薦 / 圖網絡 / 面試交流 / 等),名額有限,趕緊添加下方微信加入一起討論交流吧!(注意一定要備註信息才能通過)
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/HKwfDX_1MCDZzwIOTiXOXA