劉曄暉,趙海燕,曹 健,陳慶奎
1(上海市現(xiàn)代光學系統(tǒng)重點實驗室,光學儀器與系統(tǒng)教育部工程研究中心,上海理工大學光電信息與計算機工程學院,上海 200093)2(上海交通大學 計算機科學與技術系,上海 200030)
開源軟件開發(fā)已經成為一個趨勢.在開源社區(qū)中,開發(fā)者需要共同參與Issue(問題)解決過程(Issue Resolution Process).如果Issue持續(xù)得不到解決,將大大影響整個軟件項目的進度,也將挫傷開發(fā)者的積極性.因此,為每一個Issue來尋找潛在的感興趣的開發(fā)者具有非常顯著的意義,也引起了學術界的興趣.近年來,一些學者提出了不同的方法,他們從Issue內容的相似性[1-3]、Issue提出者與開發(fā)者之間的社交關系[4,5]以及Issue的特征,例如是否包含代碼等[6,7]出發(fā)來提出相應的Issue參與者推薦方法.
Issue解決過程本質上是一個軟件維護過程.早在1976年,Swanson等人就對軟件維護進行了分類[1].后來,一些研究者又加入了新的分類.在研究者們的推動下,ISO/IEC 14764的標準中對不同的維護類型進行了定義,其中,糾正性維護的目的是改正已經發(fā)現(xiàn)的錯誤,而適應性維護是為了增加軟件新功能,完善性維護則為了提高軟件的性能,預防性維護是對已開發(fā)號的軟件進行進一步的更改,目的是避免將來再出現(xiàn)錯誤.
不同的維護活動類型,即不同的Issue類型對于Issue解決過程中開發(fā)者的參與應該存在潛在的影響.因此,本文提出了3個相關的問題,并通過設計相應的模型來進行回答:
1)我們能否對Issue的類別通過計算機進行自動的類別判斷?
2)在Issue解決過程中,是不是某些開發(fā)者會傾向于參與特定類別的Issue的解決過程?
3)如果前兩個問題成立,那么把Issue的類別信息自動添加后,能否提高參與者推薦算法的性能表現(xiàn)?
為此,我們在Github上挑選了若干個代碼倉庫,這些代碼倉庫具有一定的流行度,也具有一定的代表性.為了開展我們的經驗性研究,我們通過爬蟲獲取了這些倉庫中的Issue信息.數據集的詳細信息見表1.

表1 Issue數據集的信息Table 1 Information of Issue dataset
有不少人對Issue進行了類別研究,本文中我們參考了Murgia等人對Issue的分類[8].目的是要對Issue進行自動的類別判斷,這顯然是一個有標簽的分類問題.我們提出并實現(xiàn)了一種基于卷積和注意力機制的Issue自動分類深度神經網絡模型;在此基礎上,我們對開發(fā)人員是否對Issue的類別具有傾向性進行了研究,結果證明,某些開發(fā)者在參加Issue結果過程時,會傾向于選擇特定類型的Issue;基于上述結果,我們對Issue進行特征化表示,同時對開發(fā)者也根據歷史數據進行向量化表示,在此基礎上,可以計算開發(fā)者對某一Issue的興趣,從而實現(xiàn)針對特定問題的開發(fā)者的自動推薦.
后面的文章的章節(jié)組織方式為:在第2節(jié)中我們對Issue解決過程的研究現(xiàn)狀、特別是開源軟件開發(fā)中的Issue解決相關研究進行了介紹;第3節(jié)提出了基于深度學習的Issue分類模型;第4節(jié)對開發(fā)者在志愿參與Issue解決過程時是否對特定的Issue類別具有傾向性進行了研究;第5節(jié)介紹了開發(fā)者推薦算法;第6節(jié)介紹了推薦實驗的結果,并圍繞這些結果進行了討論.最后,文中對將來可以開展的工作進行展望.
在開源社區(qū)中,經常會累積大量的未解決的Issue.等待開發(fā)者主動來解決這些Issue通常耗費大量的時間,甚至于某些Issue無人問津.將推薦方法運用到開源社區(qū)的Issue解決過程中,有助于提高Issue解決的速度、Issue解決的比例以及Issue解決的質量.為此,許多研究者們進行了不同的探索.例如,Kamineni等人提出了一種估計Issue語義相似度的方法以搜索相似的Issue[9,10];Dong等人設計了一個回答者推薦系統(tǒng),它將Issue推薦給有針對性專業(yè)知識、能夠回答該Issue的開發(fā)者,他們同時還揭示了對Issue進行及時處理可以促進提問者和回答者之間的互動性,從而能夠進一步激勵開發(fā)者參與到Issue解決過程中去并積極地改進他們的答案[11];Wang等人同樣采用了語義技術來推薦參與者[12].雖然這些方法也能夠為Issue來推薦開發(fā)者,但是本文研究的是Issue類別如何影響開發(fā)者的積極性,以及自動化標注Issue類別是否能夠提高推薦效果,在這一方面,目前尚無其他人的研究.
對Issue進行分類在機器學習上是一個分類問題.同時,我們所依據的又主要是Issue相關的文本,因此它可以歸為文本分類問題.在信息檢索等領域,文本分類技術也是其中的一個核心技術.利用機器學習技術對文本進行自動分類已經經過了較長時間的研究,有許多方法被提了出來.我們可以利用文本分類的方法對Issue進行分類.例如,Fan等人提出根據Issue的文本摘要對Issue進行分類,經過實驗,他們發(fā)現(xiàn)支持向量機能夠取得較好的性能[13].
然而,在現(xiàn)實中,文本具有多樣性,這容易造成傳統(tǒng)的機器學習文本分類器的泛化能力不強.另一方面,如何選取合適的特征進行文本分類也是一個挑戰(zhàn).而深度學習的非線性表達能力,其逐層進行特征提取的工作過程能夠較好地解決文本分類中的一些技術挑戰(zhàn),所以受到了普遍應用,例如,Fan等人按照word2vec模型從大規(guī)模語料庫中訓練漢語單詞向量,然后基于詞向量獲得漢語問題語義特征向量[14];Liu等人則提出了一種基于LSTM-CNN的問題答案匹配方法[15].
目前,在對Issue進行開發(fā)者推薦中,還沒有系統(tǒng)的考慮問題類別對開發(fā)者積極性的影響.為此,首先要進行的一個研究是是不是開發(fā)者確實對Issue的類別具有選擇性.為了對這一假設進行檢驗,我們使用的是基于關聯(lián)規(guī)則挖掘的方法.如果能夠發(fā)現(xiàn)具有顯著性的關聯(lián)規(guī)則,則說明這個假設對于某些開發(fā)者是成立的.而開發(fā)者推薦的基本過程是針對每一個Issue,去計算每個開發(fā)者與這個Issue的匹配程度,匹配程度高,那么這個開發(fā)者就可以得到推薦.為此,需要從每個開發(fā)者過去參與的Issue中學習開發(fā)者的特征.
為了進行文檔分類,在機器學習中,許多模型都被嘗試使用,例如邏輯回歸,支持向量機、樸素貝葉斯、決策樹等.在應用這些模型前,我們首先需要進行特征提取和特征選擇.特征選擇的結果對最后的性能具有非常顯著的影響,而特征選擇又高度依賴于經驗和對業(yè)務知識的理解.所以特征選擇是一個困難的工作.深度學習方法能夠在原始特征表示的基礎上,通過大量的參數學習自動獲得抽象的、有效的特征,從而降低了特征工程的工作量和難度.因此,深度學習受到了普遍的關注.
盡管深度學習也已經成功的應用于文本分類的任務,但是并沒有針對Issue分類的深度學習模型.本文中使用了一種深度學習模型,它結合了詞嵌入、卷積神經網絡,并添加了注意力機制,從而實現(xiàn)了對Issue的自動分類.
在該模型中,它包含了以下的主要步驟:
1.對數據進行預處理.首先對收集到的Issue的標題以及它們的內容進行整理和清洗,先把Issue的標題和描述文本合并成一個文本,然后對該文本進行分詞,去除停用詞、數字和非字母,將文本轉成小寫,提取詞干等一系列文本的操作.
2.訓練與驗證.按照Issue的標號對數據進行排序.然后,將整個數據集平均分割成11份,通過“十折交叉驗證”的方法在數據集上進行模型的訓練與驗證[16].該部分又可以分為3個小步驟:
1)利用訓練集訓練一個分類模型,這里我們采用了CNN模型來獲取問題的特征.
2)通過采用注意力機制對CNN模型提取出來的文本特征進行進一步的學習.
3)在驗證集上進行驗證,將測試集中的Issue進行同樣的文本處理后作為輸入,從而可以獲得文本類別.
3.對分類模型的預測效果進行測試.由于前面使用了“十折交叉驗證”對模型進行了訓練,所以我們使用10輪預測結果準確度均值作為該分類模型的最終評價效果.
本文所提方法的核心是基于混合3層卷積神經網絡和注意力機制的問題分類方法(Atten-3CNN),其模型結構如圖1所示,該模型的思想主要包含以下3個方面:

圖1 Atten-3CNN模型結構圖Fig.1 Atten-3CNN model structure
1.文本向量化.假設一個文本中包含的詞語個數為l,詞匯表大小為D,如果對文本進行one-hot編碼需要的矩陣為l×D,通過word2vec進行詞向量化(分類器的詞向量維度為d),得到的文本可以用l×d表示.
2.采用3層CNN提取文本特征.根據Song等人的研究結果可知,采用3、4、5的卷積核使CNN分類效果更好[17].因此,我們選用了3×d、4×d、5×d的卷積核對l×d矩陣進行卷積操作,也就是用矩陣Wj×d(j=3,4,5)與文本矩陣進行相乘,如公式(1)所示.
Sj=Wj×d·S[i:i+j-1]
(1)
其中,j表示卷積核大小,Sj∈Rl-j+1表示進行卷積后的特征向量,i=1,…,l表示文本矩陣的行下標.
接著,將3層卷積操作后得到的文本特征向量進行池化操作.此處,我們對每一個特征向量取其最大值:
vj=max(Sj)
(2)

3.注意力機制(Attention).通過注意力機制來調整特征權重.該過程主要分為權重學習和文本特征更新兩步:
1)權重更新.對M個卷積核抽取得到的特征,通過學習算法自動調整各個特征對最后分類結果的影響程度(即權重aj),Attention模塊如下:
cj=tanh(Wj?Vj+bj)
(3)
aj=softmax(cj)
(4)

2)更新文本特征.新的文本特征是把注意力權重與CNN提取的文本特征進行相乘,如公式(5)所示:
(5)
4.用交叉熵損失函數(categorical_crossentropy)訓練模型[18].交叉熵可以衡量兩個概率分布的差別,此處,我們用來計算當前訓練得到的概率分布與真實分布的差異情況,其計算如公式(6)所示.
(6)
交叉熵值越小,兩個概率分布就越接近,我們的預測也就越準確.
根據Murgia等人在實際問題中的研究,Issue可以分成糾正、適應、完善或預防性維護等類型.在提出Issue時,現(xiàn)代開源平臺經常允許提出者添加一些標簽,而這些標簽與Issue類型有一定的關系.表2顯示了標簽和類型的對應關系.

表2 Issue標簽/維護類型對應關系Table 2 Table of corresponding relationships between Issue-labels and maintenance-type
而在Github上,部分Issue上是有標簽的,依據這些標簽就可以對Issue來分類.我們依據這些標簽構建了訓練集,訓練集中Issue類別分布如圖2所示.

圖2 訓練集Issue類別分布情況Fig.2 Distribution of Issue categories on the training set
我們對Issue分類模型進行了的對比分析,其結果如表3所示.其中,基于深度學習進行的文本分類均采用keras庫中的categorical_crossentropy對損失函數進行訓練.我們設定epochs=10,batch_size=64,圖3顯示了Atten-3CNN模型的損失函數在每一輪訓練中的變化情況.

圖3 Atten-3CNN模型損失函數變化情況Fig.3 Atten-3CNN model loss function changes
由表3可知,Atten-3CNN獲得了最高的預測準確度.這表明,對Issue進行自動分類是可行的.

表3 分類算法準確度Table 3 Classification algorithms accuracy
人們在作出各種選擇時,都有不同的偏向性.例如有些人喜歡解決相對容易的問題,有些人則喜歡解決具有較高挑戰(zhàn)性的問題.這就促使我們提出我們的假設,不同的人員可能對不同的Issue類型具有選擇性.
我們采用關聯(lián)規(guī)則挖掘的方法檢驗這一假設是否成立.我們通常用支持度、提升度、置信度來衡量關聯(lián)規(guī)則的質量[19].規(guī)則SupX→Y表示事件包含X和Y的概率,規(guī)則ConfX→Y表示X發(fā)生下Y發(fā)生的概率;對規(guī)則進行置信度分析可以來確定前提和結論是誰影響誰:如果規(guī)則在方向(X→Y)上的置信度顯著高于在方向(Y→X)上的置信度時,我們說X影響Y而不是Y影響X;Lift是由規(guī)則的置信度以及其結果的支持度的比值,如果Lift=1,則表示X和Y沒有相關性;如果Lift<1,則說明規(guī)則沒有參考價值;如果Lift>1,則表示我們獲得的規(guī)則有價值.
我們在文獻[20]一文中用該方法成功地研究了Issue的特點與開發(fā)者是否愿意參與該Issue解決過程的關系.此處我們單獨研究開發(fā)者對Issue類型的選擇性.
表4-表7顯示了各種Issue類型與開發(fā)人員之間的規(guī)則.

表4 issue_category=adaptive→user類型的關聯(lián)規(guī)則Table 4 Association rules of type issue_category=adaptive→user
表4列出了針對適應性類型的Issue的關聯(lián)規(guī)則.例如,規(guī)則1中表明,在“realm-cocoa”中,如果Issue類型是適應性的,開發(fā)人員“kevinmlong”參與的概率將比一般人增加324%.
同時,我們也檢驗了其他Issue類型上開發(fā)人員的選擇性,結果列在了表5-表7中.這些結果表明對于部分人員,確實對Issue類型具有顯著的選擇性.當然,對于另外一些人員可能還沒表現(xiàn)出顯著的選擇性.這就啟發(fā)我們,對于Issue類型敏感的開發(fā)人員,我們在推薦時需要重點考慮Issue類型與他的匹配.

表5 issue_category=corrective→user類型的關聯(lián)規(guī)則Table 5 Association rules of type issue_category=corrective→user

表6 issue_category=perfective→user類型的關聯(lián)規(guī)則Table 6 Association rules of type issue_category=perfective→user

表7 issue_category=preventive→user類型的關聯(lián)規(guī)則Table 7 Association rules of type issue_category=preventive→user
經過Issue類別自動分類后,可以把每個Issue表示為以下的兩種形式:
I=[textLen,codeyes,codeno,inner,outer]
(7)
I=[textLen,codeyes,codeno,inner,
outer,adap,corr,perf,prev]
(8)
公式(7)表示的是不帶Issue類型的表示,公式(8)是帶Issue類型的表示,為了便于表達,adap表示適應性Issue,corr表示糾正性Issue,perf表示完善性Issue,prev表示預防性Issue.
為了對開發(fā)者的特征進行表達,我們采用了以下的方法:
1)對屬性取值進行歸一化處理:各項屬性的數值范圍大小不一在后續(xù)計算中將產生不利影響.因此,把不同范圍的屬性取值進行歸一化,其計算方法如公式(9)所示:
(9)
得到的x′ij為第i個樣本的第j個屬性的數值(i=1,2,…,n;j=1,2,…,m).
2)獲取第j個屬性下第i個樣本占該指標的權重:
(10)
3)計算第j個屬性的熵:
(11)

4)計算信息熵的冗余度,它代表了在該屬性上的差異性:
dj=1-ej,j=1,…,m
(12)
5)獲得各項屬性的權重:
(13)
得到了每個開發(fā)者的特征表示后,我們需要計算Issue與各個開發(fā)者的匹配程度,匹配程度越高的就越優(yōu)先推薦.由于Issue也與開發(fā)者特征一樣表示成了相同維度的特征向量,所以可以計算這兩個向量的內積,從而得到匹配的分數.我們?yōu)檫@個Issue推薦最高得分的N名開發(fā)者.
為了驗證加入Issue類別自動分類后的推薦效果,我們進行了一系列的實驗.
此處,最重要的是召回率,它的計算方式如公式(14)所示.
(14)
其中,Issues表示Issue測試集,R(i)表示Top-N推薦列表,T(i)表示實際中參與Issue討論過程的開發(fā)者集合.
為了分析我們的方法對于不同支持度下的關聯(lián)規(guī)則發(fā)現(xiàn)的Issue類型敏感開發(fā)者的效果,我們獲取了支持度Sup(X→Y)=0.1%和Sup(X→Y)=0.2%時的Issue類型敏感開發(fā)者.然后依據Issue與開發(fā)者特征的匹配得分,將得分最高的Top-N個開發(fā)者進行推薦,表8中是支持度為0.1%和0.2%下的不同結果.
表8中的結果表明,提高支持度可以選出對Issue類型更有選擇性的開發(fā)者,我們參考了他感興趣的Issue類型進行推薦,就更有針對性,因此性能也能得到進一步的提高.

表8 Sup=0.1%和Sup=0.2%時Issue類型敏感人群Top-N推薦的RecallTable 8 Recall of Top-N recommendation for problem-sensitive people when Sup=0.1% and Sup=0.2%
在過去的研究工作中,研究者們采用了計算Issue表達的相似度計算或基于評論網絡的社交關系進行Issue參與者推薦[20].將我們的方法與這兩種基本算法進行性能對比.我們的方法在Top-6,Top-8和Top-10上都比對比的兩個算法的最佳效果要好.其中,在realm-coco倉庫上,我們的方法的召回率提升了16.71%,而在jasmine倉庫上召回率提升了5.46%;在istio倉庫上,召回率提升了13.59%,在metabase倉庫上效果最為顯著,提升了22.5%的召回率.僅僅在elixir倉庫上不太顯著,提升了0.78%的召回率.
此外,為了顯示Issue類別對開發(fā)者的影響,我們比較了加入Issue類別(sensitive with issue type)以及不加入Issue類別(sensitive without issue type)時針對Issue敏感人群的Top-N的推薦效果.同時,我們針對所有人群也進行了相同的實驗,結果如表9所示.
為了更清晰的展示結果我們將表9中的數據畫成圖4.從圖中可以看出,對于Issue類別敏感人群,在所有的倉庫上加入Issue類別比不加入Issue類別可以獲得更高的推薦性能.同時,從圖4(c)和圖4(d)可以看出針對Issue不敏感人群加入Issue類別也可以提高推薦性能,因此在參與者推薦系統(tǒng)中,應該針對開發(fā)者對Issue類別的敏感度選取合適的候選者進行推薦.

表9 不同人群Top-N推薦的RecallTable 9 Recall of Top-N recommendation for different groups

圖4 不同算法下參與者推薦Recall比較Fig.4 Comparison of participant recommendation Recall under different algorithms
由于Issue是有一定的類別的,因此本文針對添加Issue的類別可能對于開發(fā)者推薦有一定的幫助的猜想進行了驗證.為了進行這個驗證,我們提出了一種Issue自動分類的深度學習模型,經過測試,該模型具有一定的準確性,可以得到應用.然后,我們進行開發(fā)者推薦的研究.我們發(fā)現(xiàn),某些開發(fā)者對Issue類別具有一定的敏感性,對這樣一類開發(fā)者推薦特定類別的Issue能夠提高推薦效果.我們也發(fā)現(xiàn),對于一些類別不敏感的的開發(fā)者,加入問題類別并不起到效果.這也說明,開發(fā)者確實具有不同的特性,需要針對他們的特性來提供相應的推薦模型.
本文的工作還有許多可以拓展的空間,例如在本文提出的方法中我們選取了部分特征來刻畫開發(fā)者的模型,然而,還存在一些潛在的特征可能對開發(fā)者參與Issue解決存在重要的影響.在未來的工作中,我們可以加入更多的特征,或者利用一些特征選擇的方法,來找到更好的特征以提高開發(fā)者推薦的效果.