天天看點

神經規則引擎:讓符号規則學會變通

雷鋒網按:本文原作者為深度好奇研究組,原發表于公衆号“深度好奇AI”(deeplycurious)。雷鋒網(公衆号:雷鋒網)已獲授權轉載。

論文題目:Generalize Symbolic Knowledge With Neural Rule Engine

論文位址:(請戳此處)

目前的自然語言處理任務中,神經網絡模型在學術界占據了絕對的優勢,然而,基于符号知識的規則系統仍然在工業界大有用武之地。人類語言是一種非常複雜的現象,為了更好地建構語言智能系統,可以将神經網絡和符号知識融合使用,內建二者的優勢。

近兩年來,神經符号學習(Neural Symbolic Learning)成為一個非常熱門的方向,不少優秀的科研工作把符号知識引入神經網絡模型,增強了模型的學習能力和可解釋性,在一些經典的NLP任務上都取得了不錯的效果。與這種融合方式相反,近日,深度好奇的研究者們提出了一種全新的融合政策——利用NN模型來改進規則的效果。NN模型的優點是靈活性高、泛化能力強、魯棒性好,如果将NN模型的這些優勢賦予規則系統,會産生出怎樣的火花呢?

本文介紹了一種神經規則引擎(Neural Rule Engine,NRE),NRE可以從規則中學習知識,同時又通過神經網絡來泛化知識,這與人類學習知識的方式有異曲同工之妙。

具體來說,NRE由神經子產品網絡(Neural Module Networks)構成,其中的每一個子產品代表了規則中的一種操作,而子產品的實作形式既可以是神經網絡,也可以是符号算法。并且,給定少量的标注樣本,可以使用強化學習來微調(Finetune)學習效果。實驗證明,NRE可以大幅提升規則的召回率(Recall),同時還能将精确率(Precision)維持在較高的水準。

舉個具體的規則例子,對于一個判斷案件類型的分類任務來說,案件内容如下:

“2003年12月21日中午12時,東浦村張某與王某某二人到臨西縣遊玩,被三名男子跟蹤,後用刀威逼,搶走手機一隻。”

根據經驗來看,如果案件表述中有“跟在.*後面|跟蹤”,一般屬于“尾随作案”,但是如果其中有“事主.*跟随”的話就不是。是以,針對“尾随作案”類别,可以寫一條規則:

“跟在.*後面|跟蹤@@事主.*跟随”

其中“@@”左邊藍色的是正規則,也就是句子中必須比對上的内容,“@@”右邊紅色的是負規則,也就是句子中不能包含的内容。

由于正規表達式是有限狀态機的一種,是以可以定義一些操作(Action)來解析正規表達式規則,比如:

神經規則引擎:讓符号規則學會變通

用預先定義好的操作來表示規則,如下圖所示:

神經規則引擎:讓符号規則學會變通

每一條規則都可以被拆解成樹狀結構,拆解的過程依賴于Rule Parser。由于整個系統的設計既考慮了符号性又考慮了神經網絡的特性,是以對于規則的拆解上既可以用符号算法來實作也可以用Neural Rule Parser來實作。由于樹狀結構可以轉變成逆波蘭表達式(Reversed Polish Notation)的形式(如下圖):

神經規則引擎:讓符号規則學會變通

是以可以采用一個Seq2Seq的神經網絡模型來實作對規則的拆解。具體如下:

神經規則引擎:讓符号規則學會變通

給定一條規則,鑒于同時預測子產品和子產品所需參數較為困難,是以可以采取分步的方式來預測。第一步先預測操作序列,第二步根據規則和已經預測出來的操作來預測每個操作所對應的參數。為了讓預測的結果更加可靠,在訓練階段,我們加入了微調(Finetune)過程,對于預測出來的操作序列根據在真實事例上的表現用強化學習來進行模型的調整。

得到rule parsing的結果後,即可對子產品進行組裝。在本文中,Find子產品和And_Ordered子產品都采用了神經網絡的設計。

Find子產品

Find(x)子產品是用來查找句子中比對x部分的内容,可以用正規表達式的比對來實作,也可以用神經網絡來實作。神經網絡的Find子產品如下:

神經規則引擎:讓符号規則學會變通

對于每一個句子來說,Find(x)操作就是在句子中找到x,x可以是一個字、一個詞或者是一個N-gram。無論用神經網絡實作還是用正規表達式的match(x)來實作,任務都可以看作是對句子做序列标注,也就是對句子中的每一個機關都标注“是否比對”的标簽。具體來說,對于句子中的每一個機關,先擷取到它滑動視窗的上下文,并令上下文和要查找的x都通過相同的編碼器(Encoder),之後用評價函數來對二者的相似程度進行打分,最後根據每個位置的所有分數來判斷目前位置的标簽。

And_Ordered子產品

And_Ordered子產品可以采取如下設計:

神經規則引擎:讓符号規則學會變通

And_Ordered操作是用來判斷兩個輸入之間是否滿足一定的距離關系。通常來說,輸入就是子節點給出的标記結果,如r0和r1。為了讓神經網絡更容易判斷輸入之間的距離,我們可以引入距離标記d0和d1。結合句子原文,And_Ordered子產品可以判斷出兩個子節點的輸入是否滿足距離關系。

模型訓練

在訓練過程中,子產品和Neural Rule Parser都采取了預訓練+微調的政策。在訓練時,先對資料和規則進行訓練集/驗證集/測試集的劃分,為了避免資料洩漏,各部分之間不能混用。訓練子產品的時候,先根據資料随機生成各個子產品的訓練樣本,在訓練到一定程度時,把訓練集中的規則真實應用于訓練集中的資料,按照資料的真實标簽采用強化學習的方式對子產品進行微調。對于Neural Rule Parser也按照類似政策,依前文方式進行訓練。

Neural Rule Engine (NRE)

NRE集合了上述的元件:NN/算法實作的子產品,NN/算法實作的Rule Parser。NRE的整體架構如下圖所示:

神經規則引擎:讓符号規則學會變通

對于給定的一條事例和一條規則,NRE先将規則拆解成由子產品組成的樹狀結構,之後根據樹狀結構将規則應用于具體的語句上,進而給出比對後的結果。

實驗

論文在中文案情分類(Chinese crime case classification)任務和SemEval-2010 relation classification任務上進行了實驗。實驗結果如下:

神經規則引擎:讓符号規則學會變通

NRE在中文案情分類資料集上的結果

神經規則引擎:讓符号規則學會變通

NRE在關系分類資料集上的結果

上面的結果顯示,RE的Precision很高,但是Recall相對較低。而第二組Baseline是傳統意義上的序列模型,并不能處理好正規表達式,特别是正規表達式除了局部的比對還需要考慮有層級關系的全局比對,傳統的序列模型很難處理好這些情況。NRE則能帶來Recall接近翻倍的效果,同時Precision仍維持在較高的水準。需要關注的是,微調(Finetune)對NRE來說是至關重要的,因為NRE在預訓練階段是單純地在訓練各個子產品,而微調是讓規則在真實場景中調整的關鍵。

同時,由于NRE可以充分利用神經網絡和符号二者的優勢,為了探究規則的泛化性從何處而來,我們還進行了額外的實驗。我們通過對不同部分分别采用神經網絡和符号算法,進而得到了混合的模型(見下表)。随着神經網絡的介入,NRE整體的Recall表現會更好,而Precision在合理的範圍内有所下降。實際上,這是因為神經網絡的靈活性所帶來的優勢,彌補了規則比對的僵硬。

神經規則引擎:讓符号規則學會變通

神經網絡和符号算法的不同組合,其中“_”左邊是神經網絡的實作,右邊是算法實作,“P”是“Find_Positive”,“N”是“Find_Negative”,“A”是“And_Ordered”,“S”是“Rule Parser”。

另一方面,研究模型給出的結果可以發現,Find子產品帶來了巨大的泛化能力。傳統的正規表達式是對樣式進行比對,而NRE在一定程度上是對語義進行比對。如下述兩圖的中英文案例所示,查找“pushed into”會合理地找到“put inside”,而像“進入室内”被“入室”整體比對上更能說明NRE對詞語的查找會超越樣式本身。

神經規則引擎:讓符号規則學會變通
神經規則引擎:讓符号規則學會變通

與此同時,用Neural Rule Parser對規則進行拆解也是對規則本身進行修正。比如下圖中的“落水管”和“不鏽鋼管”被合并成為了“管”,而且“打牆洞”中的“洞”被删去。

神經規則引擎:讓符号規則學會變通

總結

我們提出了一種全新的學習政策來對符号規則進行改進,神經規則引擎(Neural Rule Engine)使得規則獲得了神經網絡帶來的靈活性、魯棒性和泛化能力,同時又保持了規則的精确性和可解釋性。

NRE包含了Rule Parser和一系列操作子產品,它們既可以是定制化的神經網絡,又可以是符号算法。對于一條給定的規則,NRE先對規則進行拆解,使其成為操作序列,之後根據操作序列來裝配子產品,最終給出預測結果。此外,我們還提出了分步的訓練方法使得建構NRE成為可能,即先對子產品和Rule Parser随機生成資料進行預訓練,之後根據真實的樣本标注用強化學習進行微調,進而得到具有泛化能力的規則表示。

實驗表明NRE可以大幅提升規則的Recall,同時還能維持較高的Precision。NRE不僅是一種新的神經符号學習範式,同時也為現有的工業應用帶來了一種高效的改進,它可以被用來對已有的規則系統進行更新,或者在訓練資料不大的情況下快速開發出神經規則系統。

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

神經規則引擎:讓符号規則學會變通

繼續閱讀