張曉冰,,,
(解放軍理工大學 國防工程學院,南京 210007)
自適應軟件近十幾年一直是軟件工程領域的研究熱點[1]。其能夠根據環境變化和用戶任務目標來調整自身的參數和行為[2]以應對變化。在前期工作中,課題組提出了軟件模糊自適應(Software Fuzzy Self-adaptation,SFSA)范型[3]以及相應的建模[4]和實現工具[5]:基于模糊控制理論構造模糊自適應環,以消除模糊不確定性對自適應過程的影響。在運行過程中,模糊自適應環在用戶設定的目標制導下,基于模糊的、不完備的感知信息進行推理和決策。
軟件模糊自適應系統是目標驅動的系統,與用戶持續性的交互是其重要特征。特別是在任務型自適應系統中(例如送餐機器人系統),由用戶事先設定任務目標到系統中,系統基于目標自動驅動自適應過程進行感知、決策和施動,以確保任務目標的完成。在傳統方式下,用戶大多根據任務要求先將意圖轉化為文本形式的任務目標,進而輸入到自適應系統中。這種方法顯然存在實時性不強、交互性弱等問題。隨著語音識別技術的發展,用戶越來越傾向通過語音表達意圖,即直接將語音式的任務目標輸入到系統,從而提高任務目標設定的實時性、便捷性。但是,這種非形式化、非結構化特征的語音式任務目標給系統的語音識別和處理帶來了極大挑戰。
為能直接捕獲語音式任務目標,文獻[6]提出直接將(英語)語音式任務目標施加到模糊自適應環。然而此方法限制用戶只能按照模糊規則庫中預設的詞組或短語表達需求,缺乏語義的包容性和拓展性處理,限制了用戶對任務目標的靈活性表達。例如要求任務以“quickly”(快速)執行,當表述為 “speedily,rapidly”時,雖含義相同但難仍難以被系統識別。該方法對語音輸入的強制性,限制了系統對任務目標的識別能力:如果語音式任務目標不夠標準,表達不在規則集合內就會導致識別失敗。
為此,本文提出一種面向軟件模糊自適應的語音式任務目標識別與結構化轉換方法。對語音式任務目標進行詞法、句法分析,提取依賴關系;根據依賴關系識別任務關鍵成分進行語義關聯拓展;按照模糊規則前件的格式,實現對任務目標的結構化轉換;將結構化轉換后的語音式任務目標輸入軟件模糊自適應系統,進行規則匹配,從而實現對語音式任務目標識別與結構化轉換的目的。
目前還缺少將語音式任務目標進行自然語言處理后施加到模糊自適應軟件系統的針對性工作。然而在軟件工程與自然語言處理交叉領域,以及指令抽取與自然語言處理交叉等領域已有不少相關成果:
1)已經有許多學者嘗試將自然語言處理技術應用在軟件工程尤其是形式化領域,提出了自動或半自動抽取和建模的相關方法和技術:文獻[7]將自然語言處理和KAOS需求工程融合(NLP-KAOS),實現了文檔集的目標抽取和建模;文獻[8-9]提出了將文本需求自動轉化為UML和SysML形式化描述模型。
2)借助自然語言處理技術實現指令和語義抽取的相關工作有:
(1)文獻[10]運用自然語言理解、知識庫、組合范疇語法理論知識,對中文語音指令的解析方法進行了研究,利用條件隨機場和知識庫結合進行句法分析識別實體,利用支持向量機學習未知指令。雖實現了語言指令解析系統但未能構造完整的語音指令服務機器人平臺。
(2)文獻[11]對車輛行駛指令進行抽取和結構化,提出語義分類方法并利用K-means聚類對動詞進行歸類,然而沒有實現語音接口。
(3)文獻[12]提出基于語義的寫作輔助方法,支持按照詞性、搭配和概念擴展等語義條件來檢索短語和自動推薦搭配。
本文借鑒兩方面研究成果,實現將語音式任務目標經過自然語言處理后直接施加到模糊自適應軟件系統,提高了模糊自適應軟件任務任務目標輸入的快速性、靈活性和包容性。
軟件模糊自適應是前期研究中提出的一種自適應軟件范性[3],能對環境和用戶任務目標含有的模糊性信息進行處理,采用模糊數學工具來處理自適應系統所面臨的模糊性,其概念模型如圖1所示。

圖1 軟件模糊自適應概念模型
如圖1所示,模糊自適應軟件系統根據軟件自適應外部機制[3]要求,劃分為模糊自適應層和應用層。模糊自適應層本質是目標驅動下的“感知-決策-執行”自適應環,其基于用戶設定的自適應目標,由感知器感知變化,由模糊推理機制作出合理決策并通過執行器自動調整參數、結構和行為。模糊化、模糊自適應推理和去模糊化是自適應決策的主要環節。
模糊自適應規則庫由一套事先固化的規則“if A is A1then B is B1”(“A is A1”為規則前件)構成。任務目標與感知信息經模糊化后輸入到規則庫進行匹配、推理,完成自適應決策。在前期研究中主要考慮了任務目標以文本的形式預先輸入的情形,而本文研究工作主要關注如何支持用戶靈活而直接的語言(自然語言)形式來輸入任務目標,并提取其中的關鍵成分,把不規則的自然語言輸入轉換成結構化的表示,從而實現高效精準的匹配推理。
自然語言作為信息溝通的最主要方式,可為人機交互時提供其他方式不可替代的直接和便利,缺點在于其描述的不充分性、語言歧義性(語法和語義歧義)[13]。處理口語和書面語(統稱為“語言”)的計算機技術稱為自然語言處理[14],其基礎研究內容主要包括詞法分析、句法分析、語義分析與篇章分析等研究[15]。基于自然語言處理(Natural Language Processing,NLP)的技術應用日益廣泛,涌現了許多優秀的處理工具如NLTK、CoreNLP等。
自然語言處理工具箱NLTK(Natural Language Toolkit)在利用 Python 處理自然語言的工具中處于領先的地位。NLTK 包含大量的軟件、數據供直接使用,例如WordNet。WordNet[16]是一基于認知語言學的詞匯語義網絡系統。其構造核心在于根據單詞的語義來組織詞匯信息:將詞匯組織為同義詞集合(synset),每個集合表示一個詞匯概念,每個單詞對應一個或多個同義詞集;同時概念之間建立不同指針,表達上下位、反義等不同的關系,可以有效表達詞匯語義。
CoreNLP[17]提供了一系列集成的自然語言分析工具,能分析語句中每個詞語的組成與語法,并且用短語和詞匯間的依賴關系來標記出語句的組成結構。
綜上,NLTK和CoreNLP都是功能強大的自然語言處理工具,本文主要選取這些工具構建原型系統來驗證方法。
以在生活中逐步開始應用的送餐任務機器人作為應用案例:送餐機器人需要經常與用戶交互,獲取任務目標,將它們輸入到自適應環完成指定的任務。前期研究中構造了一種模糊自適應送餐機器人,如圖2所示。

圖2 模糊自適應送餐機器人案例
客戶提出要求(“convey the milk to the restaurant quickly”,“return to the charger”等),機器人識別語音,根據語音直接決策任務動作和目的。例如,識別得到語音要求速度“quickly”,系統綜合感知器感知的外界障礙物擁堵程度,根據模糊推理機制得出速度目標“speed is fast”,再經過去模糊化得到任務速度的具體值(如0.5 m/s)并將其發送到應用層,機器人將按照指令速度完成任務。
然而研究中仍存在不足,系統對語音輸入的強制性限制了其任務目標識別能力:雖仍是同義任務目標但難以被識別,如果語義表達不夠標準,捕獲到的詞組不在規則集合內就會導致識別失敗。例如輸入“quickly”的同義詞“speedily,rapidly”等,由于庫涵規則只有“quickly”,系統不會識別用戶的任務目標。為此本文試圖實現語音任務目標輸入自適應環的直接性,并提高模糊自適應軟件系統對任務目標的識別能力。
本文提出的面向軟件模糊自適應的語音式任務目標識別與結構化轉換方法的總體框架如圖3所示。其中,模糊自適應軟件系統包含感知-決策-執行的自適應環,其控制模器塊基于模糊規則構造。通過自然語言處理,識別非形式化、非結構化的語音式任務目標,并將其直接作用于自適應環。

圖3 語音任務目標的識別與結構化轉換方法
語音任務目標的識別與結構化轉換方法主要包括以下關鍵步驟:文本預處理,詞法句法分析,語義關聯拓展和結構化轉換。
系統經過語音識別,得到文本形式的語音式任務目標再進行處理。首先定義任務目標的句子成分:
S=(w1w2…wn),i=1,2,…,n
(1)
其中,句子S由多個單詞wi組成。
語音指令通常是簡單句或短語,系統將語音指令轉換為文本后,首先進行預處理工作將句子分割為單獨的詞匯,為后續工作打下基礎。
分詞預處理的形式表述為:
S′=f(S),f=[(wiwi+1…)→(wi,wi+1,…)]
i=1,2,…,n
(2)
可得:
S′=(w1,w2,…,wn)
(3)
其中,f函數實現句子分詞,n為單詞個數,例如“convey the milk to restaurant speedily”,經過分詞處理后得到“convey,the,milk,to,restaurant,speedily”。
詞法分析的主要任務是詞性標注(part of speech tagging),即對詞匯按語法范疇判定其詞性進行分類并加以標注的過程。對于多義詞,一個詞可以表達多個意義,但根據具體上下文語境,可以確定其含義[13]。詞性標注的形式化表述為:
S″=f′(S′),f′=(wi|Posi),Posi∈{NN,VB,RB…}
(4)
其中,f′標注單詞wi的詞性Posi(part of speech),詞性標注為名詞NN,動詞VB,修飾詞RB等,可得:
S″=(‘w1,NN’,‘w2,VB’,‘wm,RB’,…)
(5)
例如圖4中的步驟1所示:S″=(‘convey,VB’,‘milk,NN’,‘to,TO’)。

圖4 任務目標的識別
句法分析用于對句子語法功能進行分析,確定句子的句法結構。在上一步詞法分析句子成分后,明確其之間的相互關系,進而根據其句法結構提取出關系到任務目標的關鍵成分。
用戶給出的語音式任務目標一般由關鍵成分(動作成分(多為謂語)、目的成分(多為賓語)和修飾成分)構成。任務目標中的關鍵成分決定自適應軟件執行的任務目的和要求,如執行何種任務(“express drink”),其中的修飾成分決定任務指標,如以何種速度(“quickly”)。而在模糊自適應軟件中,模糊自適應規則前件一般也由動作成分、目的成分和修飾成分組成,因此要有選擇地提取這些任務目標關鍵成分,便于下一步語義關聯拓展。
任務目標的依賴關系可形式表達為:
S?=f″(S″),f″=[(wi&wj)→Rm],m=1,2,…,n
(6)
可得到包含多個元組Wm表示的依賴關系S?:
S?=[W1,W2,…,Wn],
Wm= (‘wi,NN’,Rm,‘wj,VB’),
(Rm∈(dobj,nsubj,adv mod,det…))
(7)
其中,Wm中R表示2個單詞wm之間的關系,包括直接賓語關系dobj,名詞性主語nsubj,副詞修飾advmod,冠詞det等。例如圖4步驟2所示,著色的是詞性,連接線是詞匯之間的依賴關系。元組(‘convey,VB’,dobj,‘milk,NN’)等抽象了句子中動賓語法關系,根據依賴關系,提取得關鍵成分 (convey,milk,speedily),如圖4步驟3所示。
如圖4所示,經過以上步驟,實現對用戶語音式任務目標的識別。然而仍無法靈活地與模糊規則進行匹配。需要下一步進行語義關聯拓展進而實現結構化轉換,使得任務目標能較好地匹配模糊規則前件進而驅動軟件模糊自適應過程。
語義關聯[18]是描述2個詞語之間存在的關聯關系(包括同義關系、上下位關系、反義關系等)。在分析句法得到任務目標后,為盡可能實現語義關聯拓展并減少非必需的計算,選擇任務目標的任務關鍵成分進行語義關聯拓展。把不規則的自然語言輸入轉換成結構化的表示以更好的匹配規則,(其本質為將與A語義關聯(如、?)的任務目標等價收斂為A)如圖5所示。關聯詞匯(細字體)就會統一收斂對應規則庫中定義的詞匯(粗字體),以利于模糊自適應規則的匹配與推理。

圖5 語義關聯拓展示例
由于模糊自適應規則通常采取“if A is A1then B is B1”的形式,例如簡單的雙輸入單輸出模糊規則如表1所示。在規則1中,當語音任務目標表述食物類型是飲品以及速度目標為快時,規則設定速度為慢。

表1 模糊規則示例
拓展主要分為同義詞拓展和上位詞(上級概念與從屬概念的關系)拓展。語義關聯拓展可形式化表示為:
W′=Wm|w→(Ws,Wh)
Ws={wsim1,wsim2,…,wsimi},i=1,2,…,n
Ws={whyp1,whyp2,…,whypm},m=1,2,…,n
(8)
其中,W′為語音式任務目標中的任務關鍵成分wm拓展后的關鍵詞集。wm可以被拓展為同義詞集Ws和上位詞集Wh(wsimi為第i個同義詞,whypm為第m個上位詞)。
3.4.1 同義詞拓展
以表1中規則為例,若輸入“convey the milk speedily”,如果不經過語義關聯拓展處理,則此時系統不會匹配到任何規則。然而如圖5所示,“quickly”的同義詞是:“speedily,rapidly”等,若進行語義關聯同義拓展,可以增加規則前件匹配的靈活性,會匹配到rule 1。
3.4.2 上位詞拓展
仍以上述情景為例,為使輸入運送物品為drink的下級詞匯時可以被系統識別,將詞匯進行上位詞匯拓展。如圖5所示,“drink”包括:“cocoa,coffee,milk”等,當輸入“convey milk speedily”時,通過上位詞聯想使原任務目標被拓展,仍會成功匹配規則rule 1。
以上各步驟只以例句作為簡單示例,事實上,語義關聯詞庫是根據規則庫中的規則關鍵詞匯自動構造而成,并不局限于圖5示例。
3.4.3 結構化轉換
將提取并且轉換的任務關鍵成分(動作成分、目的成分和修飾成分)轉換為系統相統一的規則前件。若輸入:“convey this milk to the restaurant speedily”,經過上述步驟將被識別為“convey milk speedily”;隨即語義關聯等價拓展為 “express drink quickly”;再進行結構化轉換得“food type is drink and speed goal is quickly”。使得原始的語音式任務目標被轉換為與庫涵規則前件相統一的表示(如表1中rule 1)。
最后進行規則匹配:將拓展后的語音式任務目標W′與規則前件進行匹配,若成功則激活相應規則,系統進入模糊決策及后續動作環節。
根據前文提出的語音式任務目標識別與結構化轉換方法,本文設計其實現算法如下所示。
輸入識別到的原始語音式任務目標S
輸出匹配得的規則 rulei
1 S1← Tokenize (S) //對句子進行單詞分割
2 S2← Part-of-speech_tagging(S1) //詞性標注
3 S3Parser(S2) //句法分析
4 tuple← Tuple(S3)//以元組形式提取依賴關系
5 for ‘relationship’ in tuple://遍歷依賴成分
6 return keywordi∈ List(keywordi)//得到目
//標關鍵成分
7 if keywordi!= rule in Rule_Base://若匹配不到庫
//涵規則
8 set1 = synonyms(keywordi) //同義詞拓展
9 set2 = hypernyms(keywordi) //上位詞拓展
10 keywordi* = ( keywordi+set1+set2)// 輸出語
//義關聯詞集
11 trans-goal ← structuring(keywordi*)//得到結構
//化轉換的任務目標
12 if trans-goal matches ruleiin Rule_Base://匹配規
//則庫
13 return rulei//輸出匹配得到的規則
首先對句子分詞(第1行)、詞法和句法分析(第2行、第3行)取得依賴關系,進而取得任務關鍵成分(第4行~第6行),并進行語義關聯拓展(第7行~第10行),實現任務目標的結構化轉換(第11行)并匹配規則(第12行、第13行)。
在前期工作[6]中構建了語音驅動的模糊自適應送餐機器人系統。在此基礎上,根據前文提出的語音任務目標識別與結構化轉換方法,利用自然語言處理工具,對原平臺進行改進,構建支持語音式任務目標識別與結構化轉換的自適應送餐機器人原型系統VoiceGuider。
本文以Turtlebot為平臺構建了模糊自適應送餐機器人原型系統。Turtlebot是一款低成本機器人,硬件包括Kobuki底盤、Kinect傳感器等,由于其設計的大型開源機器人操作系統架構ROS[19],成為一款理想的開發和測試平臺。運行在Linux 平臺的ROS 類似于分散的進程框架,提供了一個基于操作系統之上的結構化的通信層。軟件功能有實時定位構圖、圖像處理等。
由于機器人操作系統需要Linux運行環境,因此選擇以Python作為編譯語言的NLTK,并將CoreNLP中的Parser加入到NLTK中,利用Parser提取依賴關系,由WordNet進行語義關聯拓展。其模型如圖6所示,利用語音識別工具,在語言處理功能基礎上,集成機器人原有的自適應定位、避障導航、跟隨等功能,實現語音式任務目標驅動的模糊自適應送餐機器人的平臺搭建。

圖6 模糊自適應送餐機器人原型系統 VoiceGuider
序列圖如圖7所示,描繪原型系統內部不同軟件實體之間的交互關系。

圖7 VoiceGuider軟件系統序列圖
語音識別模塊持續識別人類的聲音并發送回調給語言處理模塊。與此同時傳感器模塊持續發送信息到速度控制節點。語言處理模塊將語音式任務目標進行結構化轉換,與規則庫規則前件匹配后然后發送到決策器。決策器下達動作指令到執行器控制機器人完成所要求任務。
下面以VoiceGuider進行實驗,驗證方法是否實現語音任務目標輸入自適應環的直接性,是否提高了對語音任務目標的識別能力。
選取2臺具有模糊自適應能力的送餐任務機器人,分別命名為V1和V2。其中,V1仍然采用任務目標識別后直接匹配的方法,或稱之為任務目標未處理機器人,而V2則采用本文所提出的語音式任務目標處理方法,或稱之為任務目標識別與結構化轉換機器人,其實際情況如圖8所示。

圖8 自適應送餐機器人實物圖
在2種實驗場景下,通過對2臺機器人下達相同形式的任務目標,記錄機器人任務完成情況(實驗中不考慮語音識別失敗或錯誤的情況,即假設成功識別所有語音)。
模糊規則庫預先定義好,以速度變量為例,其隸屬度函數由5個模糊區間構成,如圖9所示(模糊自適應決策驗證部分實驗詳見前期工作[6],在此不做贅述)。

圖9 速度變量的隸屬度函數
實驗1語音輸入規則庫庫涵任務目標(庫涵指規則庫內涵蓋的規則)如表2所示,規則以動作成分(express,follow,…)、目的成分(drink,somewhere,someone,…)和修飾成分(slowly,quickly,…)疊加,隨機不重復組合查詢3×3×3=27次。(動作成分表示執行何種動作;目的成分表示任務的目的或目標;修飾成分決定任務指標,如以何種速度)。

表2 庫涵語音指令
實驗2輸入非庫涵語義關聯任務目標,任務目標來自于規則庫涵詞匯的同義詞和下級詞:例如“move to the kitchen rapidly”,“express the hot coffee slowly”,“follow me”,任務目標按照動作成分、目的成分和修飾成分,隨機不重復組合查詢100條。
通過實驗1、實驗2,驗證本文方法是否實現了語音任務目標輸入自適應環的直接性;是否提高了對語音任務目標的識別能力。
實驗1中V1、V2都對語音進行了成功處理,識別成功率達到100%(成功率=指令匹配成功數/總數),這是由于兩者都直接進行if-then規則匹配。
在實驗2中,在輸入非庫涵但語義關聯任務目標時V1匹配率為0,V2則維持在很高的識別成功率(分別為93%、89%、100%),如圖10所示。

圖10 實驗2運行結果
通過上述實驗,可以判斷:
1)由實驗1可知,V1、V2都實現了對任務目標的直接捕獲,并將其直接注入模糊自適應環驅動機器人,從而完成任務。
2)由實驗2可知,V2具有更強的任務目標識別能力,針對規則庫中未定義然而語義等價的任務目標,V2顯著提高了識別成功率;模糊自適應決策驗證部分可見前期工作[6]。
3)在實驗過程中,發現本文方法會產生誤識別。這是由于在規則過多時,語義關聯拓展會對應多個前件,導致規則匹配沖突。
本文提出一種面向軟件模糊自適應的語音式任務目標的識別與結構化轉換方法。對用戶語音描述進行句法分析后將關鍵成分提取并以元組形式化表述,把不規則的語音式任務目標轉換成類規則的結構化表示,利用語義關聯拓展降低對語音輸入的要求。通過構建模糊自適應送餐機器人進行實驗驗證,結果表明,所述方法有效實現了語音任務目標輸入自適應性,提高了系統對語音式任務目標的識別能力和系統可用性。
為克服本文方法存在的誤識別缺點,下一步計劃利用單詞之間的相似度[20]來定量計算單詞之間的語義關聯程度。在匹配到的多個規則前件發生沖突時,通過比較關聯詞的關聯程度提高方法的匹配成功率。
[1] KRUPITIAER C,ROTH F M,VANSYCKEL S,et al.A survey on engineering approaches for self-adaptive systems[J].Pervasive & Mobile Computing,2014,17:184-206.
[2] LEMOS R D,GIESE H,MULLER H A,et al.Software engineering for self-adaptive systems:a second research roadmap[J].Lecture Notes in Computer Science,2011,7475:1-32.
[3] YANG Qiliang,XING Jianchun,TAO Xianping,et al.Fuzzy self-adaptation of mission-critical software under uncertainty[J].Journal of Computer Science and Technology,2013,28(1):165-187.
[4] HAN Deshuai,YANG Qiliang,XING Jianchun,et al.FAME:a UML-based framework for modeling fuzzy self-adaptive software[J].Information & Software Technology,2016,76:118-134.
[5] YANG Qiliang,TAO Xianping,XIE Hui,et al.FuAET:a tool for developing fuzzy self-adaptive software systems[C]//Proceedings of Asia-pacific Symposium on Internetware on Internetware.New York,USA:ACM Press,2014:54-63.
[6] ZHANG Xiaobing,YANG Qiliang,XING Jianchun,et al.Recognizing voice-based requirements to drive self-adaptive software systems[C]//Proceedings of Computer Software and Application Conference.Washington D.C.,USA:IEEE Press,2016:417-422.
[7] CASSAGRANDE E,WOLDEALAK S,WEI L W,et al.NLP-KAOS for systems goal elicitation:smart metering system case study[J].IEEE Transactions on Software Engineering,40(10):941-956.
[8] DRECJSLER R,SOEKEN M,WILLE R.Formal specification level:towards verification-driven design based on natural language processing[C]//Proceedings of Specification and Design Languages.Washington D.C.,USA:IEEE Press,2012:53-58.
[9] ALKHADER Y,HUDAIB A,HAMMO B.Experi-menting with extracting software requirements using NLP approach[C]//Proceedings of International Conference on Information and Automation.Washington D.C.,USA:IEEE Press,2006:349-354.
[10] 王 聰.家庭服務機器人中文語音指令解析器的研究[D].秦皇島:燕山大學,2015.
[11] 袁樹明.基于自然語言理解的車輛行駛指令抽取[D].北京:北京郵電大學.
[12] 朱葉霜,喻 純,史元春.基于語義的英文短語檢索與搭配推薦及其在輔助ESL學術寫作中的應用[J].計算機學報,2016,39(4):822-834.
[13] POHL K.Requirements engineering:fundamentals,principles,and techniques[M].Berlin,Germany:Springer-Verlag,2010.
[14] JURAFSKY D.Speech and language processing[M].London,UK:Pearson Education India,2000.
[15] 李 生.自然語言處理的研究與發展[J].燕山大學學報,2013(5):377-384.
[16] MILLER G A.WordNet:a lexical database for english[J].Communications of the ACM,1995,38(11):39-41.
[17] MANNING C D,SURDEANU M,BAUER J,et al.The stanford CoreNLP natural language processing toolkit[C]//Proceedings of Meeting of the Association for Computational Linguistics:System Demonstrations.Baltimore,USA:ACL,2014:55-60.
[18] GRACIA J,MENA E.Web-based measure of semantic relatedness[C]//Proceedings of International Conference on Web Information Systems Engineering.Berlin,Germany:Springer-Verlag,2008:136-150.
[19] QUIGLEY M,CONLEY K,GERKEY B,et al.ROS:an open-source robot operating system[EB/OL].(2010-11-21).http://www.andrewng.org/portfolio/ros-an-open-source-robot-operating-system/.
[20] 張志昌,周慧霞,姚東任,等.基于詞向量的中文詞匯蘊涵關系識別[J].計算機工程,2016,42(2):169-174.