北方工業大學 馮俊輝 劉晨 郭浩然
Drools是開源業務規則引擎,規范的Drools規則代碼具備簡短、聲明式、可讀性強等特性。目前,Drools規則代碼需人工編寫,缺少一套機制自動生成代碼。本文中,提出一套基于模板和規則的機制以生成聲明式Drools規則代碼,并針對物聯網環境,構建了7500條Drools規則。基于構建的規則集,對本文提出的系統架構進行了驗證,并取得了一定成果。
高級編程語言依據編程規范,分為命令式語言、聲明式語言。官方規范的Drools規則語言是聲明式的,包含命令式、條件式代碼的復雜規則可轉換為多條聲明式規則。Drools作為推理引擎,可用于物聯網環境,依據規則以及規則間的推理關系實現物聯網設備的自動控制。
但是,非技術人員無法編寫Drools規則代碼。為解決該問題,本文提出基于模板和規則的方法幫助用戶從受限自然語言生成Drools規則。基于模板的代碼生成(TBCG)是從高級規范生成代碼的合成技術,可根據模板計算動態部分,是模型驅動工程(MDE)中的流行技術。基于規則的代碼生成是開發人員依據經驗或者先驗知識、事實等制定的一種策略,為自然語言到自然語言、代碼之間的轉換提供了依據。
目前,自然語言到代碼生成的研究主要聚焦于TEXT2SQL任務,忽略了其他領域基于自然語言生成代碼的需求,本文正好彌補了這一缺陷。
Drools規則作為Drools引擎推理依據,由規則名、屬性、條件部分(LHS)、動作部分(RHS)組成。結合物聯網環境、Drools規則代碼特點,制定如圖1所示模板。

圖1 Drools規則模板Fig.1 Drools rule template
模板中:ruleName為規則名、ClassName為系統類名、instanceName為類實例對象名、Field為類屬性、Operator為操作符、Value為屬性值、AND|OR為邏輯符合、Method為方法名。
本文提出的架構結合Drools規則模板,可解析用戶輸入的受限自然語言以替換上述模板內容,自動生成Drools規則。
本文基于模板和規則的方法提出如圖2所示框架。

圖2 Drools規則代碼自動生成框架Fig.2 Drools rule code automatic generation framework
框架以自然語句作為輸入,將復雜自然語句切為多條簡單自然語句。采用Semantic Analysis、Template Analysis,對簡單自然語句進行語法、模板分析,解析結果與Java類文件、類文件描述、Drools規則模板輸入Drools規則生成器。最終,由Drools規則生成器輸出自然語句對應的Drools規則。其中,Java文件則為系統類文件,Java描述文件則是對類、類方法、成員屬性進行功能描述的文件。
Split Statement負責切分復雜自然語句,將包含多個and、or復合邏輯的自然語句分割為僅包含單個and或or的簡單自然語句,也即Simple Nature Language。語句切分必要性包含兩點:簡化解析難度、符合Drools官方規范。
Semantic Analysis模塊,采用NLP技術對自然語句進行解析。本文使用斯坦福大學提供的StanfordCoreNLP,通過Lemma化、依存分析、命名實體識別、part-of-speech信息和語法規則對簡單自然語句進行解析。如,針對自然語句“When the air-conditioning is turned on, then close the window.”,StanfordCoreNLP解析得到的Lemma化結果、依存樹結構分別如圖3、圖4所示。

圖3 語句Lemma化結果Fig.3 Lemma result of statement

圖4 依存樹示例Fig.4 Example of dependency tree
通過Lemma化結果,如“turned on”歸一為“turn on”,Lemma化的優勢在于可去除時態、三單等語法形式引入的復雜性。
通過依存樹的結構信息,可以分析各設備及其動作。自然語句中存在作為屬性值的數字等實體時,可結合實體分析和依存樹結構,判斷出屬性值的從屬關系。
針對Drools規則在物聯網環境下的特點,涉及的語法主要包括主系表、主謂賓、There be三種結構。
Template Analysis通過解析模板對自然語句進行處理,以獲取簡單自然語句中的設備名、屬性、參數值。本文系統中,解析模板包含兩類:自動模板、人工模板。自動模板從小規模訓練集中提取,提取步驟如下:
(1)通過StanfordCoreNLP獲取簡單自然語句PosTags信息,將PosTags詞元形式作為模板,以提升其泛化能力;
(2)觀察簡單自然語句與對應的Drools規則,依據規則擦除PosTags中對應位置的信息,設備名、屬性、參數值分別采用正則表達式標識;
(3)模板入庫,人工模板由系統人員編寫,與自動模板相比,人工模板更具針對性、可靠性。本系統中,人工模板的解析優先級高于自動模板。
Semantic Analysis、Template Analysis解析結果格式如下:
when部分:{ 設備名, 屬性, 操作符, 參數值,邏輯符號 }
then部分:{ 設備名, 屬性, 動作, 參數值 }
Drools Rule Generator由5部分構成:
Class Component:將解析的設備名轉化為系統類名。類名解析首先判斷是否具備類名同設備名相同,不同時則計算類名與設備名相似度,超過相似度閾值時則解析結束。否則,將通過類描述文件判定包含關系以及相似度。經實驗表明,類描述文件是解析系統的有力補充模塊;
Method Component:將動作轉化類方法。通過StanfordCoreNLP獲取動作字段詞元,字段原形態、詞元形態分別記為a1、a2。遍歷方法注冊表,若a1、a2與方法描述語句存在匹配關系,則將方法納入候選集。遍歷結束,通過類名、屬性值對候選集進行二次過濾以獲取最終結果;
Field Component:將屬性轉化為類屬性。若屬性字段為空,則以設備名作為屬性。遍歷屬性描述文件,若與描述存在匹配關系或相似度超過閾值,則將屬性納入候選集。候選集中存在多個可能屬性時,通過設備名、設備名對應的類名對結果二次過濾,以獲取最終屬性;
Value Component:為類成員屬性賦值。在賦值操作中,主要將對參數值的類型以及成員屬性類型進行一致性校驗,校驗成功后進行賦值;
Validate Component:驗證生成的Drools規則語法是否正確。
基于模板和規則的方法,結合以上架構,可自動將用戶輸入的受限自然語句轉化為Drools規則代碼。
人工編寫7500條物聯網環境下的標準Drools規則,每條規則由自然語句、Drools規則構成,數據集結構如下:
(1)2500條每個規則僅包含與邏輯的數據集;
(2)2500條每個規則僅包含或邏輯的數據集;
(3)2500條每個規則同時包含與或邏輯的數據集;
(4)7500條混合數據集,由以上3部分數據集構成。
自然語句到Drools規則自動生成采用BLEU(Bilingual Evaluation Understudy)、ROUGE(Recall-Oriented Understudy for Gisting Evaluation)作為評價標準。BLEU、ROUGE指標分別計算1-gram至4-gram評分,以評估生成代碼的準確度、流暢度。
BLEU評分范圍為0~1,分數越接近1,翻譯質量越高,計算公式如下:

其中,lc為機器譯文長度,lr為最短參考翻譯句子長度。BLEU需計算譯文1-gram--N-gram精確率,通常N取4。Pn為N-gram精確率,Wn為N-gram權重,BP為懲罰因子。算法中,1-gram表示譯文符合原文的程度,N-gram表示翻譯結果流暢度。
ROUGE主要基于召回率,是常用的機器翻譯和文章摘要評價指標,由Chin-Yew Lin提出,計算公式如下:

公式中,分母為參考譯文中N-gram個數,分子為參考譯文與機器譯文共有N-gram個數。
針對3.1部分提出的數據集,自然語句生成聲明式Drools規則代碼實驗結果如表1所示。

表1 Drools規則代碼生成實驗結果Tab.1 Experimental results of Drools rule code generation
根據實驗結果,7500條自然語句BLEU-1翻譯得分為0.9925、ROUGE-1為0.9870,表明生成的Drools規則與標準規則匹配度很高。2-gram至4-gram表示翻譯流暢度,其中4-gram含義最強。對于7500條自然語句翻譯結果,BLEU-4為0.9642,ROUGE-4為0.8888,表明生成的Drools規則與標準規則在流暢度方面表現較好。生成的Drools規則與標準規則之間的差異歸結為以下兩點:
(1)屬性值、方法值不同。自然語言解析階段無法獲得屬性值或方法值,是造成差異的原因之一。如針對“when the light is turned on”條件,規則代碼生成時可推理出該條件對應的類為Light、屬性為State,但無法得知State值為0或1。方法值不同亦是如此。
(2)屬性順序不同。自然語言翻譯領域,如漢英互譯時,主謂賓等語法順序的正確性決定了翻譯結果的準確性。但是,Drools規則代碼的條件屬性順序卻有所不同。如“AirConditionor(state==1,isOn==true)”和“AirConditionor(isOn==true,state==1)”,二者條件屬性順序不同,但條件含義、語法、執行結果均一致。由此,BLEU、ROUGE在計算N-gram時,無法準確體現結構不同的代碼在功能上是否一致。
Drools作為成熟的商業引擎,同IFTTT一樣可用于物聯網環境。通過制定Drools規則,可依據環境狀態自動控制物聯網設備。本文提出的基于模板和規則的方法和系統架構,可依據受限自然語句自動生成聲明式Drools規則代碼。實驗結果表明,基于模板和規則的方法在實際應用過程中具備可實施性、高精準性。但是,本文架構中的語義解析、模板解析模塊還不夠完善,有些自然語言形式化表達字段還無法解析,未來工作將提出更完善的形式化表達字段解析方法。