軟件缺陷知識庫的特定命名實體識別

軟件缺陷知識庫的特定命名實體識別

論文摘要:

軟件的Bug是在軟件開發和維護過程中無法避免的問題,為了能夠更有效地管理軟件Bug,通常使用Bug追蹤系統來記錄、管理和追蹤每個項目的Bug。Bug知識庫蘊含的豐富信息為建立以實體為中心的知識庫提供了可能性,以有助於理解和修復軟件Bug。現有的命名實體識別系統只適用於結構化、形式化、書寫良好的文本,由於其語法結構清晰,拼寫錯誤少,從而能夠直接用於Bug領域的特定命名實體識別。而對於Bug數據,它們通常為無固定格式的文本,並且混合多種語言甚至程序代碼、縮寫和軟件特定詞彙。在這篇論文中,我們總結了Bug實體的特性,提出了一種面向Bug實體的分類方法,基於2個開源項目(Mozilla和Eclipse)構建了一個基準數據集。在此基礎上,我們利用條件隨機場(CRF)模型和詞嵌入技術,提出一種Bug特定的命名實體識別方法,稱之為BNER,我們使用一個實證研究評估了BNER方法的準確度,結果顯示我們構建的基準數據集能夠適應於Bug特定的命名實體識別任務,並且BNER方法在交叉項目的命名實體識別任務上行之有效。

研究背景:

(1) Bug知識庫的Bug數據

如今Bug追蹤系統被廣泛用於軟件項目中存儲和管理Bug數據,如Bugzilla,隨著軟件項目的開發,這些Bug追蹤系統已經累積了大量的Bug數據。截止到2017年12月,Bugzilla系統中光Mozilla和Eclipse就已經分別有734000和2604000篇Bug報告。Bug報告通常包含:標題、描述、評論、附件、重要性、報告者、委派者(即修復者)等其他多個特徵。其中,標題是Bug的簡要描述,而描述則是Bug的詳細信息。評論包含了對於該Bug報告的自由討論記錄。為保證實體分類的準確性,我們僅研究Bug報告中根本原因可識別的已修復Bug及其相關的提交記錄。我們從Mozilla和Eclipse中分別隨機採樣了4000篇Bug報告和400篇報告,並且抽取其中的標題、描述、評論、產品和組件等特徵用於構建我們的數據集。我們人工地嘗識別這些採樣後的Bug報告,發現了以下問題:

a) 標題和描述通常使用"when","where","what","how"等詞;

b) 大部分命名實體識別方法能夠處理高質量的文本,即結構化、形式化、書寫形式良好的文本,而Bug數據缺乏上述特徵,反而混合了多種語言、程序代碼、縮寫等,導致傳統命名實體識別方法在此類數據上的識別困難。

(c) 隨著軟件的發展,開始出現更多在移動端的Bug,並且出現了大量移動端詞彙,所以我們新增一類Bug為“移動端通用類”。

(d) 此外,在Bug的發現過程中,通常包含許多測試代碼,因此我們將該類實體也統一分為“測試通用類”

(2) Bug分類

在軟件Bug知識庫中,有很多不同類型的Bug,一些追蹤系統出於不同的目的提供了Bug的分類方法。經過調研發現,已有的Bug分類方法不能直接用於Bug實體的分類任務。組件是定位軟件Bug的常用屬性,其對於每個Bug報告都是唯一的,並且在Bug追蹤系統中,該屬性還被用於檢索Bug。因此,在人工的實體標註過程中,該屬性是有效的參考信息,為適應於不同類型的軟件,我們將組件屬性分為以下7個類別:

· 核心類:核心方法的實現錯誤,如循環錯誤和變量錯誤;

· 界面類:界面顯示錯誤;

· 網絡類:網絡環境和網絡通信問題;

· I/O類:輸入輸出處理錯誤;

· 驅動類:設備驅動問題;

· 文件系統類:文件系統差異問題,如exFAT和寫時拷貝的問題;

· 硬件類:硬件架構問題。

(3) 條件隨機場(CRF)

對於自然語言文本,實體是基本的信息單元,包含了文本的主要信息。命名實體識別(NER)技術便是識別實體,判斷文本是否屬於一個實體,並且將其劃分到特定類的過程。NER過程被用於很多自然語言處理任務中,如知識圖譜,QA系統和機器翻譯任務。NER方法通常被分為兩大類:基於規則和基於統計方法。基於規則方法主要用於識別通用實體,如人名、地名、機構名等。而基於統計的方法,則需要更大數據集,但是不需要專業知識。CRF作為最可靠的序列標註方法之一,能夠很好地用於Bug特定命名實體識別任務。在我們的方法中,使用了基於馬爾可夫依賴的線性鏈式CRF模型,CRF模型通過輸入一個自然語言序列X,來預測一個狀態序列Y,其中X為觀測值,而Y則為隱含變量值。特定地,在我們的任務中使用了一個主流的CRF工具集:CRF++-0.58。

(4) 詞嵌入

詞嵌入廣泛用於自然語言模型和NLP的特徵提取任務,其優勢在於相似的詞經過嵌入後仍然保持更近的距離。在我們的方法中,我們使用word2vec模型,考慮到Skip-gram模型在生僻字上的更優表現,在該論文中,我們使用Skip-gram模型來構建語義特徵向量。

BNER方法:

(1) 數據集構建:

a) 構建數據集:

首先,對Bug報告進行數據預處理,即對文本進行分詞、詞性標註和人工標註,並構建基準數據集。由於當前沒有在Bug數據上的NER,因此我們首先構建了一個基準數據集,並且抽取了Bug報告中的文本元素作為主要的NER數據來源,之後採用人工標註的方式,對Bug報告中的實體進行標註。

(b) 數據預處理

在獲得Bug數據集後,便進入與訓練過程,該過程使用NLTK包進行分詞和詞性標註任務。並且我們修改了NLTK中的正則表達式參數來更好地適配Bug特定實體所具有的聯合結構的匹配。如“about:memory”便是Firefox的內置頁面地址。我們沒有去除停用詞,因為停用詞將語義鏈和上下文環境也同樣分割。

(c) 人工實體標註

我們使用一種基於Web的標註工具:Brat,來進行人工實體標註任務。在標註過程中,使用IOB2格式,即B (begin), I (inside) and O (outside)的格式。例如"Junk characters"是一個含有兩個詞的實體,屬於界面類。根據該標註格式,"Junk"是用B-GUI標註的首詞,而"characters"則是用I-GUI標註的第二個詞,B-和I-表示文本塊的開始和內容部分,而其他無具體意義的實體外的詞,則被標註為O-,如"the"。

根據之前的論述,整個處理過程被分為兩部分:類別定義和人工標註。我們定義了Bug實體的7大類,上述類別,均通過我們實驗室的老師和已畢業學生對其進行定義,其在使用Bug追蹤系統和Bug知識庫挖掘上都有豐富經驗。此外,我們首先利用4中已有的分類方法對實體進行分類,並對不同結果的分類盡心個討論,以確定最終確定的分類,保證Bug數據分類的質量。之後,再對實體進行人工標註,再標註過程中,參考GitHub、維基百科和官方網站等數據源,來處理難標註的實體,並且使用二次標註,當標註結果前後不一致時,則經過討論再最終確定實體的標註結果。

(2) 特徵提取

a) 文本特徵

在NER系統中,文本特徵是一個針對當前詞的上下文窗口,在我們的工作中,我們使用CRF模型作用於不同大小窗口:±1至±5詞大小。經過實驗交叉驗證,±1的窗口大小具有更好的實驗效果。然而,我們±2到±5的窗口大小上並未發現任何明顯的不同,因此,最終我們選擇使用±2作為最終的窗口大小。

b) 專有詞特徵

在特定的領域,有特定的專有詞,如公共領域的人名、地名等,為此,我們構建了一個軟件領域的新專有詞典。該詞典通過使用GitHub Awesome Lists, Stack Overflow, Wikipedia和其他軟件官方數據構建。

(c) 拼寫特徵

拼寫特徵反映了當前詞的屬性,在Bug報告中,有些詞含有特定的結構,我們僅考慮以下幾類特殊情況:是否首字母大寫或全部大寫,是否含有點,是否包含冒號。並且檢查其後綴是否匹配軟件專有詞表中的格式,如識別組件,若含有數字,則檢查數字是否含有特殊意義,如最大數字邊界。

(d) 詞嵌入特徵

詞嵌入特徵包含了實體的未標註的信息(即語義信息)並且根據周圍詞建模了實體的上下文信息。我們使用詞嵌入方法,提取實體的句法和語法信息,它們代表了Bug報告的主要內容特徵。我們使用word2vec從大量的Bug報告中訓練得到詞向量表示,並且使用詞向量採用k-means聚類算法將詞分為1024個類別,用於支持實值運算,而對於未定義的類別,採用“其他”標註。

(3) CRF學習

在我們的工作中,使用上述語言特徵,基於CRF的BNER方法來訓練一個機器學習模型,來識別Bug特定實體,並使用BIO格式將實體標註為上述定義的實體類別。

實證研究

(1) RQ1:我們的方法是否能夠在我們的新數據集上有效地識別實體?

為進行NER任務,在BNER方法中,我們設計了上述基本特徵、語義特徵、專有詞特徵、拼寫特徵和嵌入特徵,這些特徵構成了識別Bug實體的關鍵元素,所以我們首先需要評估這些不同特徵對於CRF方法的影響。

(2) RQ2:我們的BNER方法是否能夠在交叉項目上進行有效的NER?

BNER被用來在我們的Bug知識庫中識別Bug特定實體,然而,有時候我們使用BNER檢索Bug時,Bug數據本身是不可靠或特徵不足,這時候我們需要使用交叉項目的數據集上對BNER進行驗證。所以我們需要判斷是否BNER方法在交叉項目的軟件Bug特定實體識別上的有效性。

我們在Mozilla和Eclipse兩個項目上,構建了一個全新的數據集,並且使用人工標註的方式獲取到了標籤。在對模型評估時,採用了F1指標作為評估標準:

軟件缺陷知識庫的特定命名實體識別

為回答RQ1,評估BNER方法在不同特徵上的有效性,我們首先使用基礎特徵,即詞和詞性特徵,來訓練CRF模型,然後將基礎特徵和拼寫特徵和專有詞特徵融合再次訓練,最終結合嵌入特徵來訓練,每次都使用10折交叉驗證對模型進行模型選擇和驗證。

為回答RQ2,評估BNER在交叉項目數據集上的表現,我們從Mozilla和Eclipse中隨機選擇100條未標註的Bug報告作為測試數據。再利用已標註的數據,分別在Mozilla數據和Eclipse數據上分別訓練模型,並利用測試數據測試。最後再將未標註數據混合,形成交叉項目數據集,並重新利用已標註數據重新訓練CRF模型,並利用交叉項目數據集測試,來判斷其結果是否相同,以評估其再交叉項目數據集上的表現。

實驗結果顯示,當僅使用基礎特徵時,BNER達到的F1值為68.29%,結合拼寫特徵為73.03%,結合專有詞特徵為80.32%,結合詞向量特徵為86.54%,結合詞聚類特徵為87.72%。數據說明,使用詞嵌入特徵能夠有效提升有監督CRF的精確度。而當使用詞聚類特徵時,能夠有效地提高模型的召回率。

軟件缺陷知識庫的特定命名實體識別

圖中顯示了模型在不同項目上的不同類別上的F1值,而表中則顯示了其具體的召回率及準確度值。


軟件缺陷知識庫的特定命名實體識別

上述結果均證明,BNER僅使用基本特徵時表現不佳,而其他特徵則能夠很好地提升模型的準確度,並且拼寫特徵能達到不錯效果,特別是當實體為數字時。而使用專有詞特徵及詞向量特徵,均能提升模型性能,並且對模型新年有較大影響和提升,這便回答了RQ1的問題,說明不同的特徵對模型具有不同程度的影響。

在交叉項目數據集的實驗中,數據集和詞嵌入都來自不同的項目,雖然所有的數據均來自於Bug報告,但仍然有很多詞或實體有不同的詞頻,因此影響NER效果。實驗數據顯示,在Mozilla數據集上訓練的模型,在Eclipse測試集上使用詞向量特徵的F1值為79.76%,使用詞聚類特徵為78.47%,而在Eclipse數據集上訓練的模型,在Mozilla測試集上使用詞向量的F1值為75.16%,而使用詞聚類特徵為74.71%。

從下表中可以看出,在使用詞向量之後,分別能達到17%和14%的性能提升。而使用混合數據訓練後,能達到7.5%的提升。


軟件缺陷知識庫的特定命名實體識別


上述數據證明,BNER模型在交叉項目數據集具有良好表現。

致謝

本文由南京大學軟件學院2018級碩士鄒智鵬翻譯轉述。

感謝國家重點研發計劃(2018YFB1403400)和國家自然科學基金(61690200)支持!


分享到:


相關文章: