










收稿日期:2022-05-14;修回日期:2022-07-06" 基金項目:科技部高端外國專家引進計劃資助項目(G2021186002L);四川省科技計劃資助項目(2022JDGD0011);西南民族大學中央高校基本科研業務費專項資金資助項目(2021NYYXS44)
作者簡介:曾方(1995-),男,重慶忠縣人,碩士研究生,主要研究方向為軟件缺陷、日志重復檢測;謝琪(1983-),女(通信作者),四川成都人,副教授,碩導,博士,主要研究方向為服務計算、深度學習、日志重復檢測(qi.xie.swun@gmail.com);崔夢天(1972-),女(蒙古族),內蒙古烏蘭浩特人,教授,碩導,博士,主要研究方向為可信軟件、復雜系統、軟件缺陷預測.
摘 要:為了更有效地獲得缺陷報告的非結構化信息的特征,提出一種D_BBAS(Doc2vec and BERT BiLSTM-attention similarity)方法,它基于大規模缺陷報告庫訓練特征提取模型,生成能反映深層次語義信息的缺陷摘要文本表示集和缺陷描述文本表示集;利用這兩個分布式的表示集計算出缺陷報告對的相似度,從而得到兩個新的相似度特征;這兩個新特征將與基于結構化信息生成的傳統特征結合后參與重復缺陷報告的檢測。在著名開源項目Eclipse、NetBeans 和Open Office的缺陷報告庫上驗證了D_BBAS方法的有效性,其中包含超過50萬個缺陷報告。實驗結果表明,相比于代表性方法,該方法的F1值平均提升了1.7%,證明了D_BBAS方法的有效性。
關鍵詞:重復缺陷報告;BERT模型;Doc2vec模型;BiLSTM-attention神經網絡
中圖分類號:TP311.53"" 文獻標志碼:A
文章編號:1001-3695(2022)12-033-3736-07
doi:10.19734/j.issn.1001-3695.2022.05.0241
Duplicate bug report detection combining D_BBAS method
Zeng Fang,Xie Qi,Cui Mengtian
(Southwest Minzu University,Chengdu 610041,China)
Abstract:In order to obtain the features of unstructured information of bug reports more effectively,this paper proposed a D_BBAS (Doc2vec and BERT BiLSTM-attention similarity) method,which trained a feature extraction model based on a large-scale bug report library to generate a bug summary text representation set and a bug description text representation set that could reflect deep semantic information.Then,it used these two distributed representation sets to compute the similarity of bug report pairs,thus obtaining the two new similarity features.It combined two new features with the traditional features generated by structured information to participate in the detection of duplicate bug reports.This paper verified the effectiveness of the D_BBAS method on the bug report repositories of well-known open-source projects Eclipse,NetBeans and Open Office,which contained more than 500 000 bug reports.The experimental results show that compared with the representative methods,the D_BBAS method improves the F1 value by 1.7% on average,which proves the effectiveness of the method.
Key words:duplicated bug report;BERT;Doc2vec;BiLSTM-attention neural network
0 引言
在大型軟件開發環境中開發人員依靠缺陷報告來完成修復,缺陷跟蹤系統的目的是用于協調和管理大型軟件開發環境中的缺陷檢測和缺陷修復。缺陷報告的詳細程度存在不一致性,這是因為缺陷報告源自不同的記錄者,如開發人員、測試人員和一般用戶[1],即不同的軟件用戶或者軟件維護人員可能會對同一缺陷提交多份缺陷報告,將導致軟件維護的成本增加。所以對于每一份新提交的缺陷報告,首先需要判斷這個缺陷是唯一的還是已報告過的,而包含已報告缺陷的報告則稱為重復缺陷報告。據有關統計[2],2018年MapReduce開源項目中含有的重復缺陷報告占所有缺陷報告的比例達到13.9%。Mozilla Core、Firefox、Eclipse Platform中含有的重復缺陷報告比例更高,分別達到了21.8%、30.9%、16.9%。由此可見,在缺陷報告庫規模日益增大的情況下,自動化重復檢測過程的解決方案對于軟件的管理成本和維護成本有重要意義。
通常,缺陷的分類過程可分為理解、選擇和糾正三個階段[3]。對于檢測重復缺陷報告,理解和選擇缺陷報告是最關鍵的任務。缺陷報告主要由兩種屬性構成:a)結構化屬性,是比較固定化的信息,例如缺陷發生的時間、缺陷發生時軟件的版本等;b)非結構化屬性,則是由報告提交者按照個人語言習慣而填寫的自然語言信息,即摘要和描述。現有的研究主要通過對這兩種屬性分別提取特征并配合機器學習算法來訓練分類模型。在利用非結構化屬性來檢測重復缺陷報告上,Lazar等人[4]提出的D_TS(detection using text similarity)方法就取得了不錯的效果,D_TS方法通過對結構化屬性多樣化組合從而提取了25種特征,再配合隨機森林等機器學習算法構建分類器模型。曾杰等人[5]基于D_TS方法,利用Doc2vec模型[6]訓練并提取大規模缺陷報告集的非結構化屬性(摘要和描述)的特征,并與D_TS方法的25種特征融合后共同用于重復缺陷報告的檢測,取得了更好的檢測效果,本文在文獻[5]方法的基礎上,為了進一步改進對摘要文本和描述文本的特征提取效果,提出了一種D_BBAS方法,分別利用Doc2vec模型和BERT BiLSTM-Attention模型訓練和提取描述文本特征以及摘要文本特征。這兩種分別包含描述和摘要的深層次語義信息的新特征,將與非結構化屬性特征融合并參與重復缺陷報告的檢測。本文方法在公開的大規模重復缺陷報告數據集[7]上進行了測試,并分別與D_TS方法和文獻[5]方法進行比較,驗證了本文方法的有效性。
1 相關工作
目前重復缺陷報告的檢測任務可以利用結構化屬性和非結構化屬性,在此基礎上又可以分為信息檢索方法和機器學習/深度學習方法。結構化屬性包括各種分類字段信息,如產品(product)、組件(component)、優先級(priority)、缺陷嚴重程度(bug severity)、解決方案(resolution)、缺陷狀態(bug status)和版本(version)等。非結構化屬性是由自然語言表述的文本信息,通常從摘要和描述等字段中提取以生成文本文檔;除了單獨使用外,文本信息和分類字段信息也可以混合使用,在某些情況下還可以附加堆棧跟蹤信息或日志執行信息等。
1.1 基于信息檢索的重復缺陷報告檢測。
在重復缺陷報告檢測的早期研究中,Runeson等人[8]使用基于詞袋(bag of words)模型的文檔特征向量來表示缺陷報告,并利用報告向量之間的余弦相似度來判斷內容相似度,從而找出候選的重復缺陷報告。在這種方法中詞袋模型的主要缺點是忽略了單詞所處位置的上下文,并且沒有全局考慮詞頻的影響。雖然準確率較低,但它仍然是一種簡單且成本低廉的方法。
Sun等人[9]使用基于逆文檔頻率(inverse document frequency,IDF)的特征向量來學習缺陷報告中所有單詞的權重,然后利用支持向量機(SVM)訓練并完成重復性判別。該方法的缺點是語料庫僅考慮了摘要和描述字段。在Eclipse、Firefox和Open Office三個數據集的評測結果顯示,該方法的準確率介于50%~70%。后續,Sun等人[10]又提出了一種基于BM25F(best match 25 models with fields)算法[11]的檢索方法REP,進一步包含了優先級、缺陷嚴重程度等多個分類字段域的信息。該方法支持長文本查詢,并通過隨機梯度下降學習權重。該方案在Eclipse、Open Office和Mozilla數據集中實現了68%~72%的準確率。
Wang等人[12]提出將缺陷報告的自然語言信息和非自然語言信息分別計算兩個相似性分數,從描述字段、堆棧跟蹤和日志中提取的自然文本和非自然文本,通過結合詞頻和逆文檔頻率(team frequency-inverse document frequency,TF-IDF)對它們進行向量化,并計算余弦相似度來檢索重復項。在檢測Eclipse和Firefox數據集中的重復數據時,它們的準確率分別達到了71%和82%。Nguyen等人[13]將BM25F與潛在狄利克雷分布LDA(latent Dirichlet allocation)相結合,LDA生成的特征向量是缺陷報告中主題的概率分布。這是一種基于共享主題來表示重復項的主題模型方法,可以用于計算缺陷報告之間的主題分布相似度。該方法在Eclipse、Open Office和Mozilla數據集中檢測效果良好,準確率約為80%。董美含[14]在使用LDA進行主題建模的基礎上,以動賓短語為關鍵詞過濾掉重要程度較低的文本信息,再進行重復缺陷報告檢測。范道遠等人[15]則使用潛在語義索引(latent semantic indexing,LSI)算法對缺陷報告的文本信息進行主題建模,該方法比起LDA的優點是計算簡單快速,但只適用于文本規模較小的場景。
Aggarwal等人[1]使用從軟件工程書籍和技術文檔中提取的特定詞匯創建了一種上下文預測方法,通過該方法生成了更豐富的語料庫,然后再結合BM25F模型計算缺陷報告之間的相似度。程序調用方法的序列信息也被用于重復缺陷報告檢測,Sabor等人[16]將程序調用序列信息預處理為n-gram詞組序列后,這些序列將被表示為定長的稀疏特征向量并計算相似度。陳俊潔等人[17]通過利用文本特征以及程序特征來查找程序編譯器產生的重復缺陷報告。此外,缺陷報告附加的屏幕截圖[18]以及視頻[19]也參與到重復缺陷報告的檢測。
1.2 基于深度學習的缺陷報告檢測。
Kukkar等人[20]提出了一個基于深度學習模型的系統,用于在Siamese體系結構中使用卷積神經網絡(CNN)進行相關特征提取,以捕獲局部特征,并從多個角度檢查缺陷報告中的所有詞匯,該方法使用word2vec[21]進行詞嵌入,并基于缺陷報告中的混合結構信息計算報告之間的相似性。He等人[22]將卷積神經網絡的使用進行了雙通道(dual channel)擴展,這是一種結合兩個報告特征矩陣的方法,該方法同時使用結構化與非結構化信息作為輸入,展示了非結構化信息(如產品、組件)對檢測重復項的影響,為了表示文檔的單詞,他們使用了基于word2vec的連續詞袋CBOW(continuous bag of words)模型[23]。Xie等人[2]將卷積神經網絡提取的特征與域字段(如組件、缺陷嚴重程度、發生時間等)相結合,提出了一種基于混合結構信息的深度學習模型,利用深層網絡從缺陷報告中提取語義和語法模式,以獲取各種信息。缺陷報告的單詞除了進行詞嵌入以外,還要與域字段組合后才輸出最終的缺陷報告表示。
Poddar等人[24]提出了一種能夠檢測重復缺陷報告并將其聚合為潛在主題的神經網絡模型,使用語義概念和注意力機制來執行重復檢測和基于主題的聚類。作為一個多任務學習的神經網絡模型,該方法提出了一個自定義損失函數,可以在運行有監督的重復檢測任務時,同時以無監督的方式執行主題聚類。該研究使用了共享雙門遞歸神經網絡Bi-GRU(bi-gated recurrent neural network)、單詞嵌入、自我注意力機制以及條件注意力機制,此外,它還利用了標題文本和產品特征來進行檢測。Budhiraja等人[25]介紹了一種基于詞嵌入的深度神經網絡分類模型DWEN(deep word embedding network),通過將報告對的詞嵌入向量與單詞序列組合后,交由全連接深度神經網絡去自動學習報告對的深層特征,最終訓練出識別重復缺陷報告對的分類器;為了進一步研究詞嵌入模型的影響,利用LDA主題建模并計算相似度完成候選報告初篩后,再由深度神經網絡完成后續檢測[26]。
Deshmukh等人[27]使用了一種深度Siamese模型接收缺陷報告的文本(摘要、描述)特征和類別(版本、組件、產品)特征。Siamese網絡由多層感知機 (multilayer perceptron,MLP)、雙向長短時記憶網絡 (bi-directional long short-term memory,BiLSTM)和卷積神經網絡三種網絡組成,最終這三種網絡輸出的特征將組合在一起來表示缺陷報告。該模型使用三重損失函數進行訓練,在每種情況下都使用一個候選、一個否定和一個肯定的樣本,目的是最大化重復報告對的相似性,并最小化非重復報告對的相似性。
2 重復缺陷報告檢測方法
本文基于開源的缺陷報告庫Bugzilla開展研究,其涵蓋的Eclipse、Open Office和NetBeans等開源項目的缺陷報告具有相對固定的格式。盡管這些缺陷報告存在一些細微的差異,但是它們的結構化屬性通常是遵循顯式或隱式規則所填寫的。而它們的非結構化(文本)屬性則存在較大差別,這是缺陷報告填寫人員的多樣性必然導致的。本章將介紹本文提出的一種融合D_BBAS方法的重復缺陷報告檢測方法,包括四步:自然語言預處理、非結構化屬性的特征提取、結構化屬性的特征提取、分類模型的訓練與評測。
2.1 自然語言預處理
該階段主要針對缺陷報告的摘要和描述這兩部分非結構化文本,采用常用的NLTK工具包即可完成處理,具體內容包括:
a)分詞。對于英文,利用空格將單詞逐個隔開后,再去除空格與換行符等字符后得到一個單詞列表。
b)去除標點符號和停用詞。停用詞指的是,如“a”“the”“to”等單詞,它們幾乎不包含什么信息,去除掉它們既不影響文本信息,還能提升文本處理效率,利用NLTK庫中的英文停用詞表即可簡單快速地去除停用詞;標點符號利用正則表達式即可去除。
c)詞干提取。將單詞后綴去除即可得到詞干,如“singer”的詞干是“sing”,“running”的詞干是“run”。本文采用常用的Porter方法進行提取,在NLTK庫中由方法PorterStemmer調用。
2.2 非結構化屬性的特征提取
為了更好地提取非結構化屬性的深層次語義特征,本文提出了一種D_BBAS方法,即通過BERT BiLSTM-attention模型以及Doc2vec模型分別提取摘要文本和描述文本的分布式表示,從而計算出更準確的語義相似度量值。
a)基于摘要文本生成分布式相似性度量。缺陷報告中的摘要文本通常是長度有限的句子,因此本文使用谷歌公司預訓練的BERT[28]模型作為嵌入層更好地保留嵌入向量的語義豐富性。BERT是一種基于深度學習的語言表示模型,它是基于Transformer[29]的雙向訓練模型,僅通過注意力機制連接編碼器和解碼器的語言表示模型。BERT的目的是用未標記的文本預訓練出蘊涵深層次語義信息的雙向表示,即預訓練使BERT能夠理解上下文和句子之間的關系。與其他模型相比,BERT的優勢在于不僅從左到右觀察文本序列,而且從右到左觀察文本序列[28]。BERT基礎模型使用12層Transformer編碼器,這些層中每個詞符token的輸出都可能是一個嵌入。只需微調帶有輸出層的預先訓練的BERT模型,就可以為各種自然語言處理任務構建高性能模型。摘要文本的詞序列通過BERT嵌入層后,會輸出由多個詞符構成的嵌入向量。編碼器模塊則使用BiLSTM以解決梯度的問題[30]。為了指導神經網絡引入額外信息來提取句子嵌入,可以在編碼器—解碼器層上添加一個自我注意力層;然后在解碼器模塊和輸出層之間添加高速網絡(highway network)層,將有助于提高詞符化序列的細化程度[30]。最后,在這個模型的輸出層使用余弦相似度函數來計算語義相似性度量。
BiLSTM層用于捕獲句子中的語義層面的聯系,而注意力層用于提取輸入序列中的關鍵字。這一層的結構設計基于HBAM模型[31]和Siamese LSTM框架[32],即通過在Siamese框架中實現兩層BiLSTM以及單詞注意力層。處理過程就像HBAM那樣,兩個來自不同缺陷報告的摘要將首先使用詞嵌入表示,然后BiLSTM根據上下文來形成完整的句子嵌入。其中,每個BiLSTM編碼器會乘以一個單詞注意力值(為每個單詞分配一個權重),以捕獲句子中的關鍵點;同時,上下文向量的加入也會進一步完善句子的表示。最后,通過每個隱藏狀態值h乘以其注意力的加權總和計算相似度。
LSTM核心之處在于它的單元狀態(cell state)允許信息流直接通過整個鏈而幾乎不發生線路交互,同時保持內容不變。LSTM做到這一點的方法是,通過結合ht-1和xt的遺忘門層,首先決定哪些信息將被單元狀態遺忘,即隱藏層在t-1時刻的值和輸入層在t時刻的值,Wg為隱藏層與輸出層之間的權重矩陣,bg為偏置向量。因此,過濾掉無關信息的gt可以通過式(1)得到[32]。
gt=δ(Wg*[ht-1,xt]+bg)(1)
之后,需要更新的值由輸入門(input gate)層判斷,從而識別出哪些新信息要存儲在單元狀態中。通過一個tanh函數層的乘積處理,可以合并向量來查看新的候選值Ct是否要在單元狀態中更新。將下面等式的兩個值相乘,從而獲得一個新的候選值,其中每個狀態值還需選擇更新的范圍[31]。
jt=δ(Wj*[ht-1,xt]+bj)(2)
Ct=tanh(WC*[ht-1,xt]+bC)(3)
最后由一個sigmoid層決定輸出哪些單元內容。單元狀態通過tanh函數縮放到-1~1,然后通過sigmoid門激活后最終輸出。
如圖1所示,這個結合注意力機制的BERT BiLSTM模型的目的是通過計算0~1的相似性分數來評估兩份缺陷報告的摘要句子在語義上的相似程度,分數越高,摘要句子的語義就越接近。通過給定兩個摘要句子和一個標簽(是否重復)作為輸入,對模型進行訓練。使用BERT作為模型的第一層,這兩個輸入的摘要句子將分別轉換為各自的詞嵌入。第一層將有兩個輸出,即由每個摘要句子的詞嵌入表示組成的向量;這兩個摘要句子的表示將被傳遞到BiLSTM層,該層的輸出也是兩個表示,BiLSTM層的目的是根據兩個摘要的上下文形成完整的句子嵌入,然后每個BiLSTM編碼器將乘以一個單詞注意力權重值以突出顯示句子中的關鍵點;最后BiLSTM層輸出的兩個向量將傳遞到余弦相似度計算層以獲得相似性度量分數。
b)基于描述文本生成分布式相似性度量。考慮到缺陷報告集合中較長的描述文本長度,本文使用基于DM(distri-buted memory)方法的Doc2vec模型來生成描述文本的分布式表示。
介紹Doc2vec模型之前,需要先介紹一下word2vec模型。近年來預訓練的word2vec在各種自然語言處理任務中常作為上游組件出現,word2vec的構建很簡潔,是一個由輸入層—隱層—輸出層組成的神經網絡。這個三層神經網絡本身是對語言模型進行建模,但也同時獲得一種單詞在向量空間上的表示。實際上word2vec有兩種不同的建模方式:a)連續詞袋CBOW方法,通過前后文單詞來估算當前單詞的概率;b)skip-gram方法通過當前單詞來估算前后文單詞的概率。這兩種方法都將給定的單詞輸入到參數初始化的神經網絡中,以得到輸出單詞的預測概率。同時語料庫中該給定單詞附近的真實單詞將作為標簽來計算預測結果的損失值;然后以降低損失值為目標持續優化神經網絡的訓練過程,最終獲得了每個單詞的最優嵌入表示,以及計算不同單詞嵌入表示的向量距離所反映的語義相似性。
然而word2vec忽略了單詞之間的排列順序對文本段落語義的影響,即word2vec僅僅是基于單詞的維度提取語義信息的,缺少了對上下文的語義分析能力。
為了解決這個問題,Doc2vec在word2vec的基礎上引入了一個段落嵌入向量,并結合詞嵌入向量來獲得預測結果。Doc2vec也有兩種方法,分別是分布式記憶DM方法和分布式詞袋DBOW(distributed bag of words)方法[6]。類似于word2vec中的CBOW方法,DM方法通過給定上下文和段落向量的共同預測目標單詞的概率。DBOW方法也類似于word2vec中的skip-gram方法,在訓練過程中輸入單詞的上下文被忽略,模型僅通過給定的段落向量去預測段落中一組隨機單詞。本文選擇DM方法來提取缺陷報告的描述文本序列的向量表示,這是考慮到應用于大規模缺陷報告庫與模型的訓練效率,DM方法能夠更快地完成計算。在DM方法中(圖2),每個段落都映射成唯一的向量并存儲在段落矩陣D中的各列中,同時單詞也映射成唯一的向量并存儲在詞矩陣W的各列中。段落向量可以被看做是一個標記,它就像一段記憶,可以記住當前上下文中缺少的內容,或者段落的主題。然后段落向量和詞向量的求和平均值與參數矩陣U進行計算,其結果通過softmax處理后即可得到預測詞的概率分布。設有上下文單詞集合C,缺陷報告文本集合的詞典V,規模為n,輸出結果為一維向量y,則預測詞的概率計算公式為
p(w|C)=eyw∑v∈Veyv(4)
其中:yw表示向量y中單詞w對應位置的輸出值。
缺陷報告集合經過自然語言預處理后,將抽取出一個描述集合以訓練Doc2vec模型,如圖3所示。通過缺陷報告對的編號,即可從訓練后的Doc2vec模型中得到相應的兩個描述表示向量,再由余弦相似度計算以獲得相似性度量分數。
2.3 結構化屬性的特征提取
Sun等人[10]提出了使用缺陷報告的分類屬性比對特征進行重復性檢測;aric'等人[33]提出利用缺陷報告的文本比對特征判別重復性;Lazer等人[4]進一步融合了分類屬性比對特征與文本比對特征進行重復缺陷報告的檢測。提取的結構化屬性的特征如表1所示。
2.4 分類模型的訓練與測試
為了驗證新特征的有效性,也為了避免單一分類器的偏差,本文使用與對照方法一致的機器學習分類器,分別是K近鄰、決策樹、隨機森林、樸素貝葉斯、線性支持向量機(linear SVM)和核函數支持向量機(RBF SVM)。
3 實驗數據與實驗過程
3.1 評測數據集與指標
數據集源自Bugzilla大規模缺陷報告庫,共有四個開源項目的缺陷集(http://alazar.people.ysu.edu/msr14data/)。本文選擇Eclipse、Open Office、NetBeans三個項目進行實驗。Mozilla項目中缺少了是否重復的標簽,所以不使用。將重復缺陷報告歸納為三元組集合,每個三元組記錄一對缺陷報告的ID號和是否重復,假定一對缺陷報告是重復的則記錄為(13544,23420,1),非重復則記錄為(13544,23420,0)。實驗過程中還發現記錄相同信息的三元組可能會出現多次等數據噪聲。為了排除噪聲影響,降噪處理后的重復缺陷報告數據集情況如表2所示。
對于重復缺陷報告的檢測,本文采用常見的四個評測指標,即準確度(accuracy)、召回率(recall)、查準率(precision)和調和平均數F1。在recall、precision和F1的計算上,本文更關注分類模型對重復類別的預測能力。四種指標的計算公式為
accuracy=TP+TNTP+FP+TN+FN(5)
precision=TPTP+FP(6)
recall=TPTP+FN(7)
F1=21precision+1recall(8)
其中:TP表示有多少對重復的缺陷報告被判斷具有重復關系,FP表示有多少對非重復的缺陷報告被判斷具有重復關系,TN表示有多少對非重復的缺陷報告被判斷具有非重復關系,FN表示有多少對重復的缺陷報告被判斷具有非重復關系。
3.2 實驗設置與步驟
本實驗與對照方法一致,從Eclipse、Open Office和NetBeans項目中各隨機提取5 000個缺陷報告對(重復對與非重復對比例為1:4)作為訓練集,各項目剩余的缺陷報告作為測試集。三個項目將分別進行訓練與測試,并以10次隨機實驗的平均值作為實驗結果,從而減少實驗偏差。分類器參數設置上也如對照方法一樣選擇默認配置。本文基于Python語言進行編程與實驗,步驟包括:
a)自然語言預處理。使用NLTK庫完成分詞、停用詞與標點符號的去除和詞干提取。
b)非結構化屬性的特征提取。獲得預處理的文本集合后,首先將各個缺陷報告的摘要文本置于一個集合中,生成摘要文本集合;再使用Keras與TensorFlow深度學習框架完成BERT BiLSTM-attention模型的訓練,并獲得分布式的摘要文本相似度得分集;對于缺陷報告的描述文本集合,利用Gensim工具箱即可快速實現Doc2vec模型的訓練;再通過訓練后的模型即可獲得分布式的描述文本相似度得分集。
c)結構化屬性的特征提取。使用TakeLab工具包[33]即可快速提取表1的特征。不過其中兩種基于塊索引符號生成的特征將被忽略,因為歸一化處理后所有缺陷報告的該特征值均一致,即無法用于檢測缺陷報告。
d)特征融合。在前面的步驟中已經得到了分布式的結構化屬性特征集和非結構化屬性特征集,將其拼接在一起后即可得到用于最終檢測的完整特征集。
e)分類模型的訓練與測試。由scikit-learn庫即可快速實現K近鄰、決策樹、隨機森林和樸素貝葉斯等分類算法。SVM分類算法的實現由LibSVM工具包完成,參數設置均為默認值。5 000個隨機抽取的完整特征集作為訓練集,剩余的完整特征集則作為測試集提供評測結果。
4 實驗結果分析
對照方法[5]與本文方法在Open Office、Eclipse和NetBeans三個項目上的實驗結果如表3~5所示。
三種方法的對比如圖4~9所示。考慮到F1值是綜合了precision值與recall值所得出的,所以只對比accuracy值與F1值。首先以D_TS方法作為對比基線,本文方法在Open Office、Eclipse和NetBeans項目(測試集規模分別為94 086,242 302和180 581)上的F1值分別平均增長4.70%、2.69%和3.76%,在三個數據集上平均增長約3.7%;accuracy值分別平均增長4.78%、1.74%和3.50%,在三個數據集上平均增長約3.34%。即正確分類的測試樣本數分別增長4 497、4 216和6 320個。結果表明,將傳統的結構化屬性特征與基于神經網絡模型提取的非結構化屬性特征融合后,將顯著提升重復缺陷報告檢測的準確度。
再以文獻[5]方法作為新的對比基線,F1值分別平均增長2.08%、1.31%和1.72%,即在三個數據集上平均增長約1.7%;accuracy值分別平均增長2.14%、0.86%和1.62%,在三個數據集上平均增長約1.54%,即正確分類的測試樣本數分別增長2 029、2 084和2 925個。結果表明,相比起將非結構化屬性作為一個整體去提取語義特征,利用非結構化屬性的語言性質進一步細化提取方式,從而得到的特征更能反映深層次的語義特征,并進一步提升重復缺陷報告的檢測效果。
總的來說,本文方法的優化歸功于缺陷報告的特點和D_BBAS方法的特點。缺陷報告摘要的內容是比較短的,通常只對缺陷現象進行簡潔的記錄;相反,缺陷報告描述則涵蓋了缺陷發生時的操作環境、軟件設置、具體操作等細節。由于這種差異,一些表述可能只會出現在描述中,另一些表述則只可能出現在摘要中。為了盡可能捕捉這種細微的差異,分別計算摘要相似度和描述相似度似乎是一種有效的手段。圖4~9的評測結果驗證了這種可能性。此外,BERT BiLSTM-attention模型更側重于提取文本量較短的全局語義特征,而Doc2vec模型則更側重于文本量較長的場景以提取涵蓋廣泛細節的語義特征,從而保證了分開提取的特征有效性。
5 特征判別能力對比
通過引入統計學上的相關系數,可以驗證出根據本文方法提取的新特征的有效性。相關系數值越大,反映該特征對于分類準確度的影響越大,本文選擇四種常見的判別力分析指標:皮爾森(Pearson)相關系數、斯皮爾曼(Sperman)相關系數、費舍爾(Fisher)得分和信息增益。Pearson相關系數用于衡量兩個變量之間的線性相關程度;Sperman相關系數可以反映出特征與類型的相關程度;Fisher相關系數反映該特征的類間方差與類內方差的比值;信息增益反映該特征在分類過程中提供的信息量大小。如表6所示,26與27號為本文方法所提取的特征,它們除了不及20號特征上的Fisher得分,均優于其他特征。
6 結束語
本文提出了一種融合D_BBAS方法的重復缺陷報告檢測,可以根據缺陷報告的文本特點,更具有針對性地提取分布式表示特征。這些特征是結構化屬性所蘊涵的深層次語義信息,對其進一步處理后得到的摘要對相似度與描述對相似度,作為兩個新的結構屬性特征,與傳統的非結構屬性特征融合后參與分類器模型的訓練。相較于對照方法,本文方法在真實項目的大規模重復缺陷報告數據集上的評測結果取得了明顯改進,驗證了本文方法的有效性。
參考文獻:
[1]Aggarwal K,Timbers F,Rutgers T,et al.Detecting duplicate bug reports with software engineering domain knowledge[J].Journal of Software:Evolution and Process,2017,29(3):e1821.
[2]Xie Qi,Wen Zhiyuan,Zhu Jieming,et al.Detecting duplicate bug reports with convolutional neural networks[C]//Proc of the 25th Asia-Pacific Software Engineering Conference.Piscataway,NJ:IEEE Press,2018:416-425.
[3]Zhang Tao,Jiang He,Luo Xiapu,et al.A literature review of research in bug resolution:tasks,challenges and future directions[J].The Computer Journal,2016,59(5):741-773.
[4]Lazer A,Ritchey S,Sharif B.Improving the accuracy of duplicate bug report detection using textual similarity measures[C]//Proc of the 11th Working Conference on Mining Software Repositories.2014:308-311
[5]曾杰,賁可榮,張獻,等.融合文本分布式表示的重復缺陷報告檢測[J].計算機工程與科學,2021,43(4):670-680.(Zeng Jie,Ben Kerong,Zhang Xian,et al.Duplicate bug report detection by combining distributed representations of documents[J].Computer Engineering amp; Science,2021,43(4):670-680.)
[6]Le Q,Mikolov T.Distributed representations of sentences and documents[C]//Proc of the 31st International Conference on Machine Learning.2014:1188-1196.
[7]Lazer A,Ritchey S,Sharif B.Generating duplicate bug datasets[C]//Proc of the 11th Working Conference on Mining Software Repositories.New York:ACM Press,2014:392-395
[8]Runeson P,Alexandersson M,Nyholm O.Detection of duplicate defect reports using natural language processing[C]//Proc of the 29th International Conference on Software Engineering.Piscataway,NJ:IEEE Press,2007:499-510.
[9]Sun Chengnian,Lo D,Wang Xiaoyin,et al.A discriminative model approach for accurate duplicate bug report retrieval[C]//Proc of the 32nd IEEE/ACM International Conference on Software Engineering.New York:ACM Press,2010:100-118.
[10]Sun Chengnian,Lo D,Wang Xiaoyin,et al.Towards more accurate retrieval of duplicate bug report[C]//Proc of the 26th IEEE/ACM International Conference on Automated Software Engineering.New York:ACM Press,2011:78-92.
[11]Pérez A,José R,Arroyo J,et al.Using BM25F for semantic search[C]//Proc of the 3rd International Semantic Search Workshop.New York:ACM Press,2010:28-39.
[12]Wang Xiaoyin,Zhang Lu,Xie Tao,et al.An approach to detecting duplicate bug reports using natural language and execution information[C]//Proc of the 30th International Conference on Software Engineering.New York:ACM Press,2008:461-470.
[13]Nguyen A T,Nguyen T T,Nguyen T N,et al.Duplicate bug report detection with a combination of information retrieval and topic modeling[C]//Proc of the 27th IEEE/ACM International Conference on Automated Software Engineering.New York:ACM Press,2012:70-79.
[14]董美含.基于缺陷報告和源代碼的相似缺陷識別方法[D].哈爾濱:哈爾濱工業大學,2018.(Dong Meihan.Similar bug identification method based on bug report and source code[D].Harbin:Harbin Institute of Technology,2018.)
[15]范道遠,孫吉紅,王煒,等.融合文本與分類信息的重復缺陷報告檢測方法[J].計算機科學,2019,46(12):192-200.(Fan Daoyuan,Sun Jihong,Wang Wei,et al.Detection method of duplicate defect report fusing text and categorization information[J].Computer Science,2019,46(12):192-200.)
[16]Sabor K K,Larsson A.DURFEX:a feature extraction technique for efficient detection of duplicate bug reports[C]//Proc of the 17th IEEE International Conference on Software Quality,Reliability and Security.Piscataway,NJ:IEEE Press,2017:548-562.
[17]陳俊潔,胡文翔,郝丹,等.一種靜態的編譯器重復缺陷報告識別方法[J].中國科學:信息科學,2019,49(10):1283-1298.(Chen Junjie,Hu Wenxiang,Hao Dan,et al.Static duplicate bug-report identification for compilers[J].Science China Information Sciences,2019,49(10):1283-1298.)
[18]Wang Junjie,Li Mingyang,Wang Song,et al.Images don’t lie:duplicate crowdtesting reports detection with screenshot information[J].Information and Software Technology,2019,110(6):139-155.
[19]Cooper N,Bernal-Cárdenas C,Chaparro O,et al.A replication pac-kage for it takes two to tango:combining visual and textual information for detecting duplicate video-based bug reports[C]//Proc of the 43rd International Conference on Software Engineering:Companion Proceedings.Piscataway,NJ:IEEE Press,2021:160-161.
[20]Kukkar A,Mohana R,Kumar Y,et al.Duplicate bug report detection and classification system based on deep learning technique[J].IEEE Access,2020,8:200749-200763.
[21]Mikolov T,Chen Kai,Corrado G,et al.Efficient estimation of word representations in vector space[EB/OL].(2013-09-07).https://arxiv.org/pdf/1301.3781.pdf.
[22]He Jianjun,Xu Ling,Yan Meng,et al.Duplicate bug report detection using dual-channel convolutional neural networks[C]//Proc of the 28th International Conference on Program Comprehension.New York:ACM Press,2020:117-127.
[23]Mikolov T,Sutskever I,Chen Kai,et al.Distributed representations of words and phrases and their compositionality[C]//Proc of the 26th International Conference on Neural Information Processing Systems.Red Hook,NY:Curran Associates Inc.,2013:3111-3119.
[24]Poddar L,Neves L,Brendel W,et al.Train one get one free:partially supervised neural network for bug report duplicate detection and clustering[C]//Proc of Conference of the North American Chapter of the Association for Computational Linguistics:Human Language Technologies.Stroudsburg,PA:Association for Computational Linguistics,2019:157-165.
[25]Budhiraja A,Dutta K,Reddy R,et al.DWEN:deep word embedding network for duplicate bug report detection in software repositories[C]//Proc of the 40th International Conference on Software Engineering:Companion Proceeedings.New York:ACM Press,2018:193-194.
[26]Budhiraja A,Reddy R,Shrivastava M.LWE:LDA refined word embeddings for duplicate bug report detection[C]//Proc of the 40th International Conference on Software Engineering:Companion Proceee-dings.New York:ACM Press,2018:165-166.
[27]Deshmukh J,Annervaz K M,Podder S,et al.Towards accurate duplicate bug retrieval using deep learning techniques[C]//Proc of IEEE International Conference on Software Maintenance and Evolution.Washington DC:IEEE Computer Society,2017:115-124.
[28]Devlin J,Chang M W,Lee K,et al.BERT:pre-training of deep bidirectional transformers for language understanding[C]//Proc of Conference of the North American Chapter of the Association for Computational Linguistics:Human Language Technologies.Stroudsburg,PA:Association for Computational Linguistics,2019:4171-4186.
[29]Vaswani A,Shazeer N,Parmar N,et al.Attention is all you need[C]//Proc of the 31st International Conference on Neural Information Processing Systems.Red Hook,NY:Curran Associates Inc.,2017:6000-6010.
[30]Zhang Yuwen,Xu Zhaozhuo.BERT for question answering on SQuAD 2.0[EB/OL].(2019-03-28)[2022-05-14].http://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/default/15848021.pdf.
[31]Bao Qiming,Ni Lin,Liu Jiamou.HHH:an online medical chatbot system based on knowledge graph and hierarchical bi-directional attention[C]//Proc of Australasian Computer Science Week Multiconference.New York:ACM Press,2020:article No.32.
[32]Mueller J,Thyagarajan A.Siamese recurrent architectures for learning sentence similarity[C]//Proc of the 30th AAAI Conference on Artificial Intelligence.Palo Alto,CA:AAAI Press,2016:2786-2792.
[33]aric' F,Glava G,Karan M,et al.TakeLab:systems for measuring semantic text similarity[C]//Proc of the 1st Joint Conference on Lexical and Computational Semantics and the 6th International Workshop on Semantic Evaluation.Stroudsburg,PA:Association for Computational Linguistics,2012:441-448.