首頁>技術>

近年來,深度學習模型在各種任務上都取得了非常大的成功。然而,不同於人類可以從少量樣本中快速學習,深度學習模型的成功仍依賴於大量訓練資料。那麼,深度學習模型是否有可能擁有人類這種快速學習的能力呢?一個關鍵問題就在於深度學習是否可以擁有組合泛化能力。組合泛化是人類的一種基本而又必不可少的能力,透過理解已知部件的未知組合,人類可以利用有限的語言元素理解無限的自然語言世界。因此,越來越多研究者關注在組合泛化這個問題上,尤其是在AI程式設計領域。

2018年,紐約大學和Facebook的科學家們提出一個組合泛化領域的經典測試基準SCAN,測試任務是將諸如“run after walk”這樣的自然語言解析成諸如“WALK RUN”這樣的導航指令。然而他們發現,目前最先進的深度學習模型,甚至包括預訓練模型,在這個測試基準上表現得都尤其差。為了解決這個問題,本文指出組合泛化的核心在於將語言看作某種代數系統,透過學習表示式來達成模型的組合泛化。在該思想的指導下,本文提出一種新穎的記憶增強的神經模型LANE,該模型在SCAN上取得了相當好的效果。

劉乾,北京航空航天大學與微軟亞洲研究院聯合培養博士,主要關注在上下文建模、語義解析、組合泛化等話題,目前以第一作者身份在ACL, EMNLP, NeurIPS等會議發表若干論文。

一、研究背景

組合泛化能力

人類天生具有組合泛化的能力,這體現在自然語言和程式語言中。正如語言學家喬姆斯基所言:“有限資源,無窮運用”,人類可以動態重組現有的原子語義。同樣,程式語言的組合性,也使其具有無限空間。

在認知心理學中,組合泛化實際是一種能力,將簡單的元素重組來理解全新的句子。例如,給定左側這4個人造單詞及其對應的顏色系列,人們可以將原子語義重新組合,從而輕易推斷出新的例子“lug kiki wif”對應的顏色系列。

兩大資料集:SCAN和CFQ

2018年,紐約大學和Facebook的科學家們就提出了一個 benchmark——SCAN。它是一個合成的資料集,要求模型把輸入的自然語言命令,翻譯成對應的導航指令。比如自然語言“run twice”,對應的程式語言是“RUN RUN”。

表面上看,這是個非常簡單的合成的任務,如果用現有的深度學習模型訓練,隨機劃分訓練集和資料集,應該達到相當高的準確率。然而實驗表明,該翻譯模型在組合泛化方面並未取得令人滿意的效果。儘管訓練集裡出現過“run twice”和“jump and walk”,模型卻無法有效重組來理解“run and jump twice”這類複雜句子。

CFQ資料集是另一個更真實的場景,主要評測KBQA系統,即從自然語言生成SPARQL語句的過程。當然,為了簡化模型本身的複雜度,將涉及的具體名詞做了匿名化,比如圖中的M0、M2其實代表一些具體的實體。

資料集的組合性約束劃分

科學家們發現,如果從組合性的角度對資料集劃分做出約束,現在的深度學習模型的效果會變得極不理想。有三種資料集劃分的方式:一是“Add Jump”,二是“Around Right”,三是“Length Generalization”。“Add Jump”是指訓練時jump只是單獨出現、沒有相關的組合,而測試時都是關於jump的複雜組合。“Around Right”是指訓練時從未見過包含around right短語的句子,而測試時全都是包含around right短語的句子。“Length Generalization”是指訓練時,模型從未輸出超過24個動作的序列,但測試時序列長度可能會超過24。

我們剛剛介紹,SCAN是以人的智力來操控的組合性約束劃分,CFQ則用了更加自動的演算法,其中有兩個要點:

第一,在訓練集和測試集中,原子語義的分佈一定是類似的。

第二,不同組合在訓練集和測試集的分佈不同。

深度學習模型缺乏組合泛化性

其實,組合泛化是當前一個非常火的話題,從18年開始提出了各種各樣的資料集測試模型的組合泛化能力,並且湧現了CGPS、Meta Seq2Seq等方法來解決分佈外的泛化。

但是,我們現在的深度學習模型是缺乏組合泛化性的,下面表格是在SCAN上評測的結果,表中綠色部分是指訓練時沒有任何額外資源,也就是訓練時沒有任何資料增強或者特定資料集的規則;藍色部分是指訓練時帶有額外資源。但我們發現兩種情況下,當前的深度學習模型都沒辦法成功解決SCAN上所有組合性的挑戰。

為什麼機器學習系統無法具有人類的組合泛化能力?我們認為當前的基於神經網路的模型所做的,只是從原領域的例項對映到目標語言的例項,而沒有觸及組合性的關鍵因素。實際上,我們可以把語言本身當作一種代數系統,這種代數系統能夠被所謂的符號函式和變數槽所建模,也就是我們這篇論文的核心:解析表示式(analytical expression)。

二、模型構建

解決方法:學習解析表示式

我們的模型所學習的,實際是從源語言表示式到目標語言表示式的對映,比如$x twice到$x $x,其中$x的位置可以放任意動詞,這樣就可以泛化到任何給定的新的自然語言句子上。那麼,如何學習所謂的解析表示式呢?

我們來看一個簡單的示意圖,給定一個run opposite left after walk twice這樣的自然語言句子,我們的模型會識別出run是一個變數槽,把它規約成一個變數,接下來left規約成另一個變數,接著是$x opposite $y,一步步規約下去,原自然語言的句子就可以解耦成一系列源語言領域的表示式。

然後透過符號函式,我們可以得到目標領域的表示式,再透過這種遞迴自下而上地填充目標領域變數的值,從而得到最終的指令序列,也就是最開始我們輸入的自然語言對應的指令序列。

實現路徑:帶記憶的模型

瞭解思想後,如何進行模型構建的實際操作呢?我們提出了一個記憶增強模型來自動學習以上過程,該模型的獨特性在於所有東西都是自動學習的,包括所有中間表示式的構造和對映,都是模型透過資料學出來的,沒有任何中間表示式的監督資訊。

模型透過composer、solver和memory這三個模組的互動來理解自然語言:比如給定一句話$x after $y twice,它首先經過composer找到一個可以規約的表示式$y twice,然後透過solver模組對映到目標領域的表示式$y $y,其中$y直接從memory模組中取值,比如此處$y對應之前儲存的walk,形成具體的表示式walk walk。接下來我們把要規約的源語言領域的表示式$y twice用變數替換,得到下一個步的輸入,再經過類似的步驟得到最終的輸出。

我們發現整個學習過程實際上非常難,因為在這些中間的表示式上並沒有任何監督資訊。所以我們主要有兩大挑戰:

第一:composer和solver之間的$y twice這樣的表示式是離散、不可導的,所以沒法直接透過反向傳播來學習這個過程,而是使用強化學習。第二:在獎勵非常稀疏的情況下,很難訓練,所以我們採用分層強化學習和課程學習的解決方法。

分層強化學習是指把composer和solver作為不同層次的代理,圖中πθ代表composer,πΦ代表solver。透過直覺可以想到,composer作為高層的代理,學習率一定要比 solver慢。課程學習則相對比較簡單,它是指一種循序漸進、從簡單到複雜的過程。這裡我們按照輸入序列由短到長來組織整個訓練的流程,讓模型在初期不易發散。

三、實驗結果

結果表明,我們的模型在SCAN上全部取得100%的好成績,遠勝於其他各種深度學習模型的表現。同時我們的模型是第一個在不帶任何額外資源的情況下,在SCAN這個任務上能夠全部解決這些組合泛化挑戰的模型。

我們也做了另一個實驗,因為SCAN本身並沒有評測這個模型在輸入的序列長度上的泛化能力,我們構造了一個新的資料集SCAN-ext。該資料集在訓練時輸入的序列長度就在10左右,測試時全都是長度為10到40的輸入序列。可以發現基線模型的效能主要由輸入長度序列的頻率所決定,而我們的模型在任意長度上都能取得較好的效能。

總結

我們的論文主要透過學習解析表示式來解決組合泛化的問題。實際上,語言的組合性在於把語言視作一種代數系統,從而被解析表示式所建模,學習解析表示式的過程是對composer、solver和memory這三個模型的聯合最佳化,這些模組之間離散的action可以由分層強化學習和課程學習的結合來緩解,從而實現優良的效能。

論文:

Qian Liu, Shengnan An, Jian-Guang Lou, Bei Chen, Zeqi Lin, Yan Gao, Bin Zhou, Nanning Zheng, and Dongmei Zhang."Compositional Generalization by Learning Analytical Expressions." Advances in Neural Information Processing Systems 33 (2020).

程式碼:

https://github.com/microsoft/ContextualSP

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 第302期基於微控制器+LCD1604顯示