










收稿日期:2022-05-14;修回日期:2022-07-06" 基金項(xiàng)目:科技部高端外國專家引進(jìn)計(jì)劃資助項(xiàng)目(G2021186002L);四川省科技計(jì)劃資助項(xiàng)目(2022JDGD0011);西南民族大學(xué)中央高校基本科研業(yè)務(wù)費(fèi)專項(xiàng)資金資助項(xiàng)目(2021NYYXS44)
作者簡介:曾方(1995-),男,重慶忠縣人,碩士研究生,主要研究方向?yàn)檐浖毕荨⑷罩局貜?fù)檢測;謝琪(1983-),女(通信作者),四川成都人,副教授,碩導(dǎo),博士,主要研究方向?yàn)榉?wù)計(jì)算、深度學(xué)習(xí)、日志重復(fù)檢測(qi.xie.swun@gmail.com);崔夢天(1972-),女(蒙古族),內(nèi)蒙古烏蘭浩特人,教授,碩導(dǎo),博士,主要研究方向?yàn)榭尚跑浖?fù)雜系統(tǒng)、軟件缺陷預(yù)測.
摘 要:為了更有效地獲得缺陷報(bào)告的非結(jié)構(gòu)化信息的特征,提出一種D_BBAS(Doc2vec and BERT BiLSTM-attention similarity)方法,它基于大規(guī)模缺陷報(bào)告庫訓(xùn)練特征提取模型,生成能反映深層次語義信息的缺陷摘要文本表示集和缺陷描述文本表示集;利用這兩個(gè)分布式的表示集計(jì)算出缺陷報(bào)告對(duì)的相似度,從而得到兩個(gè)新的相似度特征;這兩個(gè)新特征將與基于結(jié)構(gòu)化信息生成的傳統(tǒng)特征結(jié)合后參與重復(fù)缺陷報(bào)告的檢測。在著名開源項(xiàng)目Eclipse、NetBeans 和Open Office的缺陷報(bào)告庫上驗(yàn)證了D_BBAS方法的有效性,其中包含超過50萬個(gè)缺陷報(bào)告。實(shí)驗(yàn)結(jié)果表明,相比于代表性方法,該方法的F1值平均提升了1.7%,證明了D_BBAS方法的有效性。
關(guān)鍵詞:重復(fù)缺陷報(bào)告;BERT模型;Doc2vec模型;BiLSTM-attention神經(jīng)網(wǎng)絡(luò)
中圖分類號(hào):TP311.53"" 文獻(xiàn)標(biāo)志碼:A
文章編號(hào):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 引言
在大型軟件開發(fā)環(huán)境中開發(fā)人員依靠缺陷報(bào)告來完成修復(fù),缺陷跟蹤系統(tǒng)的目的是用于協(xié)調(diào)和管理大型軟件開發(fā)環(huán)境中的缺陷檢測和缺陷修復(fù)。缺陷報(bào)告的詳細(xì)程度存在不一致性,這是因?yàn)槿毕輬?bào)告源自不同的記錄者,如開發(fā)人員、測試人員和一般用戶[1],即不同的軟件用戶或者軟件維護(hù)人員可能會(huì)對(duì)同一缺陷提交多份缺陷報(bào)告,將導(dǎo)致軟件維護(hù)的成本增加。所以對(duì)于每一份新提交的缺陷報(bào)告,首先需要判斷這個(gè)缺陷是唯一的還是已報(bào)告過的,而包含已報(bào)告缺陷的報(bào)告則稱為重復(fù)缺陷報(bào)告。據(jù)有關(guān)統(tǒng)計(jì)[2],2018年MapReduce開源項(xiàng)目中含有的重復(fù)缺陷報(bào)告占所有缺陷報(bào)告的比例達(dá)到13.9%。Mozilla Core、Firefox、Eclipse Platform中含有的重復(fù)缺陷報(bào)告比例更高,分別達(dá)到了21.8%、30.9%、16.9%。由此可見,在缺陷報(bào)告庫規(guī)模日益增大的情況下,自動(dòng)化重復(fù)檢測過程的解決方案對(duì)于軟件的管理成本和維護(hù)成本有重要意義。
通常,缺陷的分類過程可分為理解、選擇和糾正三個(gè)階段[3]。對(duì)于檢測重復(fù)缺陷報(bào)告,理解和選擇缺陷報(bào)告是最關(guān)鍵的任務(wù)。缺陷報(bào)告主要由兩種屬性構(gòu)成:a)結(jié)構(gòu)化屬性,是比較固定化的信息,例如缺陷發(fā)生的時(shí)間、缺陷發(fā)生時(shí)軟件的版本等;b)非結(jié)構(gòu)化屬性,則是由報(bào)告提交者按照個(gè)人語言習(xí)慣而填寫的自然語言信息,即摘要和描述。現(xiàn)有的研究主要通過對(duì)這兩種屬性分別提取特征并配合機(jī)器學(xué)習(xí)算法來訓(xùn)練分類模型。在利用非結(jié)構(gòu)化屬性來檢測重復(fù)缺陷報(bào)告上,Lazar等人[4]提出的D_TS(detection using text similarity)方法就取得了不錯(cuò)的效果,D_TS方法通過對(duì)結(jié)構(gòu)化屬性多樣化組合從而提取了25種特征,再配合隨機(jī)森林等機(jī)器學(xué)習(xí)算法構(gòu)建分類器模型。曾杰等人[5]基于D_TS方法,利用Doc2vec模型[6]訓(xùn)練并提取大規(guī)模缺陷報(bào)告集的非結(jié)構(gòu)化屬性(摘要和描述)的特征,并與D_TS方法的25種特征融合后共同用于重復(fù)缺陷報(bào)告的檢測,取得了更好的檢測效果,本文在文獻(xiàn)[5]方法的基礎(chǔ)上,為了進(jìn)一步改進(jìn)對(duì)摘要文本和描述文本的特征提取效果,提出了一種D_BBAS方法,分別利用Doc2vec模型和BERT BiLSTM-Attention模型訓(xùn)練和提取描述文本特征以及摘要文本特征。這兩種分別包含描述和摘要的深層次語義信息的新特征,將與非結(jié)構(gòu)化屬性特征融合并參與重復(fù)缺陷報(bào)告的檢測。本文方法在公開的大規(guī)模重復(fù)缺陷報(bào)告數(shù)據(jù)集[7]上進(jìn)行了測試,并分別與D_TS方法和文獻(xiàn)[5]方法進(jìn)行比較,驗(yàn)證了本文方法的有效性。
1 相關(guān)工作
目前重復(fù)缺陷報(bào)告的檢測任務(wù)可以利用結(jié)構(gòu)化屬性和非結(jié)構(gòu)化屬性,在此基礎(chǔ)上又可以分為信息檢索方法和機(jī)器學(xué)習(xí)/深度學(xué)習(xí)方法。結(jié)構(gòu)化屬性包括各種分類字段信息,如產(chǎn)品(product)、組件(component)、優(yōu)先級(jí)(priority)、缺陷嚴(yán)重程度(bug severity)、解決方案(resolution)、缺陷狀態(tài)(bug status)和版本(version)等。非結(jié)構(gòu)化屬性是由自然語言表述的文本信息,通常從摘要和描述等字段中提取以生成文本文檔;除了單獨(dú)使用外,文本信息和分類字段信息也可以混合使用,在某些情況下還可以附加堆棧跟蹤信息或日志執(zhí)行信息等。
1.1 基于信息檢索的重復(fù)缺陷報(bào)告檢測。
在重復(fù)缺陷報(bào)告檢測的早期研究中,Runeson等人[8]使用基于詞袋(bag of words)模型的文檔特征向量來表示缺陷報(bào)告,并利用報(bào)告向量之間的余弦相似度來判斷內(nèi)容相似度,從而找出候選的重復(fù)缺陷報(bào)告。在這種方法中詞袋模型的主要缺點(diǎn)是忽略了單詞所處位置的上下文,并且沒有全局考慮詞頻的影響。雖然準(zhǔn)確率較低,但它仍然是一種簡單且成本低廉的方法。
Sun等人[9]使用基于逆文檔頻率(inverse document frequency,IDF)的特征向量來學(xué)習(xí)缺陷報(bào)告中所有單詞的權(quán)重,然后利用支持向量機(jī)(SVM)訓(xùn)練并完成重復(fù)性判別。該方法的缺點(diǎn)是語料庫僅考慮了摘要和描述字段。在Eclipse、Firefox和Open Office三個(gè)數(shù)據(jù)集的評(píng)測結(jié)果顯示,該方法的準(zhǔn)確率介于50%~70%。后續(xù),Sun等人[10]又提出了一種基于BM25F(best match 25 models with fields)算法[11]的檢索方法REP,進(jìn)一步包含了優(yōu)先級(jí)、缺陷嚴(yán)重程度等多個(gè)分類字段域的信息。該方法支持長文本查詢,并通過隨機(jī)梯度下降學(xué)習(xí)權(quán)重。該方案在Eclipse、Open Office和Mozilla數(shù)據(jù)集中實(shí)現(xiàn)了68%~72%的準(zhǔn)確率。
Wang等人[12]提出將缺陷報(bào)告的自然語言信息和非自然語言信息分別計(jì)算兩個(gè)相似性分?jǐn)?shù),從描述字段、堆棧跟蹤和日志中提取的自然文本和非自然文本,通過結(jié)合詞頻和逆文檔頻率(team frequency-inverse document frequency,TF-IDF)對(duì)它們進(jìn)行向量化,并計(jì)算余弦相似度來檢索重復(fù)項(xiàng)。在檢測Eclipse和Firefox數(shù)據(jù)集中的重復(fù)數(shù)據(jù)時(shí),它們的準(zhǔn)確率分別達(dá)到了71%和82%。Nguyen等人[13]將BM25F與潛在狄利克雷分布LDA(latent Dirichlet allocation)相結(jié)合,LDA生成的特征向量是缺陷報(bào)告中主題的概率分布。這是一種基于共享主題來表示重復(fù)項(xiàng)的主題模型方法,可以用于計(jì)算缺陷報(bào)告之間的主題分布相似度。該方法在Eclipse、Open Office和Mozilla數(shù)據(jù)集中檢測效果良好,準(zhǔn)確率約為80%。董美含[14]在使用LDA進(jìn)行主題建模的基礎(chǔ)上,以動(dòng)賓短語為關(guān)鍵詞過濾掉重要程度較低的文本信息,再進(jìn)行重復(fù)缺陷報(bào)告檢測。范道遠(yuǎn)等人[15]則使用潛在語義索引(latent semantic indexing,LSI)算法對(duì)缺陷報(bào)告的文本信息進(jìn)行主題建模,該方法比起LDA的優(yōu)點(diǎn)是計(jì)算簡單快速,但只適用于文本規(guī)模較小的場景。
Aggarwal等人[1]使用從軟件工程書籍和技術(shù)文檔中提取的特定詞匯創(chuàng)建了一種上下文預(yù)測方法,通過該方法生成了更豐富的語料庫,然后再結(jié)合BM25F模型計(jì)算缺陷報(bào)告之間的相似度。程序調(diào)用方法的序列信息也被用于重復(fù)缺陷報(bào)告檢測,Sabor等人[16]將程序調(diào)用序列信息預(yù)處理為n-gram詞組序列后,這些序列將被表示為定長的稀疏特征向量并計(jì)算相似度。陳俊潔等人[17]通過利用文本特征以及程序特征來查找程序編譯器產(chǎn)生的重復(fù)缺陷報(bào)告。此外,缺陷報(bào)告附加的屏幕截圖[18]以及視頻[19]也參與到重復(fù)缺陷報(bào)告的檢測。
1.2 基于深度學(xué)習(xí)的缺陷報(bào)告檢測。
Kukkar等人[20]提出了一個(gè)基于深度學(xué)習(xí)模型的系統(tǒng),用于在Siamese體系結(jié)構(gòu)中使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)進(jìn)行相關(guān)特征提取,以捕獲局部特征,并從多個(gè)角度檢查缺陷報(bào)告中的所有詞匯,該方法使用word2vec[21]進(jìn)行詞嵌入,并基于缺陷報(bào)告中的混合結(jié)構(gòu)信息計(jì)算報(bào)告之間的相似性。He等人[22]將卷積神經(jīng)網(wǎng)絡(luò)的使用進(jìn)行了雙通道(dual channel)擴(kuò)展,這是一種結(jié)合兩個(gè)報(bào)告特征矩陣的方法,該方法同時(shí)使用結(jié)構(gòu)化與非結(jié)構(gòu)化信息作為輸入,展示了非結(jié)構(gòu)化信息(如產(chǎn)品、組件)對(duì)檢測重復(fù)項(xiàng)的影響,為了表示文檔的單詞,他們使用了基于word2vec的連續(xù)詞袋CBOW(continuous bag of words)模型[23]。Xie等人[2]將卷積神經(jīng)網(wǎng)絡(luò)提取的特征與域字段(如組件、缺陷嚴(yán)重程度、發(fā)生時(shí)間等)相結(jié)合,提出了一種基于混合結(jié)構(gòu)信息的深度學(xué)習(xí)模型,利用深層網(wǎng)絡(luò)從缺陷報(bào)告中提取語義和語法模式,以獲取各種信息。缺陷報(bào)告的單詞除了進(jìn)行詞嵌入以外,還要與域字段組合后才輸出最終的缺陷報(bào)告表示。
Poddar等人[24]提出了一種能夠檢測重復(fù)缺陷報(bào)告并將其聚合為潛在主題的神經(jīng)網(wǎng)絡(luò)模型,使用語義概念和注意力機(jī)制來執(zhí)行重復(fù)檢測和基于主題的聚類。作為一個(gè)多任務(wù)學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型,該方法提出了一個(gè)自定義損失函數(shù),可以在運(yùn)行有監(jiān)督的重復(fù)檢測任務(wù)時(shí),同時(shí)以無監(jiān)督的方式執(zhí)行主題聚類。該研究使用了共享雙門遞歸神經(jīng)網(wǎng)絡(luò)Bi-GRU(bi-gated recurrent neural network)、單詞嵌入、自我注意力機(jī)制以及條件注意力機(jī)制,此外,它還利用了標(biāo)題文本和產(chǎn)品特征來進(jìn)行檢測。Budhiraja等人[25]介紹了一種基于詞嵌入的深度神經(jīng)網(wǎng)絡(luò)分類模型DWEN(deep word embedding network),通過將報(bào)告對(duì)的詞嵌入向量與單詞序列組合后,交由全連接深度神經(jīng)網(wǎng)絡(luò)去自動(dòng)學(xué)習(xí)報(bào)告對(duì)的深層特征,最終訓(xùn)練出識(shí)別重復(fù)缺陷報(bào)告對(duì)的分類器;為了進(jìn)一步研究詞嵌入模型的影響,利用LDA主題建模并計(jì)算相似度完成候選報(bào)告初篩后,再由深度神經(jīng)網(wǎng)絡(luò)完成后續(xù)檢測[26]。
Deshmukh等人[27]使用了一種深度Siamese模型接收缺陷報(bào)告的文本(摘要、描述)特征和類別(版本、組件、產(chǎn)品)特征。Siamese網(wǎng)絡(luò)由多層感知機(jī) (multilayer perceptron,MLP)、雙向長短時(shí)記憶網(wǎng)絡(luò) (bi-directional long short-term memory,BiLSTM)和卷積神經(jīng)網(wǎng)絡(luò)三種網(wǎng)絡(luò)組成,最終這三種網(wǎng)絡(luò)輸出的特征將組合在一起來表示缺陷報(bào)告。該模型使用三重?fù)p失函數(shù)進(jìn)行訓(xùn)練,在每種情況下都使用一個(gè)候選、一個(gè)否定和一個(gè)肯定的樣本,目的是最大化重復(fù)報(bào)告對(duì)的相似性,并最小化非重復(fù)報(bào)告對(duì)的相似性。
2 重復(fù)缺陷報(bào)告檢測方法
本文基于開源的缺陷報(bào)告庫Bugzilla開展研究,其涵蓋的Eclipse、Open Office和NetBeans等開源項(xiàng)目的缺陷報(bào)告具有相對(duì)固定的格式。盡管這些缺陷報(bào)告存在一些細(xì)微的差異,但是它們的結(jié)構(gòu)化屬性通常是遵循顯式或隱式規(guī)則所填寫的。而它們的非結(jié)構(gòu)化(文本)屬性則存在較大差別,這是缺陷報(bào)告填寫人員的多樣性必然導(dǎo)致的。本章將介紹本文提出的一種融合D_BBAS方法的重復(fù)缺陷報(bào)告檢測方法,包括四步:自然語言預(yù)處理、非結(jié)構(gòu)化屬性的特征提取、結(jié)構(gòu)化屬性的特征提取、分類模型的訓(xùn)練與評(píng)測。
2.1 自然語言預(yù)處理
該階段主要針對(duì)缺陷報(bào)告的摘要和描述這兩部分非結(jié)構(gòu)化文本,采用常用的NLTK工具包即可完成處理,具體內(nèi)容包括:
a)分詞。對(duì)于英文,利用空格將單詞逐個(gè)隔開后,再去除空格與換行符等字符后得到一個(gè)單詞列表。
b)去除標(biāo)點(diǎn)符號(hào)和停用詞。停用詞指的是,如“a”“the”“to”等單詞,它們幾乎不包含什么信息,去除掉它們既不影響文本信息,還能提升文本處理效率,利用NLTK庫中的英文停用詞表即可簡單快速地去除停用詞;標(biāo)點(diǎn)符號(hào)利用正則表達(dá)式即可去除。
c)詞干提取。將單詞后綴去除即可得到詞干,如“singer”的詞干是“sing”,“running”的詞干是“run”。本文采用常用的Porter方法進(jìn)行提取,在NLTK庫中由方法PorterStemmer調(diào)用。
2.2 非結(jié)構(gòu)化屬性的特征提取
為了更好地提取非結(jié)構(gòu)化屬性的深層次語義特征,本文提出了一種D_BBAS方法,即通過BERT BiLSTM-attention模型以及Doc2vec模型分別提取摘要文本和描述文本的分布式表示,從而計(jì)算出更準(zhǔn)確的語義相似度量值。
a)基于摘要文本生成分布式相似性度量。缺陷報(bào)告中的摘要文本通常是長度有限的句子,因此本文使用谷歌公司預(yù)訓(xùn)練的BERT[28]模型作為嵌入層更好地保留嵌入向量的語義豐富性。BERT是一種基于深度學(xué)習(xí)的語言表示模型,它是基于Transformer[29]的雙向訓(xùn)練模型,僅通過注意力機(jī)制連接編碼器和解碼器的語言表示模型。BERT的目的是用未標(biāo)記的文本預(yù)訓(xùn)練出蘊(yùn)涵深層次語義信息的雙向表示,即預(yù)訓(xùn)練使BERT能夠理解上下文和句子之間的關(guān)系。與其他模型相比,BERT的優(yōu)勢在于不僅從左到右觀察文本序列,而且從右到左觀察文本序列[28]。BERT基礎(chǔ)模型使用12層Transformer編碼器,這些層中每個(gè)詞符token的輸出都可能是一個(gè)嵌入。只需微調(diào)帶有輸出層的預(yù)先訓(xùn)練的BERT模型,就可以為各種自然語言處理任務(wù)構(gòu)建高性能模型。摘要文本的詞序列通過BERT嵌入層后,會(huì)輸出由多個(gè)詞符構(gòu)成的嵌入向量。編碼器模塊則使用BiLSTM以解決梯度的問題[30]。為了指導(dǎo)神經(jīng)網(wǎng)絡(luò)引入額外信息來提取句子嵌入,可以在編碼器—解碼器層上添加一個(gè)自我注意力層;然后在解碼器模塊和輸出層之間添加高速網(wǎng)絡(luò)(highway network)層,將有助于提高詞符化序列的細(xì)化程度[30]。最后,在這個(gè)模型的輸出層使用余弦相似度函數(shù)來計(jì)算語義相似性度量。
BiLSTM層用于捕獲句子中的語義層面的聯(lián)系,而注意力層用于提取輸入序列中的關(guān)鍵字。這一層的結(jié)構(gòu)設(shè)計(jì)基于HBAM模型[31]和Siamese LSTM框架[32],即通過在Siamese框架中實(shí)現(xiàn)兩層BiLSTM以及單詞注意力層。處理過程就像HBAM那樣,兩個(gè)來自不同缺陷報(bào)告的摘要將首先使用詞嵌入表示,然后BiLSTM根據(jù)上下文來形成完整的句子嵌入。其中,每個(gè)BiLSTM編碼器會(huì)乘以一個(gè)單詞注意力值(為每個(gè)單詞分配一個(gè)權(quán)重),以捕獲句子中的關(guān)鍵點(diǎn);同時(shí),上下文向量的加入也會(huì)進(jìn)一步完善句子的表示。最后,通過每個(gè)隱藏狀態(tài)值h乘以其注意力的加權(quán)總和計(jì)算相似度。
LSTM核心之處在于它的單元狀態(tài)(cell state)允許信息流直接通過整個(gè)鏈而幾乎不發(fā)生線路交互,同時(shí)保持內(nèi)容不變。LSTM做到這一點(diǎn)的方法是,通過結(jié)合ht-1和xt的遺忘門層,首先決定哪些信息將被單元狀態(tài)遺忘,即隱藏層在t-1時(shí)刻的值和輸入層在t時(shí)刻的值,Wg為隱藏層與輸出層之間的權(quán)重矩陣,bg為偏置向量。因此,過濾掉無關(guān)信息的gt可以通過式(1)得到[32]。
gt=δ(Wg*[ht-1,xt]+bg)(1)
之后,需要更新的值由輸入門(input gate)層判斷,從而識(shí)別出哪些新信息要存儲(chǔ)在單元狀態(tài)中。通過一個(gè)tanh函數(shù)層的乘積處理,可以合并向量來查看新的候選值Ct是否要在單元狀態(tài)中更新。將下面等式的兩個(gè)值相乘,從而獲得一個(gè)新的候選值,其中每個(gè)狀態(tài)值還需選擇更新的范圍[31]。
jt=δ(Wj*[ht-1,xt]+bj)(2)
Ct=tanh(WC*[ht-1,xt]+bC)(3)
最后由一個(gè)sigmoid層決定輸出哪些單元內(nèi)容。單元狀態(tài)通過tanh函數(shù)縮放到-1~1,然后通過sigmoid門激活后最終輸出。
如圖1所示,這個(gè)結(jié)合注意力機(jī)制的BERT BiLSTM模型的目的是通過計(jì)算0~1的相似性分?jǐn)?shù)來評(píng)估兩份缺陷報(bào)告的摘要句子在語義上的相似程度,分?jǐn)?shù)越高,摘要句子的語義就越接近。通過給定兩個(gè)摘要句子和一個(gè)標(biāo)簽(是否重復(fù))作為輸入,對(duì)模型進(jìn)行訓(xùn)練。使用BERT作為模型的第一層,這兩個(gè)輸入的摘要句子將分別轉(zhuǎn)換為各自的詞嵌入。第一層將有兩個(gè)輸出,即由每個(gè)摘要句子的詞嵌入表示組成的向量;這兩個(gè)摘要句子的表示將被傳遞到BiLSTM層,該層的輸出也是兩個(gè)表示,BiLSTM層的目的是根據(jù)兩個(gè)摘要的上下文形成完整的句子嵌入,然后每個(gè)BiLSTM編碼器將乘以一個(gè)單詞注意力權(quán)重值以突出顯示句子中的關(guān)鍵點(diǎn);最后BiLSTM層輸出的兩個(gè)向量將傳遞到余弦相似度計(jì)算層以獲得相似性度量分?jǐn)?shù)。
b)基于描述文本生成分布式相似性度量。考慮到缺陷報(bào)告集合中較長的描述文本長度,本文使用基于DM(distri-buted memory)方法的Doc2vec模型來生成描述文本的分布式表示。
介紹Doc2vec模型之前,需要先介紹一下word2vec模型。近年來預(yù)訓(xùn)練的word2vec在各種自然語言處理任務(wù)中常作為上游組件出現(xiàn),word2vec的構(gòu)建很簡潔,是一個(gè)由輸入層—隱層—輸出層組成的神經(jīng)網(wǎng)絡(luò)。這個(gè)三層神經(jīng)網(wǎng)絡(luò)本身是對(duì)語言模型進(jìn)行建模,但也同時(shí)獲得一種單詞在向量空間上的表示。實(shí)際上word2vec有兩種不同的建模方式:a)連續(xù)詞袋CBOW方法,通過前后文單詞來估算當(dāng)前單詞的概率;b)skip-gram方法通過當(dāng)前單詞來估算前后文單詞的概率。這兩種方法都將給定的單詞輸入到參數(shù)初始化的神經(jīng)網(wǎng)絡(luò)中,以得到輸出單詞的預(yù)測概率。同時(shí)語料庫中該給定單詞附近的真實(shí)單詞將作為標(biāo)簽來計(jì)算預(yù)測結(jié)果的損失值;然后以降低損失值為目標(biāo)持續(xù)優(yōu)化神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程,最終獲得了每個(gè)單詞的最優(yōu)嵌入表示,以及計(jì)算不同單詞嵌入表示的向量距離所反映的語義相似性。
然而word2vec忽略了單詞之間的排列順序?qū)ξ谋径温湔Z義的影響,即word2vec僅僅是基于單詞的維度提取語義信息的,缺少了對(duì)上下文的語義分析能力。
為了解決這個(gè)問題,Doc2vec在word2vec的基礎(chǔ)上引入了一個(gè)段落嵌入向量,并結(jié)合詞嵌入向量來獲得預(yù)測結(jié)果。Doc2vec也有兩種方法,分別是分布式記憶DM方法和分布式詞袋DBOW(distributed bag of words)方法[6]。類似于word2vec中的CBOW方法,DM方法通過給定上下文和段落向量的共同預(yù)測目標(biāo)單詞的概率。DBOW方法也類似于word2vec中的skip-gram方法,在訓(xùn)練過程中輸入單詞的上下文被忽略,模型僅通過給定的段落向量去預(yù)測段落中一組隨機(jī)單詞。本文選擇DM方法來提取缺陷報(bào)告的描述文本序列的向量表示,這是考慮到應(yīng)用于大規(guī)模缺陷報(bào)告庫與模型的訓(xùn)練效率,DM方法能夠更快地完成計(jì)算。在DM方法中(圖2),每個(gè)段落都映射成唯一的向量并存儲(chǔ)在段落矩陣D中的各列中,同時(shí)單詞也映射成唯一的向量并存儲(chǔ)在詞矩陣W的各列中。段落向量可以被看做是一個(gè)標(biāo)記,它就像一段記憶,可以記住當(dāng)前上下文中缺少的內(nèi)容,或者段落的主題。然后段落向量和詞向量的求和平均值與參數(shù)矩陣U進(jìn)行計(jì)算,其結(jié)果通過softmax處理后即可得到預(yù)測詞的概率分布。設(shè)有上下文單詞集合C,缺陷報(bào)告文本集合的詞典V,規(guī)模為n,輸出結(jié)果為一維向量y,則預(yù)測詞的概率計(jì)算公式為
p(w|C)=eyw∑v∈Veyv(4)
其中:yw表示向量y中單詞w對(duì)應(yīng)位置的輸出值。
缺陷報(bào)告集合經(jīng)過自然語言預(yù)處理后,將抽取出一個(gè)描述集合以訓(xùn)練Doc2vec模型,如圖3所示。通過缺陷報(bào)告對(duì)的編號(hào),即可從訓(xùn)練后的Doc2vec模型中得到相應(yīng)的兩個(gè)描述表示向量,再由余弦相似度計(jì)算以獲得相似性度量分?jǐn)?shù)。
2.3 結(jié)構(gòu)化屬性的特征提取
Sun等人[10]提出了使用缺陷報(bào)告的分類屬性比對(duì)特征進(jìn)行重復(fù)性檢測;aric'等人[33]提出利用缺陷報(bào)告的文本比對(duì)特征判別重復(fù)性;Lazer等人[4]進(jìn)一步融合了分類屬性比對(duì)特征與文本比對(duì)特征進(jìn)行重復(fù)缺陷報(bào)告的檢測。提取的結(jié)構(gòu)化屬性的特征如表1所示。
2.4 分類模型的訓(xùn)練與測試
為了驗(yàn)證新特征的有效性,也為了避免單一分類器的偏差,本文使用與對(duì)照方法一致的機(jī)器學(xué)習(xí)分類器,分別是K近鄰、決策樹、隨機(jī)森林、樸素貝葉斯、線性支持向量機(jī)(linear SVM)和核函數(shù)支持向量機(jī)(RBF SVM)。
3 實(shí)驗(yàn)數(shù)據(jù)與實(shí)驗(yàn)過程
3.1 評(píng)測數(shù)據(jù)集與指標(biāo)
數(shù)據(jù)集源自Bugzilla大規(guī)模缺陷報(bào)告庫,共有四個(gè)開源項(xiàng)目的缺陷集(http://alazar.people.ysu.edu/msr14data/)。本文選擇Eclipse、Open Office、NetBeans三個(gè)項(xiàng)目進(jìn)行實(shí)驗(yàn)。Mozilla項(xiàng)目中缺少了是否重復(fù)的標(biāo)簽,所以不使用。將重復(fù)缺陷報(bào)告歸納為三元組集合,每個(gè)三元組記錄一對(duì)缺陷報(bào)告的ID號(hào)和是否重復(fù),假定一對(duì)缺陷報(bào)告是重復(fù)的則記錄為(13544,23420,1),非重復(fù)則記錄為(13544,23420,0)。實(shí)驗(yàn)過程中還發(fā)現(xiàn)記錄相同信息的三元組可能會(huì)出現(xiàn)多次等數(shù)據(jù)噪聲。為了排除噪聲影響,降噪處理后的重復(fù)缺陷報(bào)告數(shù)據(jù)集情況如表2所示。
對(duì)于重復(fù)缺陷報(bào)告的檢測,本文采用常見的四個(gè)評(píng)測指標(biāo),即準(zhǔn)確度(accuracy)、召回率(recall)、查準(zhǔn)率(precision)和調(diào)和平均數(shù)F1。在recall、precision和F1的計(jì)算上,本文更關(guān)注分類模型對(duì)重復(fù)類別的預(yù)測能力。四種指標(biāo)的計(jì)算公式為
accuracy=TP+TNTP+FP+TN+FN(5)
precision=TPTP+FP(6)
recall=TPTP+FN(7)
F1=21precision+1recall(8)
其中:TP表示有多少對(duì)重復(fù)的缺陷報(bào)告被判斷具有重復(fù)關(guān)系,F(xiàn)P表示有多少對(duì)非重復(fù)的缺陷報(bào)告被判斷具有重復(fù)關(guān)系,TN表示有多少對(duì)非重復(fù)的缺陷報(bào)告被判斷具有非重復(fù)關(guān)系,F(xiàn)N表示有多少對(duì)重復(fù)的缺陷報(bào)告被判斷具有非重復(fù)關(guān)系。
3.2 實(shí)驗(yàn)設(shè)置與步驟
本實(shí)驗(yàn)與對(duì)照方法一致,從Eclipse、Open Office和NetBeans項(xiàng)目中各隨機(jī)提取5 000個(gè)缺陷報(bào)告對(duì)(重復(fù)對(duì)與非重復(fù)對(duì)比例為1:4)作為訓(xùn)練集,各項(xiàng)目剩余的缺陷報(bào)告作為測試集。三個(gè)項(xiàng)目將分別進(jìn)行訓(xùn)練與測試,并以10次隨機(jī)實(shí)驗(yàn)的平均值作為實(shí)驗(yàn)結(jié)果,從而減少實(shí)驗(yàn)偏差。分類器參數(shù)設(shè)置上也如對(duì)照方法一樣選擇默認(rèn)配置。本文基于Python語言進(jìn)行編程與實(shí)驗(yàn),步驟包括:
a)自然語言預(yù)處理。使用NLTK庫完成分詞、停用詞與標(biāo)點(diǎn)符號(hào)的去除和詞干提取。
b)非結(jié)構(gòu)化屬性的特征提取。獲得預(yù)處理的文本集合后,首先將各個(gè)缺陷報(bào)告的摘要文本置于一個(gè)集合中,生成摘要文本集合;再使用Keras與TensorFlow深度學(xué)習(xí)框架完成BERT BiLSTM-attention模型的訓(xùn)練,并獲得分布式的摘要文本相似度得分集;對(duì)于缺陷報(bào)告的描述文本集合,利用Gensim工具箱即可快速實(shí)現(xiàn)Doc2vec模型的訓(xùn)練;再通過訓(xùn)練后的模型即可獲得分布式的描述文本相似度得分集。
c)結(jié)構(gòu)化屬性的特征提取。使用TakeLab工具包[33]即可快速提取表1的特征。不過其中兩種基于塊索引符號(hào)生成的特征將被忽略,因?yàn)闅w一化處理后所有缺陷報(bào)告的該特征值均一致,即無法用于檢測缺陷報(bào)告。
d)特征融合。在前面的步驟中已經(jīng)得到了分布式的結(jié)構(gòu)化屬性特征集和非結(jié)構(gòu)化屬性特征集,將其拼接在一起后即可得到用于最終檢測的完整特征集。
e)分類模型的訓(xùn)練與測試。由scikit-learn庫即可快速實(shí)現(xiàn)K近鄰、決策樹、隨機(jī)森林和樸素貝葉斯等分類算法。SVM分類算法的實(shí)現(xiàn)由LibSVM工具包完成,參數(shù)設(shè)置均為默認(rèn)值。5 000個(gè)隨機(jī)抽取的完整特征集作為訓(xùn)練集,剩余的完整特征集則作為測試集提供評(píng)測結(jié)果。
4 實(shí)驗(yàn)結(jié)果分析
對(duì)照方法[5]與本文方法在Open Office、Eclipse和NetBeans三個(gè)項(xiàng)目上的實(shí)驗(yàn)結(jié)果如表3~5所示。
三種方法的對(duì)比如圖4~9所示。考慮到F1值是綜合了precision值與recall值所得出的,所以只對(duì)比accuracy值與F1值。首先以D_TS方法作為對(duì)比基線,本文方法在Open Office、Eclipse和NetBeans項(xiàng)目(測試集規(guī)模分別為94 086,242 302和180 581)上的F1值分別平均增長4.70%、2.69%和3.76%,在三個(gè)數(shù)據(jù)集上平均增長約3.7%;accuracy值分別平均增長4.78%、1.74%和3.50%,在三個(gè)數(shù)據(jù)集上平均增長約3.34%。即正確分類的測試樣本數(shù)分別增長4 497、4 216和6 320個(gè)。結(jié)果表明,將傳統(tǒng)的結(jié)構(gòu)化屬性特征與基于神經(jīng)網(wǎng)絡(luò)模型提取的非結(jié)構(gòu)化屬性特征融合后,將顯著提升重復(fù)缺陷報(bào)告檢測的準(zhǔn)確度。
再以文獻(xiàn)[5]方法作為新的對(duì)比基線,F(xiàn)1值分別平均增長2.08%、1.31%和1.72%,即在三個(gè)數(shù)據(jù)集上平均增長約1.7%;accuracy值分別平均增長2.14%、0.86%和1.62%,在三個(gè)數(shù)據(jù)集上平均增長約1.54%,即正確分類的測試樣本數(shù)分別增長2 029、2 084和2 925個(gè)。結(jié)果表明,相比起將非結(jié)構(gòu)化屬性作為一個(gè)整體去提取語義特征,利用非結(jié)構(gòu)化屬性的語言性質(zhì)進(jìn)一步細(xì)化提取方式,從而得到的特征更能反映深層次的語義特征,并進(jìn)一步提升重復(fù)缺陷報(bào)告的檢測效果。
總的來說,本文方法的優(yōu)化歸功于缺陷報(bào)告的特點(diǎn)和D_BBAS方法的特點(diǎn)。缺陷報(bào)告摘要的內(nèi)容是比較短的,通常只對(duì)缺陷現(xiàn)象進(jìn)行簡潔的記錄;相反,缺陷報(bào)告描述則涵蓋了缺陷發(fā)生時(shí)的操作環(huán)境、軟件設(shè)置、具體操作等細(xì)節(jié)。由于這種差異,一些表述可能只會(huì)出現(xiàn)在描述中,另一些表述則只可能出現(xiàn)在摘要中。為了盡可能捕捉這種細(xì)微的差異,分別計(jì)算摘要相似度和描述相似度似乎是一種有效的手段。圖4~9的評(píng)測結(jié)果驗(yàn)證了這種可能性。此外,BERT BiLSTM-attention模型更側(cè)重于提取文本量較短的全局語義特征,而Doc2vec模型則更側(cè)重于文本量較長的場景以提取涵蓋廣泛細(xì)節(jié)的語義特征,從而保證了分開提取的特征有效性。
5 特征判別能力對(duì)比
通過引入統(tǒng)計(jì)學(xué)上的相關(guān)系數(shù),可以驗(yàn)證出根據(jù)本文方法提取的新特征的有效性。相關(guān)系數(shù)值越大,反映該特征對(duì)于分類準(zhǔn)確度的影響越大,本文選擇四種常見的判別力分析指標(biāo):皮爾森(Pearson)相關(guān)系數(shù)、斯皮爾曼(Sperman)相關(guān)系數(shù)、費(fèi)舍爾(Fisher)得分和信息增益。Pearson相關(guān)系數(shù)用于衡量兩個(gè)變量之間的線性相關(guān)程度;Sperman相關(guān)系數(shù)可以反映出特征與類型的相關(guān)程度;Fisher相關(guān)系數(shù)反映該特征的類間方差與類內(nèi)方差的比值;信息增益反映該特征在分類過程中提供的信息量大小。如表6所示,26與27號(hào)為本文方法所提取的特征,它們除了不及20號(hào)特征上的Fisher得分,均優(yōu)于其他特征。
6 結(jié)束語
本文提出了一種融合D_BBAS方法的重復(fù)缺陷報(bào)告檢測,可以根據(jù)缺陷報(bào)告的文本特點(diǎn),更具有針對(duì)性地提取分布式表示特征。這些特征是結(jié)構(gòu)化屬性所蘊(yùn)涵的深層次語義信息,對(duì)其進(jìn)一步處理后得到的摘要對(duì)相似度與描述對(duì)相似度,作為兩個(gè)新的結(jié)構(gòu)屬性特征,與傳統(tǒng)的非結(jié)構(gòu)屬性特征融合后參與分類器模型的訓(xùn)練。相較于對(duì)照方法,本文方法在真實(shí)項(xiàng)目的大規(guī)模重復(fù)缺陷報(bào)告數(shù)據(jù)集上的評(píng)測結(jié)果取得了明顯改進(jìn),驗(yàn)證了本文方法的有效性。
參考文獻(xiàn):
[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]曾杰,賁可榮,張獻(xiàn),等.融合文本分布式表示的重復(fù)缺陷報(bào)告檢測[J].計(jì)算機(jī)工程與科學(xué),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]董美含.基于缺陷報(bào)告和源代碼的相似缺陷識(shí)別方法[D].哈爾濱:哈爾濱工業(yè)大學(xué),2018.(Dong Meihan.Similar bug identification method based on bug report and source code[D].Harbin:Harbin Institute of Technology,2018.)
[15]范道遠(yuǎn),孫吉紅,王煒,等.融合文本與分類信息的重復(fù)缺陷報(bào)告檢測方法[J].計(jì)算機(jī)科學(xué),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]陳俊潔,胡文翔,郝丹,等.一種靜態(tài)的編譯器重復(fù)缺陷報(bào)告識(shí)別方法[J].中國科學(xué):信息科學(xué),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.