(海軍駐大連地區(qū)第一軍事代表室 大連 116000)
在信息系統(tǒng)研制過程中,軟件需求橫向可以劃分為業(yè)務需求、用戶需求和功能需求三個層次,縱向可以劃分為功能性需求和非功能性需求兩個類型。為此,人們提出了面向對象的方法、面向目標的方法和面向主體和意圖的方法等不同的需求分析方法。
非形式化需求描述,多采用自然語言或類自然語言方法描述,容易建立和理解,但定義缺乏嚴格,存在二義性;半形式化描述雖具備了結構化特征,提高了需求描述的規(guī)范性,但形式定義仍不夠嚴格,且不易推理和檢驗;形式化描述多建立在數(shù)學基礎上,具有嚴格的形式定義,便于進行推理和檢驗,但多數(shù)不易理解且難擴展[1]。
而多源異構文本需求中蘊含著大量的語義要素,它們具有不同的層次和角度的特性[2]。因此,在對文本需求的實體、屬性、關系和事件進行抽取和發(fā)現(xiàn),需要構建源異構文本需求多層次多角度語義要素模型,以適應不同場景下需求文本中語義的不同粒度與視角[3]。
因此,本文提出了基于語義提取的軟件需求分析技術,主要是在統(tǒng)一的軟件需求表示和組織框架下,進行軟件需求語義的提取。技術框架如圖1所示。
圖1 基于語義分析的軟件需求分析技術技術框架
針對軟件需求描述中存在的多層次、多角度的特點,本文提出了一種多層次多角度的需求統(tǒng)一表示和組織框架。包括三方面內(nèi)容:1)構建一個統(tǒng)一的、形式化的、規(guī)范化的功能需求描述模型;2)功能需求描述方式與非功能需求描述方式之間的轉換方法;3)核心需求描述與非形式化、半形式化以及形式化的需求描述之間的轉換機制[4]。
同領域的信息系統(tǒng)具有極高的相似性,特別是在需求和功能上,共同點更為著性。這就決定了它們的解決方案也具有穩(wěn)定性和內(nèi)聚性。通過統(tǒng)一的本體描述方法,可以將同領域的特征模型和體系結構建模有機結合。合理定義基于本體語言需求描述的領域約束,以及可操作的驗證規(guī)則,就可以借助本體與生俱來的嚴格推理能力,自動地建立和驗證其領域內(nèi)的需求描述模型。這種方法就兼顧了建模的高效性和驗證準確性。
作為一種語義相關的知識概念模型,本體涵蓋了信息系統(tǒng)領域中的對象、概念等實體及其之間的關系。本體有五個建模元素,分別是類、關系、函數(shù)、公理和實例,其概念如下[5]。
類:也可稱為概念,它可以泛指任何事物,包括事件、功能、策略和推理過程等。
關系:用于刻畫領域中概念間的交互作用,形式上通常被定義成n維笛卡兒積的子集R:C1×C2×…×Cn。基本關系包括:實例與概念間的關系、屬性關系、部分與整體的關系,以及繼承關系。
函數(shù):本體概念范疇中的一類特殊關系。在函數(shù)中,前面的元素是可以唯一決定后面的元素的,形式化地可定義為Function:C1×C2×…×Cn-1→Cn。
公理:用于表示恒真斷言。
實例:指代隸屬于某一概念的對象,代表元素。
OWL的語義表達能力極為卓越,它在處理文檔內(nèi)容和文檔其他豐富的相關信息上具有很大優(yōu)勢[4]。OWL本體中要素與本文要建立的需求模型要素是非常貼近。因此,采用OWL語言作為統(tǒng)一需求描述語言。
軟件需求分析和規(guī)約中,通常會對功能和非功能需求分而治之。將非功能需求的描述語句結構化處理后,分別列在軟件需求文檔中的對應章節(jié),是表示需求的通常做法。然而,該方法本質上對主要采用非形式化的自然語義來描述需求內(nèi)容,避免不了不一致性、二義性等問題的產(chǎn)生[6]。
為了易于展現(xiàn)概念的分解、聚合,經(jīng)常會用樹結構和表結構等結構化的方式來表示非功能需求的層次關系。面向目標的分析和建模方法,也是一種能夠深入分析、細致刻畫功能需求的建模方法[7]。這種形式化本體建模方法主要采用非功能需求框架和軟目標依存圖來建立非功能需求表達模型,基于本體建模思想對非功能需求的概念層次、屬性關系和公理化合理刻畫,并采用OWL語言構建出本體模型[8]。其本體中蘊含非功能需求的概念層次關系、以及交互關系的語義表示和推理,以此來實現(xiàn)非功能需求自動化的分析。
由于統(tǒng)一需求描述采用本體描述語言OWL,而UML需求描述可以用于作為輸出給用戶的需求形式,接下來,研究了OWL需求描述與UML需求描述之間的相互轉換。
1)UML類圖在OWL本體上的映射
UML類圖,是通過類以及類之間的關系組成,類之間的關系主要有泛化、組合、聚合、關聯(lián)和依賴等[5]。通常,UML類圖可以由(概念集合,屬性集合,行為集合,關系集合)等元素組成的四元組表示。它和OWL本體之間有很多概念上的相似或等價。例如,在UML類圖中,關聯(lián)可通過屬性表示,而在OWL中,關聯(lián)也被定義為屬性。UML類圖在OWL本體上的映射規(guī)則包括有標識符規(guī)則、屬性規(guī)則、取值范圍規(guī)則、行為規(guī)則、關聯(lián)規(guī)則、泛化規(guī)則、聚合規(guī)則、組合規(guī)則等。
2)OWL需求描述向UML需求描述的轉換
基于軟件開發(fā)領域的知識范疇,UML元模型具備緊密聯(lián)系用戶需求和軟件設計的能力[5]。這實質上是對應用本體概念的實現(xiàn),以及概念關聯(lián)在面向對象軟件設計方法上的映射[8]。為了實現(xiàn)從需求模型到面向對象模型的轉變,需要將面向對象模型中對象、類和關聯(lián)等概念從基于應用本體的需求模型中合理提取。OWL需求描述向UML需求描述的轉換也有詳細和嚴格的規(guī)則[5]。
3)統(tǒng)一需求描述與面向方面文檔需求描述的相互轉換
本體需求描述到面向方面文檔需求描述的相互轉換主要包括兩個方面:第一個方面是從需求描述模型結構本身開始,通過對本體需求描述模型和面向方面文檔需求描述模型進行深入比對,找出模型上聯(lián)系和差異,并進行轉換;第二個方面是從最初的建模條件出發(fā),分析兩個模型建模思想,從中找出兩者的關聯(lián),并進行轉換。
在多層次多角度的需求統(tǒng)一表示和組織框架,通過定義句型模式規(guī)則集,來嚴格規(guī)范需求結構化描述。在對需求文本進行語義分析時,根據(jù)匹配到的句型進行語義分類。并基于前期識別出實體類,實體類的屬性和操作,角色和用例[9]等建模元素,形成需求結構化描述。
面向多源異構的文本需求,本文提出了多層次多角度的實體知識抽取技術,主要包括1)基于結構化需求的實體抽取與初始需求實體庫構建;2)基于半監(jiān)督學習和模板匹配的非結構化需求中實體抽取與需求實體庫補全;3)基于半監(jiān)督學習的Bi-LSTM(雙向長時短時記憶循環(huán)神經(jīng)網(wǎng)絡)與CRF(條件隨機場)[10]結合的需求實體抽取模型三部分內(nèi)容。多源異構文本需求多層次多角度實體抽取技術總體技術框架如圖2所示。
1)基于結構化需求的實體抽取與初始需求實體庫構建
信息系統(tǒng)的研制過程中,需求規(guī)格說明等軟件開發(fā)文檔是遵照標準或格式來編制,其部分需求描述具有結構性??芍苯訌倪@些結構化需求文本中獲取實體,并構建初始需求實體庫。
圖2 多源異構文本需求多層次多角度實體抽取技術總體架構
2)基于半監(jiān)督學習和模板匹配的非結構化需求文本中實體抽取與需求實體庫補全研究
初始需求實體庫雖然準確率較高,但是由于大量需求的描述不具有結構性,導致需求實體覆蓋率低,不能自動提取。通過采用1)中的初始需求實體庫為半監(jiān)督種子,基于半監(jiān)督學習和模板匹配的非結構化需求文本中需求實體的自動抽取,對需求實體庫進行補全。
基于半監(jiān)督學習和模板匹配的非結構化需求文本中實體抽取算法如下:
算法1:需求實體自動抽取與需求實體庫補全算法
輸入:初始需求實體庫E,非結構化需求文本C
輸出:需求實體
步驟1:遍歷所有非結構化需求文本數(shù)據(jù)集C,獲取符合頓等模式的所有需求描述語句集合S
步驟2:foreachsi∈Sdo
步驟3: 抽取si中符合頓等模式的同類詞集合T
步驟4: foreachti∈Tdo
步驟5: iftinot in E do
步驟6: addtito E
步驟7: end if
步驟8: end foreach
步驟9:end foreach
3)基于半監(jiān)督學習的Bi-LSTM與CRF結合的需求文本中實體抽取模型研究
前面兩種方法需要人工參與,其覆蓋率提升緩慢。對此,采用需求實體庫中的實體作為半監(jiān)督學習的種子,對多源需求文本進行少量標注,構建Bi-LSTM與CRF方法結合的實體抽取機器學習模型,實現(xiàn)多源需求文本中的需求實體進行自動識別和抽取。
首先,利用詞向量作為輸入,使用Word2vec技術和CBOW(Continue Bag of Words)方法,對需求文本數(shù)據(jù)集進行字向量學習,具體如下:
其中,wi是需要預測的字,wc是字wi的該次訓練中的上下文集合,p(wi|wc)是已知字wi的上下文wc的條件下獲得字wi的概率,h的表示如下:
對此,整個需求實體庫的字向量訓練目標函數(shù)如下:
采用負采樣技術對字向量進行訓練。訓練完成詞向量后,利用需求實體庫中的實體作為半監(jiān)督學習的種子,使用遠程監(jiān)督方法,對需求文本進行自動標注。
基于Bi-LSTM(雙向長時短時記憶循環(huán)神經(jīng)網(wǎng)絡)與CRF(條件隨機場)方法結合的實體抽取機器學習模型整體框架如圖3所示。
圖3中模型的第一層是look_up層,并利用訓練好的一個句子x的字向量(Vi=Rd,d是字向量的維度)作為輸入。
第二層是雙向LSTM層,對look_up層輸入的數(shù)據(jù) (V1,…,Vn)進行自動特征提取。其中,正向LSTM 輸出(f1,…,fn) ,反 向 LSTM 輸 出(b1,…,bn)。對正反兩兩的LSTM輸出單元進行按位置拼接形成C=(f1⊕b1,…,fn⊕bn),C∈Rn×2d,并執(zhí)行Dropout技術,并執(zhí)行一個線性操作將2d維轉為K維,記為:P=(p1,…,pn)∈Rn×K,pi∈RK。
第三層是CRF層,將pi∈RK的每一維作為該字分到哪一個標簽下的一個打分。CRF層的參數(shù)是一個(K+2)×(K+2)的轉移矩陣A,Aij表示從第i個標簽轉移到第j個標簽的轉移得分。那么一個句子的標簽序列y=(y1,…yn)對于句子序列x=(x1,…xn)打分為
對得分使用Softmax得到歸一化后的概率:
模型在訓練時,目標函數(shù)使用最大化上述公式的對數(shù)似然函數(shù):
當模型訓練完成后,采用動態(tài)規(guī)劃的Viterbi算法來進行測試和預測:
圖3 基于Bi-LSTM與CRF方法結合的需求實體抽取機器學習模型整體框架示意圖
通過基于Bi-LSTM與CRF方法結合機器學習模型可以抽取大量的需求實體,進而可以對需求實體庫進行實體的補全。
需求屬性抽取的目標是從多層次多角度的數(shù)據(jù)源中采集需求實體的屬性信息,實現(xiàn)對實體知識的整體勾畫,為需求實體關系的抽取、需求知識的融合、表達提供基礎和實現(xiàn)的載體[11]。而實體屬性可以看作實體與屬性值之間的一種名詞性表述關系。實體屬性的抽取可看作是一種特殊的關系抽取。
多源異構需求文本的屬性抽取可以從兩個方面來開展研究:1)直接屬性抽取;2)基于關聯(lián)語義鏈的語義屬性抽取。直接屬性抽取是利用數(shù)據(jù)挖掘等技術,從不同來源的結構化、半結構化和非結構化的需求文本中抽取實體屬性知識?;陉P聯(lián)語義鏈的語義屬性抽取則主要利用實體的關聯(lián)語義鏈,抽取與實體高度關聯(lián)的語義詞語作為屬性。
對于結構化、半結構化需求文本,利用結構信息抽取出實體對應的屬性候選,然后利用關聯(lián)規(guī)則挖掘Apriori算法,選取置信度高的候選作為實體對應的屬性。對于非結構化需求文本,利用句法分析對需求文本進行處理,利用實體識別結果、句法分析結果和屬性詞典產(chǎn)生每個實體對應的屬性候選,然后融合句法語義特征、候選屬性本身的語義特征、候選屬性與實體間的相對位置特征等多種特征來對每個候選屬性進行打分,分值高的屬性候選即為抽取結果。
需求的關系包括:需求實體或屬性的分類層次關系、部分-整體關系、相似關系、互斥-協(xié)同等抽象關系以及屬性關系等。其中屬性關系可以直接通過屬性抽取的方法得到,而部分-整體關系和分類層次關系可以歸納為需求實體或屬性的is-a關系。因此選取以下面三種具有代表性的需求實體或屬性間的關系進行關系抽取的研究:is-a關系、相似關系、互斥-協(xié)同關系[12]。
采用基于實體注意力的深度神經(jīng)網(wǎng)絡實體關系抽取模型,來抽取需求實體的關聯(lián)關系。并借助語義信息分析技術,預測需求實體間語義關系的類別,從而達到抽取多源異構文本中實體和關系的目的。具體來說,首先采用雙向LSTM對需求實體所在的文本的上下文進行建模,隨后利用實體注意力模型對辨別語義關系過程中起不同作用的語義特征分配不同權重,然后將不同需求實體相關特征的計算結果通過softmax歸一化映射為每一類語義關系對應的概率,模型的參數(shù)通過梯度下降算法進行優(yōu)化。
針對需求描述的不確定性和語義表達多樣性,通過定義需求句型模式規(guī)則集,來規(guī)范需求結構化描述。對需求文本進行語義分析時,根據(jù)匹配到的句型進行語義分類,并基于前期識別出實體類,實體類的屬性和操作,角色和用例等建模元素,形成需求結構化描述[6]。
然后,利用模式匹配的方法,把從原文本中抽取到的句型模式和XML的結構相結合起來,自動化地生成需求條目。將本技術拆解為以下三個主要模塊來實現(xiàn):1)基于XML的句型模式規(guī)則集的定義;2)基于有監(jiān)督機器學習方法的句型自動發(fā)現(xiàn);3)基于模式匹配的語義分析。下面將詳細解析每個模塊使用的技術與方法。
1)基于XML的句型模式規(guī)則集的定義
XML是一種可拓展標記語言,它是一種具有結構性的標記語言,提供統(tǒng)一的方法來描述結構化數(shù)據(jù),具有強大的描述能力與靈活的應用場景。
通常來說,需求主要描述了功能、性能、可靠性、出錯處理、接口等方面的要素。而用戶在對這些特定方面的描述常常會使用一些特定的語法結構,如用戶在描述性能需求時通常會使用類似“XXX功能的響應時間應在XXX毫秒之內(nèi)”的語句??筛鶕?jù)用戶需求,定義一套句型模式規(guī)則集,用于后續(xù)的語義分析和需求結構化描述的生成,并采用XML來結構化地存儲被提取的需求條目。
2)基于有監(jiān)督機器學習方法的需求句型自動發(fā)現(xiàn)
對于給定的需求文本,通過文本句子中每個語素之間的聯(lián)系,構建出語義樹,以實現(xiàn)自動化地分析出句子的句型。在3.1中,已經(jīng)將文本中的關鍵詞提取出來,接下來就需要進一步分析每個句子,獲取句中關鍵詞間的關系。
一般可將關系抽取技術劃分為無監(jiān)督、半監(jiān)督和有監(jiān)督等三種學習方法[12]。由于軟件需求文本中,原始數(shù)據(jù)往往是雜亂、弱邏輯化的文本,使用半監(jiān)督和無監(jiān)督的方法聚類的提取方法效果較差,而有監(jiān)督的學習方法能抽取更有效的特征,從而獲得更高的準確率和召回率。基于有監(jiān)督機器學習方法的需求句型自動發(fā)現(xiàn),主要步驟如圖4所示。
圖4 基于有監(jiān)督機器學習方法的需求句型自動發(fā)現(xiàn)算法
3)基于模式匹配的語義分析
模式匹配起初是一種用于進行字符串匹配的簡單算法。給定兩個字符串:其中,匹配子串為“ab”,被匹配的母串為“abbaabcdeeefffab”。從母串中找出所有與子串相同的部分,就是模式匹配的主要工作,其目的尋找母串和子串之間存在的映射關系。在邏輯層面,也可以將它理解為語義關系的獲取。
前期通過基于有監(jiān)督機器學習方法的需求句型自動發(fā)現(xiàn)方法,得到了需求句型模式串后,進一步采用基于規(guī)則的模式匹配方法,對軟件需求文本進行語義分析。這些需求句型模式串被提取出,并以XML樹形結構的來表示,并融入包括數(shù)據(jù)類型、成員名稱以及數(shù)據(jù)結構等信息,用于對模式匹配全過程的協(xié)同控制。將所有可能的樹形結構作為模式匹配中的文本串,進行多次對模式進行遍歷匹配,匹配結果中效果最好的作為最終的提取結果,并同樣以XML的形式結構化地存儲到中間數(shù)據(jù)庫中,形成基于語義分析的需求分析結果。
針對信息系統(tǒng)開發(fā)過程中面臨的需求變化頻率高、人工提取需求效率較低等問題,本文設計多層次多角度需求統(tǒng)一表示和組織框架,實現(xiàn)需求的統(tǒng)一形式化描述以及與其他描述方法之間的轉換,在此基礎上通過實體知識抽取、屬性知識抽取、多樣性關系抽取和基于模式匹配的需求語義分析技術的實現(xiàn),最終完成了基于多層次多角度語義分析的需求提取技術的構建,為信息服務系統(tǒng)的分析、設計、開發(fā)、測試和維護的全流程提供有力支撐。