張龍陽 楊衛(wèi)東
(復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系 上海 201203)
自然語言是定義需求[1]最為普遍的方式,它只需要對(duì)從業(yè)人員進(jìn)行很少的訓(xùn)練。然而自然語言普遍存在歧義,且很難自動(dòng)化分析,為此研究人員提出了使用需求模板來對(duì)需求進(jìn)行限制。需求模板由若干個(gè)預(yù)定義的槽組成,將需求語句轉(zhuǎn)化為可分析的組件,減少歧義且易于自動(dòng)化分析。
對(duì)于應(yīng)用了需求模板的需求文檔,一個(gè)重要的工作就是驗(yàn)證需求語句是否符合模板。由于需求文檔可能包含大量的需求語句,人工審核需求語句是否符合模板是一項(xiàng)繁重的工作,因此自動(dòng)化分析需求語句關(guān)于模板的一致性就變得至關(guān)重要。
目前,對(duì)于需求模板一致性檢查的研究較少,RQA工具[2]提供了對(duì)于模板一致性的驗(yàn)證方法,然而其方法在術(shù)語表未定義時(shí)效果一般;Reta工具[3-4]基于文本分塊和模式匹配,在術(shù)語表未定義的情況下,取得了不錯(cuò)的效果,但是當(dāng)需求語句含有復(fù)雜的詞組時(shí),需要調(diào)用解析器來對(duì)需求語句進(jìn)行解析,時(shí)間復(fù)雜度由O(n)變?yōu)镺(n3)。
針對(duì)上述問題,本文提出了基于依存分析[5]的模板一致性檢查方法,該方法通過分析需求模板得到通用的依存結(jié)構(gòu),對(duì)需求語句進(jìn)行依存結(jié)構(gòu)分析并與通用依存結(jié)構(gòu)匹配,得出需求語句的一致性信息。
本節(jié)描述了兩個(gè)常用的需求模板,以及兩個(gè)模板的詞性和依存結(jié)構(gòu)信息。
1.1.1Rupp模板
圖1所示為Rupp模板[6],Rupp模板由六個(gè)槽組成,分別為:(1) 可選條件;(2) 系統(tǒng)名稱;(3) 情態(tài)動(dòng)詞(shall/should/will)(決定需求的重要性);(4) 所需的處理功能(分為三種不同的形式);(5) 處理功能的對(duì)象;(6) 關(guān)于對(duì)象的額外信息。
根據(jù)所需處理功能的不同,Rupp模板分為三種類型:(1) 自主需求,使用

圖2 Rupp模板需求語句示例
1.1.2EARS模板
圖3所示為EARS模板[7-8],EARS模板由4個(gè)槽組成:(1) 可選條件;(2) 系統(tǒng)名稱;(3) 情態(tài)動(dòng)詞shall;(4) 系統(tǒng)響應(yīng)。
根據(jù)可選條件的不同,EARS模板可分為六種類型:(1) 普遍需求,沒有可選條件,表明功能總是活躍的;(2) 事件驅(qū)動(dòng)需求,以WHEN開頭,由事件觸發(fā);(3) 不必要的行為需求,以IF開頭,Then在

圖4 EARS模板需求語句示例
比較Rupp模板和EARS模板,EARS模板在可選條件上提供了更多的功能,而Rupp模板在非可選條件上加了更多的限制。
依存信息是句子里單詞上的一個(gè)有向圖,表示單詞之間的依賴關(guān)系,如圖5所示。

圖5 依存結(jié)構(gòu)示例
單詞之間的依賴關(guān)系由帶標(biāo)記的有向弧表示,如root作為一個(gè)依賴關(guān)系,指向prefer,表明prefer為該句的根;prefer有一個(gè)指向I的有向弧,依賴關(guān)系為nsubj,表明prefer的名詞性主語為I;prefer有一個(gè)指向flight的依賴關(guān)系dobj,表明flight為prefer的直接賓語。
1.2.1Rupp模板依存結(jié)構(gòu)
Rupp模板的三種類型由第4個(gè)槽所區(qū)分,可通過預(yù)處理的方式,將第4個(gè)槽預(yù)處理成為只含有

圖6 Rupp模板自主需求依存結(jié)構(gòu)
需求語句的根為一個(gè)動(dòng)詞root verb,該動(dòng)詞為
1.2.2EARS模板依存結(jié)構(gòu)
EARS模板分為6種類型,6種類型通過可選條件的引導(dǎo)詞來區(qū)分,在依賴關(guān)系中,將可選條件從句都視為主句的狀語從句,這樣可以將6種需求視為同種需求來進(jìn)行依存分析,如圖7所示。

圖7 EARS模板依存結(jié)構(gòu)
需求語句的根為一個(gè)動(dòng)詞root verb,該動(dòng)詞為
本節(jié)將提出具體的需求模板的一致性檢查方法。基于自然語言處理,將需求語句進(jìn)行tokenization、句子分割、詞性標(biāo)注和依存分析。對(duì)部分出現(xiàn)詞性標(biāo)注或依存分析錯(cuò)誤的需求語句進(jìn)行適當(dāng)?shù)男拚?/p>
模板一致性檢查方案的整體流程如圖8所示。

圖8 模板一致性檢查整體流程
需求文檔是包含有多條需求語句的一份文件,首先通過Tokenization和句子分割將需求文檔分割為單條的需求語句;然后對(duì)每條需求語句進(jìn)行初步判斷,如不含有情態(tài)動(dòng)詞即為不一致;接下來對(duì)需求語句進(jìn)行詞性標(biāo)注和依存分析,得出句子的依存結(jié)構(gòu)信息,判斷句子依存結(jié)構(gòu)是否符合模板依存結(jié)構(gòu),符合則與模板一致,不符合則不一致。
圖9所示為一個(gè)需求文檔中的四條需求語句,該需求文檔應(yīng)用Rupp模板。其中,R1符合Rupp模板,R2、R3、R4不符合Rupp模板。該需求文檔經(jīng)過句子分割后,可分離出需求文檔中的所有需求語句。對(duì)R1-R4進(jìn)行情態(tài)動(dòng)詞的驗(yàn)證,可知R2不含模板情態(tài)動(dòng)詞,因此R2與模板不一致;接著對(duì)R1、R3、R4進(jìn)行詞性標(biāo)注和依存分析,可得出圖10所示的依存結(jié)構(gòu),與圖6所示Rupp模板依存結(jié)構(gòu)進(jìn)行匹配,可知R4缺少

圖9 需求文檔示例

圖10 需求語句依存結(jié)構(gòu)
方案流程中的兩大主要自然語言處理任務(wù)詞性標(biāo)注和依存分析,其對(duì)于需求語句的處理都存在一定的誤差。因此需要根據(jù)需求模板的特征對(duì)這類任務(wù)所造成的誤差進(jìn)行校正,以提高方案的準(zhǔn)確率。誤差校正有以下幾種。
詞性標(biāo)注錯(cuò)誤:(1) 將動(dòng)詞標(biāo)注為名詞。情態(tài)動(dòng)詞之后不應(yīng)該出現(xiàn)名詞,因此需要將此類名詞詞性更改為動(dòng)詞。(2) 將名詞標(biāo)注為動(dòng)詞。情態(tài)動(dòng)詞之前不應(yīng)該出現(xiàn)動(dòng)詞,因此需要將此類名詞詞性更改為動(dòng)詞。
依存分析錯(cuò)誤:(1) 動(dòng)詞現(xiàn)在分詞和過去分詞作賓語補(bǔ)足語時(shí),依存分析可能將賓語視為分詞的主語,導(dǎo)致主句缺少賓語。這時(shí)可以在賓語和分詞之間添加上that is,這樣依存分析不會(huì)將賓語作為分詞的依賴項(xiàng)。(2) 動(dòng)詞分詞位于名詞前作定語時(shí),依存分析可能將名詞視為分詞的賓語。這里可將該分詞詞性轉(zhuǎn)化為形容詞詞性。(3) 當(dāng)對(duì)部分需求語句進(jìn)行依存分析時(shí),依存分析會(huì)錯(cuò)誤地選取root(如圖11所示,依存分析將從句中的元素involves視為整個(gè)句子的根),導(dǎo)致整句依存結(jié)構(gòu)出現(xiàn)錯(cuò)誤。觀察圖6和圖7兩個(gè)需求模板依存結(jié)構(gòu),對(duì)從句限制較少,因此可以將所有需求語句的主句和從句分割成兩個(gè)文本來進(jìn)行需求模板的一致性檢查。

圖11 依存分析錯(cuò)誤示例
如圖12所示,將需求語句R分割為主句T1和從句T2,對(duì)主句T1執(zhí)行圖8所示流程驗(yàn)證是否一致,從句根據(jù)不同模板的限制進(jìn)行驗(yàn)證(EARS模板限制只能由Where、While、If、When引導(dǎo),Rupp模板無限制),如果有多個(gè)從句(EARS模板復(fù)雜需求),將所有從句分割出來,只留主句執(zhí)行圖8的流程,這樣即使從句特別復(fù)雜,也不會(huì)影響主句的依存結(jié)構(gòu)分析,保證了依存分析的正確性。

圖12 需求語句主從句分割
結(jié)合前兩節(jié)所提出的模板一致性檢查方案,最終的算法偽代碼如算法1所示。
算法1模板一致性檢查
輸入:需求文檔R。
輸出:每條需求語句一致性信息(r1,c1),(r2,c2),…,(rn,cn)。
1 tokenize(R);
2 r1r2…rn←sentenceSegment(R),c1c2…cn←FALSE;
3 FOR riIN r1r2…rn
4 IF hasNoModel(ri) THEN
5 ci=FALSE;
6 ELSE
7 wi,mi←split(ri);
8 posTag(mi);
9 correctPosMistake(mi);
10 dependencyParse(mi);
11 IF patternMatch(wi, mi) THEN
12 ci=TRUE;
13 ELSE
14 ci=FALSE;
15 END IF
16 END IF
17 END FOR
18 RETURN(r1,c1),(r2,c2),…,(rn,cn)
該算法包括以下步驟:
(1) 將需求文檔R中的元素標(biāo)記為token。
(2) 將標(biāo)記后的文檔進(jìn)行句子分割,分成n個(gè)需求語句r1,r2,…,rn,同時(shí)將每一個(gè)需求語句的一致性信息c1,c2,…,cn初始化為false。
(3) 對(duì)每一條需求語句ri單獨(dú)分析,如果不含有情態(tài)動(dòng)詞(Rupp模板為shall/should/will中的一個(gè),EARS模板為shall),則ci為false。
(4) 對(duì)含有情態(tài)動(dòng)詞的需求語句做進(jìn)一步處理,首先將需求語句分割,分割為條件從句wi和主句mi。
(5) 對(duì)主句mi進(jìn)行詞性標(biāo)注,并修正第2.2節(jié)中提出的詞性標(biāo)注錯(cuò)誤。
(6) 對(duì)從句wi的引導(dǎo)詞進(jìn)行驗(yàn)證,對(duì)主句mi進(jìn)行依存分析,并基于第1.2節(jié)中的依存結(jié)構(gòu)編寫依存語法模式,與mi的依存結(jié)構(gòu)進(jìn)行模式匹配,若匹配則為模板一致,ci為true,若不匹配,則為模板不一致,ci為false。
本節(jié)將對(duì)比依存分析方法與Reta工具在公開需求文檔上的表現(xiàn)。
3.1.1實(shí)驗(yàn)需求文檔
在以下四個(gè)需求文檔[4]上評(píng)估本文模板一致性檢查方法的有效性和效率。
(1) 文檔1為一個(gè)衛(wèi)星地面軟件的軟件需求文檔。
(2) 文檔2為OPENCOSS軟件項(xiàng)目開發(fā)的工具箱需求文檔。
(3) 文檔3由文檔1轉(zhuǎn)換而來。
(4) 文檔4為芬蘭輻射與核安全局的安全需求文檔。
表1為4個(gè)需求文檔的基本信息。

表1 需求文檔基本信息
3.1.2評(píng)估指標(biāo)
基于Precision(精確率)和Recall(召回率)來對(duì)正確性進(jìn)行評(píng)估,這兩項(xiàng)指標(biāo)從不同層面評(píng)估了方法的表現(xiàn)。
(1) Precision是方法的質(zhì)量指標(biāo),衡量所有預(yù)測(cè)正例中有多少為真正例,定義為TP/(TP+FP)。
(2) Recall是方法的覆蓋情況指標(biāo),衡量模型對(duì)正例的覆蓋情況,定義為TP/(TP+FN)。
為了綜合評(píng)價(jià)Precision和Recall,使用F-measure測(cè)量指標(biāo),F-measure指標(biāo)可以對(duì)Precision和Recall有不同的側(cè)重點(diǎn),本文將對(duì)Recall加以更多的權(quán)重,使用F2-measure,定義為3×Precision×Recall/(2×Precision+Recall)。
3.1.3對(duì)比工具
實(shí)驗(yàn)將本文方法與Reta工具進(jìn)行對(duì)比,Reta工具基于文本分塊和模式識(shí)別技術(shù)來對(duì)需求進(jìn)行一致性驗(yàn)證,在不含有術(shù)語表的情況下,取得了不錯(cuò)的結(jié)果。
3.2.1基于依存分析的一致性檢查
使用Stanford CoreNLP所提供的技術(shù)來實(shí)現(xiàn),其中Tokenization使用PTB Tokenizer,Sentence Segmentation使用Stanford Sentence Splitter,POS tagger使用Stanford POS Tagger[9],Dependency Parsing使用Stanford Dependency Parser[10],模式匹配使用Stanford CoreNLP中SemgrexPattern所規(guī)定的依存語法來設(shè)計(jì)語法模式。
SemgrexPattern是基于正則表達(dá)式的依存語法,根據(jù)圖6和圖7的依存結(jié)構(gòu),忽略其中的從句部分,可設(shè)計(jì)出如圖13所示的語法。

圖13 需求模板依存語法
從Stanford CoreNLP中加載模型、加載需求文檔,將需求文檔分割成需求語句的代碼,如圖14所示。

圖14 將需求文檔分割成需求語句
對(duì)每條需求語句,將其分割成一個(gè)主句和若干個(gè)從句,通過正則表達(dá)式的方法識(shí)別從句,代碼如圖15所示。

圖15 需求語句分割代碼
需求語句分割后,通過正則表達(dá)式匹配來驗(yàn)證從句是否有符合模板的引導(dǎo)詞,通過依存結(jié)構(gòu)模式匹配來判斷主句是否符合模板,代碼如圖16所示。

圖16 判斷主句是否符合模板
3.2.2Reta工具
基于Reta工具推薦的技術(shù)來實(shí)現(xiàn),文本分塊部分使用OpenNLP Tokenizer、OpenNLP Sentence Splitter、Stanford POS Tagger、OpenNLP Chunker,模式識(shí)別部分采用JAPE語法所編寫的語法模式。
3.3.1方案表現(xiàn)對(duì)比
分別使用依存分析方法和Reta工具對(duì)文檔1-文檔4進(jìn)行一致性檢查,兩種方法的表現(xiàn)如表2所示。

表2 方案表現(xiàn)對(duì)比
實(shí)驗(yàn)表明,依存分析方法在文檔1、文檔3、文檔4的表現(xiàn)上都優(yōu)于Reta工具,在文檔2的表現(xiàn)上,Recall和F2-measure的值小于Reta工具,而文檔2只包含110條需求語句,依存分析法召回91條,Reta工具召回98條。由此可見,兩種方案在文檔2的表現(xiàn)相差不大。
3.3.2誤差校正影響
當(dāng)方案未經(jīng)過第2.2節(jié)所述的誤差校正時(shí),依存分析方法的表現(xiàn)如表3所示。

表3 無誤差校正方案性能
通過對(duì)比表2和表3發(fā)現(xiàn),在沒有誤差校正時(shí),文檔1和文檔2的性能表現(xiàn)下降很多,這是由于文檔1和文檔2都使用了Rupp模板,而Rupp模板中存在一個(gè)
模板一致性檢測(cè)是需求自動(dòng)化分析技術(shù)的關(guān)鍵,現(xiàn)有方法要么依賴于術(shù)語表,要么忽略了需求語句中單詞之間的依賴信息,這些都限制了一致性檢測(cè)的性能表現(xiàn)。本文提出的方法對(duì)需求模板的依存結(jié)構(gòu)進(jìn)行分析,得出需求模板的通用依存結(jié)構(gòu),進(jìn)而通過模式匹配來判斷是否符合模板。該方法還結(jié)合需求模板的特性對(duì)部分詞性標(biāo)注錯(cuò)誤進(jìn)行更正,通過分割主句從句,提高了依存分析的準(zhǔn)確率。中文需求模板一致性也可通過該方法來進(jìn)行驗(yàn)證,首先對(duì)需求模板的各個(gè)槽進(jìn)行分析,得出各個(gè)槽之間的依存結(jié)構(gòu)關(guān)系,根據(jù)模板依存結(jié)構(gòu)定義相應(yīng)的依存語法,驗(yàn)證步驟和圖8相同,通過加載Stanford CoreNLP中的中文模型來實(shí)現(xiàn)自然語
言處理過程。
未來,我們將分析更多的需求語句來找出新的模型修正方案;收集需求語句訓(xùn)練詞性標(biāo)注和依存分析模型,使模型更適用于需求領(lǐng)域。