沈明珠 劉 輝
(北京理工大學計算機學院 北京 100081)(3120181025@bit.edu.cn)
隨著軟件開發技術的飛速發展,軟件開發知識量也越來越大.因此,即便是高級程序員也很難掌握所有的軟件開發知識.在碰到技術難題時,程序員常用的策略之一是在諸如Stack Overflow等技術社區上請求幫助,從而有效減少時間消耗[1].
技術社區問題的解決主要依賴于互聯網上的其他程序員[2].所以,基于互聯網的群體智能是解決程序員面臨的難題的關鍵所在.社區問答系統是基于互聯網的群智化軟件開發的一個重要組織形式.
然而,在技術社區上提出的問題并不一定會獲得滿意(有效)的答案.因此,提問之后被動等待答案可能并不總是最佳的應對策略.為此,本文提出了一個基于深度學習[3]的問題解答狀態預測方法,根據問題的文本信息和用戶特征去分析在論壇發布的問題是否能夠及時獲得滿意答案.技術人員在碰到技術難題時,需要根據成本與風險從眾多可選的技術資源中選擇一個或幾個最合適的資源進行求助.這些技術資源包括技術論壇、同事、團隊領導、公司技術專家等.其中團隊領導和公司技術專家一般日程安排緊張,只有其他途徑無法解決的時候才會轉而尋求他們的幫助.技術人員在發布問題時可使用本方法預測,如果發現不能獲得滿意答案,提問者可以及時轉向其他更可靠(但通常也更昂貴)的技術來源以尋求幫助,比如向團隊領導或者公司技術專家,甚至外部付費的咨詢公司等尋求幫助.提問者也可以選擇更改問題標題內容、更換問題類型標簽等方法,從而改善問題質量,提高問題被解答的可能性.
對社區問答的研究是目前群智化軟件開發領域的一個熱點.現有研究主要集中于社區問題內容學習分類[4]、問題質量評估[5]、滿意答案推薦等.但是目前尚未出現針對問題解答狀態的預測方法.
本文的主要貢獻有2個方面:
1) 提出了一種基于深度神經網絡的方法,通過問題標題文本、用戶信息等問題特征來預測問題是否能獲得滿意答案.
2) 實現了提出的方法并基于Stack Overflow的真實數據進行了實驗驗證.實驗結果表明該方法可以有效預測技術問題的解答狀態,其性能顯著高于隨機猜測,并高于KNN與FastText.
社區問答網站內容的分類與分析是目前國內外學者的研究熱點[6].文獻[7]研究的是通過問題答案的來源來進行質量評估,越是權威網站提供的答案,令人滿意程度越高;文獻[8]提出現在每天提出的眾多問題并未被發送到適合回答它的用戶那里,因此導致新問題不能夠被及時回答.于是綜合用戶在技術論壇的歷史問答數據中的活躍程度與用戶權限和其參與的問題構建用戶簡檔,從而進行專家推薦;文獻[9]則是預測問題是否會被關閉.由于論壇問題過多,并且問題本身不能保證質量(比如問題重復、個例化、問題沒有建設性、或者不是真正的問題等等),論壇通常會讓用戶對一個問題是否要被關閉進行表決投票.當支持率達到一定值時該問題就可以被關閉.于是該實驗提出可以根據這種特性來預測問題是否會被關閉.許多實驗根據非文本特征比如問題長度、用戶年齡、問題標簽數量等特征來進行分類并預測;文獻[10]則是從問題本身質量出發,去預測問題獲得的分數.其中使用了spearman秩相關系數去測試不同特征與問題分數之間的依賴性,并主要研究了4個有高相關性的變量,有問題瀏覽次數、答案數、滿意答案的分數、問題的贊同數.通過SPSS進行分析,以了解關系因變量與那些相關系數低的因素之間的關系,總共選擇了16個變量來說明對問題分數影響的原因,并選出了上述4個影響最大的變量,但是這4類的得分在統計上有所不同.該文在最后提出可以學習這些因變量之間的共同點,通過運行基于某些規則的分類器來實現它們之間的特征區分.
社區問答中關于自動問答推薦的研究也非常多,如何從多個候選答案中識別推薦出滿意答案是現在社區問答發展的方向之一.文獻[11]則使用支持向量機、決策樹、樸素貝葉斯等3種算法來去預測用戶滿意度,首次提出了關于用戶“個性化”需求的概念,但是該預測是在已回答的答案中判斷是否能夠滿足用戶提出者;文獻[12]同樣通過答案的淺層語言文本特征如最長句子長度、平均句子長度、單詞的單詞長度和用戶特征進行比對,從而顯著對比出滿意答案與一般答案之間的不同點.滿意答案文本內容會更長,會將常用詞匯轉為生僻的單詞,所包含的單詞也會更長,但是僅憑這些語言特征去預測效果并不是非常高.該文使用了10折的交叉驗證在眾多技術論壇上進行比對,發現不同技術論壇的語言區別較大,因此選擇合適的特征去進行預測非常重要.
隨著數據量的不斷上升,單純的使用統計工具與線性分析已經不能滿足人們的需求,深度學習技術已經開始運用于社區問答中;文獻[13]研究的是圖像類問題答案對.通過識別能力現在可以與人類視覺能力相媲美的深度卷積神經網絡進行目標識別,其效果在諸如imagenet large scale visual等基準測試中較優,可回答比如“這個圖像中的主要對象是什么”一類的問題;建立系統給圖像和基于文本的問題,是解決識別主導對象或活動之外的圖像的一種自然方法[14],最終輸出一個基于文本的答案,這被稱為開放式視覺問題解答(VQA)問題.它要求將計算機視覺與自然語言處理相結合.實驗描述了一個基于貝葉斯框架進行答案類型的預測模型,其中使用了名為skipthought的矢量,以某種方式將句子編碼成矢量句子并保留顯著語句信息,在多個公開可用的VQA數據集上進行測試.
綜上所述,國外關于使用Stack Overflow技術論壇數據進行分析研究較多,例如問題質量評估等領域.現有工作大多研究預測問題內容質量、答案內容質量的評分,或者基于用戶的問題內容的解答專家的推薦,但對于問題的解答狀態的預測工作尚未展開,因此本文提出一種方法對問題解答狀態進行預測.
文本分類問題在自然語言處理(Natural Language Processing, NLP)領域占據著重要地位.它創立在20世紀50年代,隨著專家系統的建立,文本分類有了新的進步.但這種方法不僅費時費力,而且覆蓋的范圍和準確率都非常有限.隨后發展到90年代時,出現許多能夠解決大規模文本的文本分類方法,下面是3種常用的分類算法:
1) Rocchio算法.Rocchio[14]方法是情報檢索領域最經典的算法[15].該算法的基本思路是通過計算同一個類別里的樣本文檔,得到新向量,該向量是該類別最具代表性的向量表示.將給出的測試文本對其進行判斷時,比較新文本與這個中心向量的相似度,判斷向量之間距離,進而可以確定新文本屬不屬于該類別.Rocchio算法被改良之后不僅判斷屬于這種類別的文本(正樣本),也判斷不屬于這個類別的文本數據(負樣本).這種算法比較簡單,但是對錯誤數據毫無抵抗力,無法包容數據噪聲[16].
2)K-近鄰算法KNN.KNN[17]方法是先給定待分類文本,再計算待分類文本與訓練樣本集中各個樣本的文本相似度.根據計算結果找出N篇與待分類文本距離最近最相似的文本,根據這N篇文本所屬的類別判定待分類文本的所屬類別,是一種基于實例的分類方法.這種判斷方法很好地克服了Rocchio算法中無法用一條直線準確劃分2類數據的缺陷,但是比較過程的代價較大.
3) 支持向量機(support vector machine, SVM)方法.樣本數據較大時使用SVM方法[18],它是由Cortes等人于20世紀90年代提出的,SVM利用了統計學習理論的VC理論.并且利用結構風險最小化原理,在文本分類方面可以實現降維和分類.SVM學習的是壓縮成的有限數量的信息,為使泛化能力達到最優,就要兼顧模型復雜性與模型的學習能力.
由于文本表達的形式非常麻煩,表達成矩陣形式時維度又高,特征表達能力很弱,同時神經網絡不適應于處理稀疏矩陣表達的數據,因此如何解決文本表示變為一大難題.
Google Mikolov的文獻[19]提出一個工具包Word2Vector,促進詞分布式的發展,使用Word2Vector工具包能夠對語義進行較全的保留效果,極大地推進了文本分析的進程.但分布式表示很早就被提出,能夠將每個詞表達成實數向量.礙于神經網絡數據的需求性,這個實數向量需要有適當的維度,不能稀疏又要連續,也就是詞嵌入(word embedding).詞向量的提出將文本從神經網絡難以處理的方式,變成了連續稠密數據,這種數據形式類似圖像、語音,是訓練語言模型的附加產物.再利用卷積神經網絡、遞歸循環神經網絡等網絡結構自動獲取特征表達能力.深度學習逐漸在自然語言處理上取得令人矚目的研究成果,其理論能夠很好地應用于文本分類當中,其中最新最令人關注的循環神經網絡主要解決了如何處理時間序列的變化.
雖然卷積神經網絡、遞歸循環神經網絡用于文本分類時結果非常較好,但是有一個不足的地方就是其表達的結果不能讓人直接理解、解釋起來也不容易,尤其是在分析壞測試案例時尤其麻煩.注意力(attention)機制[20]是NLP領域常用的建模長時間記憶機制,其基本思想就是目標語言端的詞往往只與源語言端部分詞有關.可以很直觀地給出每個詞對結果的作用,非常適用于Seq2Seq模型.Bahdanau等人使用雙向RNN(bidirectional RNN),成功使得一個詞的隱層狀態不僅壓縮了其前面的詞的信息,還壓縮了后面的詞.更加關注這一個詞語周邊的詞,使得RNN能更好地表達當前的輸入.結果證明,引入attention能夠解決不同長度的源語言句子都用相同固定維度的壓縮向量表示所帶來的性能瓶頸,其魯棒性[21]更好.
有別于使用傳統機器學習的文本分類方法,本文將使用最新的深度神經網絡技術,進而挖掘更加復雜與潛在的聯系.本文在學習問題標題的短文本信息的同時,也利用用戶特征進行分析.在訓練集的收集方面,本文使用自動化的方法去解析獲取社區的數據集,并對獲取后的問題特征進行標注.
本節詳細介紹面向技術社區的問題解答狀態的預測方法.其中,2.1節給出本文所提出方法的概覽介紹,之后的各小節將詳細介紹該方法的各個關鍵步驟.
本文提出的面向技術論壇的基于深度學習的問題解答狀態預測方法如圖1所示.
1) 利用Stack Overflow論壇的有關問題、用戶的多個存儲文件作為語料庫,經過分析處理將數據轉化為文本型特征與數值型特征.
2) 根據問題是否有滿意答案的標志和問題回答的數量對內容進行標注,對文本特征進行還原詞根、刪除停用詞和標點分詞等預處理;然后使用Word2Vector進行訓練生成詞向量,將生成的詞向量與數值型特征作為神經網絡的輸入.
3) 抽出有滿意答案標志的問題作為正樣本集合,其余問題隨機抽出作為負樣本集合.分類器的預期輸出為樣本的標注標簽也就是本文的預測內容(即問題是否會獲得滿意答案).分類器經過多次迭代訓練后可以獲得最終訓練好的深度學習分類器.
4) 通過訓練好的分類器,輸入給定的待預測的技術問題的相關特征,得到對于提出問題的解答狀態的預測結果.
實現細節將在2.2,2.3節中進行詳細介紹.

Fig.1 Overview of prediction methods for answer status of technical forum question圖1 技術論壇問題解答狀態的預測方法概述
由于將有關問題的全部內容和提問者等相關信息直接輸入深度神經網絡分類器會造成模型學習難度過大,且問題描述內容本身過長,在訓練過程中極易造成數據損失.因此我們需要對輸入內容進行選擇與預處理操作.從語料庫中舍棄一部分對分類器訓練過程無價值的相關特征,從而降低神經網絡模型的構建與訓練難度.
同時為防止因特征過多而導致的維度爆炸問題,本文經過多次比較與考量,選取了與技術問題解答狀態預測相關的問題特征作神經網絡分類器輸入的一部分,而文本特征只提取了技術問題的標題.
盡管已經刪除了一定的無關的問題特征,但這些提取特征之間的關聯關系以及輸入特征和輸出預測結果之間的潛在映射關系仍然需要進一步分析.因此,我們將提取后的原始特征輸入分類器進行映射和學習,從而使最終輸出和問題樣本標簽的分類結果盡量相似.
從第1部分中我們可以知道,非文本特征對于問題狀態影響很大,因此除問題標題外我們還綜合了6個文本和非文本特征,從不同角度體現技術問題的特性,并且參考提問者的信息,從而能夠在問題內容類型、包含代碼、用戶貢獻等方面更全面的表現問題的特征.
表1展示了所選問題特征的詳細信息.需要聲明的是,這里的tag并不是文本形式,而是長度為50位的全0數組.經過對文本的分析我們選取了出現頻率最高的前50位的問題標簽(表明了問題所屬的類型,如Java,Python),當問題用戶標注標簽時,數組中對應位置上的值則置為1,未出現則繼續設置為默認值0.選取前50位的原因是經過對問題標簽的分析,Stack Overflow的庫中共存有上萬個標簽,極大多數標簽只出現了一次,因此選取指定樣本區間中至少出現1萬次以上的標簽,過長的問題類型標簽同樣容易引起維度爆炸,最終定為50.

Table 1 Features of Selected Technical Questions表1 選取的技術問題特征
表1中除了title作為文本型數值輸入,其余特征輸入形式都為數值型,這些特征共同組成了本文所提出方法的輸入:
input=
(1)
numeric_features={code,tag,creation,
reputation,upvotes,downvotes},
(2)
其中,numeric_features是所有數值型問題特征的集合,共55個值,則是每個問題的標題文本,也是本文方法中唯一字符型的輸入.
為了能夠探索發掘出問題標題文本內容的深層語義關聯與含義,本文使用了Mikolov等人提出的著名的詞向量化模型Word2Vector,將標題中的詞語映射到高緯向量空間[22],以詞向量在高維空間中的分布來揭示詞與詞之間的相似性關系.作為自然語言處理領域的重要工具,Word2Vector構建了一個以給定的文本作為輸入輸出的神經網絡.在進行訓練之后,可以利用此模型的隱含層將詞語轉化為稠密向量,實現以向量相似性來表示語義相似性的目的.
我們利用大量的經過基本文本預處理的問題標題作為語料庫,對Word2Vector模型進行訓練,構建了一個針對技術社區問題標題文本的向量空間.該過程根據3個步驟對神經網絡分類器輸入分別進行預處理.
1) 去除標題中的謂詞與冠詞,對問題標題進行分詞,將問題拆分為多個邏輯單字.
2) 將邏輯單字使用nltk語言包進行統一小寫和詞根還原的操作.
3) 利用已訓練好的Word2Vector模型將各邏輯單字分別映射為高維空間中固定長度(200維)的詞嵌入向量(word embedding).
由于程序語言中涉及符號標志較多,例如C++、C#等語言中包含的符號,因此在預處理過程中只針對點號、逗號、冒號、感嘆號、疑問號共5種用于斷句的符號進行刪除,其余符號則不予處理.
本文所提出的基于深度神經網絡的分類器結構如圖2所示:

Fig.2 Classifier based on neural network圖2 神經網絡分類器
如2.2節所述,本文分類器的輸入共有2部分,分別為文本輸入與數值輸入.文本輸入的內容是提出問題的標題,標題文本在經過預處理之后(詳見2.3節),會從文本信息形式轉換為數值形式,以詞向量矩陣的形式(輸入大小為20×200)經過輸入數據屏蔽層之后進入Conv-LSTM層.此處長度20是考慮到問題標題長度通常不會過長,經過查看Stack Overflow對于標題長度的限制與標題長度的統計得出該數值.
Conv-LSTM層是由卷積神經網絡(convolu-tional neural networks, CNN)的卷積層(convolu-tional layer)與長短時記憶網絡(long short-term memory, LSTM)構成.將2種神經網絡結合運用之后,不僅具有CNN的刻畫局部特征的能力[23],還有LSTM的時序建模能力[24],空間和時間上特性都具有[25],使自然語音處理技術得到充分利用.具體結構如圖3所示:

Fig.3 The structure of Conv-LSTM layer圖3 Conv-LSTM層結構
本文中的CNN進行一維卷積的對象是詞向量,設在句子中第i個單詞的200維詞向量為xi,輸入長度為L的句子的向量為X,k為filter的長度,m為一個進行卷積操作的filter,filter在句子j位置卷積形成的k個連續詞向量長度的窗口向量為wj.
卷積后的窗口向量:
wj=[xj,xj+1,…,xj+k-1],
(3)
其中,逗號表示行向量連接,進行卷積計算操作的filter是具有多個指定長度,分別是3,4,5.同一指定長度卷積一次.這種方法將原始詞向量序列卷積之后變得更為抽象,但是對原句子的編碼還是使用LSTM網絡.
Conv-LSTM層上卷積操作的對象是200維的詞向量,卷積窗口在由數據生成的詞向量矩陣序列上進行滑動卷積操作,獲得不同位置的特征,即多個feature map,設為cj.通過映射操作把卷積后內容相同的特征向量依次排列放在同一序列中,設為W.計算方法:
cj=f(wj°m+b),
(4)
W=[c1;c2;…;cn],
(5)
其中,°表示的是矩陣元素相乘,映射函數f使用ReLU[26],b表示偏項,分號表示列向量連接.
卷積后的窗口序列與輸入數據的序列相對應,因此本文模型中的卷積操作并不會影響文本內容中的順序.窗口向量序列按順序輸出向量到下一層的LSTM.LSTM的實際輸入結果其實是CNN中間層的隱含輸出層的內容.LSTM的輸入結果不能經過max-pooling池化層,因為池化層用于卷積后的特征映射選擇出最重要的特征,映射選擇功能并不是連續按順序選擇特征,不能保證池化后的語句能保持原始順序讓模型進行語義學習,影響LSTM序列學習.因此在卷積運算后就不會進行pooling操作.
數據從LSTM層學習輸出后,進入到全連接層,全連接層激活函數為tanh函數.之后,2部分數據會經由合并層(merge layer)以向量拼接(concatenate,axis=-1)的形式進行合并;輸出層的激活函數為sigmoid函數,最終選取的模型損失函數(loss function)為binary_crossentropy,優化器(optimizer)選擇為adam自適應方法,迭代次數epoch=12,批尺寸batch_size=128.
分類器是在有監督的情況下對輸入進行迭代訓練,從而訓練出模型的最優參數.
在本節中,我們基于Stack Overflow的真實歷史數據對本文提出的方法進行實驗驗證.
在實驗驗證階段,我們希望通過分析4個問題來對所提出的方法進行評估.
1) RQ1.該方法是否能夠準確有效對社區技術問題的解答狀態進行預測?其查全率和查準率是否優于現有方法?
2) RQ2.所提出的神經網絡的2個特征輸入(標題文本特征與數值特征)對最終結果分別有什么影響?即如果只有其中一個特征輸入,分類器的性能會如何變化?數值特征中的各項特征值又會對分類器的性能有什么影響?
3) RQ3.利用其他網絡模型(如卷積神經網絡CNN、長短時記憶神經網絡LSTM)替代神經網絡分類器中所使用的組合神經網絡,是否會影響分類器的性能,如查全率、查準率?
4) RQ4.訓練集與測試集的數量規模是否會很大程度上的影響分類器的性能?即如果訓練集如果數量較多或較少,能否進行準確的預測?
研究問題RQ1關注的是所提出的深度學習方法與傳統機器學習方法的預測結果在查準率(precision)與查全率(recall)等指標上的區別.為了回答這個問題,我們選擇了KNN[17]和FastText[27]作為對比方法,KNN是典型的基于傳統機器學習的文本分類方法,而FastText是非深度模型的神經網絡模型,在訓練速度遠高于深度學習的同時也保證訓練的質量.除此之外,我們還與隨機猜測進行對比.隨機猜測方法首先統計訓練集中正樣本的出現概率p,然后以恒定的概率p將測試數據預測為正樣本(能獲得滿意答案).
研究問題RQ2關注神經網絡分類器輸入特征選取的有效性.我們在保持模型其他部分不變的情況下,分別刪除原模型中的問題標題文本及特征值中的不同位置,繼續將原模型加以調優并訓練.以各分類器在同一測試集上的各項指標作為衡量指標來分析所提出的各個特征分別在整個方法中所起的作用.
研究問題RQ3主要關注在本方法所構造的神經網絡分類器中文本特征的處理效果.我們通過將所提出的網絡模型中的組合神經網絡分別替換為長短時記憶網絡和卷積神經網絡,并同樣以各分類器在同一數據集上的最優平均F1值作為指標來幫助考察和分析在已有的方法架構下3種神經網絡對于最終結果的影響.
研究問題RQ4則關注訓練樣本集和測試樣本集的內容質量因素,使用不同數量規模的問題樣本集進行訓練和測試在該分類器模型上是否會有影響.與其余文本分類問題不同,之前不能有滿意答案的問題可能隨著技術的發展變得可被解答,這種情況會擾亂分類器的訓練,因此本問題對樣本集其數量范圍的影響進行探討.
由于訓練樣本是由Stack Overflow提供的數據集獲取而來,內容量復雜,問題數量達到上億個,直接放入到神經網絡里訓練會使模型訓練難度極具增大,并且提出的問題能夠獲得滿意答案的幾率并不高.按照本文設定的正負樣本集合,也就是按照是否有滿意答案標注正負樣本,樣本比例很可能不均勻,從而影響分類器的訓練效果.因此我們以2017年的Stack Overflow社區的問題為樣例參考,對問題有滿意答案和無滿意答案的內容進行統計,如表2所示.其中表2列1是問題的發布時間(月),列2是問題提出的總數,列3和列4分別是有滿意答案與無滿意答案的數量,列5是有滿意答案的百分比.

Table 2 History Data from Stack Overflow in 2017表2 2017年Stack Overflow歷史數據
我們選取指定年份的問題作為語料庫,逐條生成固定格式的正負樣本數據集(詳見2.3節),構建分類器的訓練集,每個月以1周為時間跨度獲取2萬條,并抽取該月后面的2 000條問題作為測試樣本.每個訓練集對應當月抽取的測試集進行測試.具體選取數量原因可見研究問題RQ4.所提模型代碼基于Tensorflow實現,實現評估的評價指標有查準率(precision)和查全率(recall)以及F1值.計算為

(6)

(7)

(8)
TP表示True Positive,即做出Positive的判定,而且判定是正確的,其數值表示正確的Positive判定的個數,剩余同理.請注意,此處評估指標的目標為正樣本,即正樣本被判斷對是TP.
為回答研究問題RQ1,我們總結了本方法與KNN以及FastText方法在相同測試集上的問題解答狀態預測結果,并使用隨機猜測的方法證明該方法的有用性.隨機猜測是假如訓練集中正樣本概率為p,那么就以p的概率預測測試樣本為正樣本,正樣本的概率p值設定由表2可得,設置為37%.
我們共使用了3個月的數據集分別進行測試.對比方法是將特征合并成1條總體特征輸入到分類器中進行訓練與預測.
結果如表3所示.其中,列1為預測問題的發布時間,列2為本方法的測試結果的查準率、查全率和F1值.列3為使用KNN方法的查準率、查全率和F1值,列4為FastText的查準率、查全率和F1值.列5為隨機猜測的查準率、查全率和F1值.

Table 3 Results on Status Prediction for Post Questions表3 問題解答狀態預測的結果 %
根據表3我們可以看出:
1) 本文所提出方法的平均查準率比KNN提高了15.96%(為58.87%-42.91%),比FastText提高了2.40%(為58.87%-56.47%),查全率和F1值也都有所提高.
2) 與隨機猜測相比,本文查全率和查準率分別提高了11.42%(為46.68%-35.26%)和20.10%(為58.87%-38.77%).
除此之外,我們還使用單因素方差分析法(One-Way ANOVA)對本方法的性能提升的F1值進行顯著性分析,設置α=0.05,圖4顯示了本文方法與不同分類方法分類效果的ANOVA結果.結果顯示F=69.585 7,P-value接近于0遠小于0.05,表明不同分類方法之間有著顯著的差異.
在設置相同的情況下我們也對Precision和Recall值分別進行了單因素方差分析,F值分別為108.426 3與30.190 07,其P-value分別為8.091 29E-07和0.000 103.ANOVA分析結果表明,不同方法的處理對查準率和查全率有顯著影響.
我們從上述結論可得出,在技術問題的解答狀態的預測能力上,本文提出的深度學習方法在總體效果上優于隨機猜測,并略優于傳統機器學習KNN和淺層神經網絡FastText.
針對研究問題2,我們設計了一組對比試驗來考察所提出方法中的各個特征分別對于問題解答狀態預測結果的影響.通過神經網絡的拆分與訓練數據集中不同特征數據的刪除的方法,由表1可得title,code,tag都屬于文本特征,用戶特征reputation等屬于非文本特征.本實驗使用3個月的數據,從其平均值中直觀地查看7個特征的作用.如圖5所示.圖5縱坐標代表未輸入神經網絡訓練的特征,Default則表示輸入了全部特征.根據圖5可以看出:
1) 刪除任意輸入特征都導致方法性能的降低.
2) 文本型輸入的影響效果最大,刪除文本型輸入title導致方法的查準率會大幅降低,其降幅高達50.83%(為58.87%-8.04%).
3) 刪除tag和code文本特征時,查準率會分別降低6.49%(為58.87%-52.38%)和4.43%(為58.87%-54.44%).而刪除非文本特征查準率降幅最高為3.20%(為58.87%-55.67%).
4) 問題提出者的聲譽值及評價會對查全率有較大的影響.刪除該輸入導致查全率降低了6.03%(為46.68%-40.65%).

Fig.4 F1 ANOVA analysis圖4 方差分析F1

Fig.5 Influences of different input features圖5 不同輸入特征的影響
從上述結論可得,各個問題特征對于解答狀態的預測指標都有著提高作用.其中文本特征對查準率的影響大于非文本特征對查準率的影響,用戶特征對方法查全率影響較大.
為了回答研究問題RQ3,我們分別將卷積神經網絡、長短時記憶神經網絡以及組合網絡這3種網絡模型運用于分類器中的文本特征處理環節,各分類器經過調優后在同一測試集上的具體表現如表4所示.需要注意的是,表4中3種分類器除文本特征提取環節所用模型不同外,網絡其余部分都保持一致.其中列2使用卷積神經網絡和長短時記憶網絡依次處理文本特征信息,列3只使用2層長短期記憶網絡(同組合網絡中深度相同)處理,列4分類器則采用卷積神經網絡進行文本提取.
由表4可以看出:
1) 本文方法的平均F1值與LSTM相比,高出了1.58%(為52.06%-50.48%),其平均查準率的漲幅達1.43%(為58.87%-57.44%).
2) 本文方法的平均F1值與CNN相比,高出了2.52%(為52.06%-49.54%),其平均查準率的漲幅達2.33%(為58.87%-56.54%).
設置α=0.05,對F1值進行單因素方差分析,其F值為6.561 883,大于臨界值Fcrit為5.143 253;其P-value為0.030 884小于0.05,因此不同神經網絡之間提取能力差異較明顯.

Table 4 Influence of Deep Learning Models表4 深度學習模型對預測性能的影響 %

Fig.6 Influences of training data size圖6 訓練數據的規模對性能的影響
從上述結論可得,組合神經網絡對問題文本的提取能力會高于單種神經網絡.針對該情況,我們認為選擇卷積神經網絡與長短時記憶網絡的組合(Conv-LSTM)作為整個神經網絡中的代碼文本特征提取層時,問題特征提取的效果最好.
針對研究問題RQ4,我們對分類器訓練集的最佳訓練數量進行了評估.從表2可以看出,1個月的問題數量大約為10萬左右,因此我們以1月的數據為范圍,分別抽取不同數量的訓練集進行訓練,抽取數量按照不同的時間跨度為半天、半周、1周、半個月、1個月的范圍獲取并進行測試.從圖6可以看出:
1) 查準率可根據數量提升而提高,漲幅最大時(2 000條增長為2萬條)可達30.15%(為58.34%-28.19%).
2) 訓練樣本過多反而會造成查準率的降低,數量分別為2萬條和10萬條時分類器的查準率差值可達6.61%(為58.34%-51.73%).
從上述結論可得,訓練集的數量對于評估指標影響較大,訓練集數量達到一定數值時可提高準確性,訓練集范圍在20 000~50 000條時訓練效果最佳.針對該情況,因此我們選擇每個月的20 000條作為訓練樣本,既可以減少數據預處理時間,也能保證查全率、查準率的數值最高.此外,經過人工分析,數量超越一定值時查準率下降的原因是由于訓練集之間時間跨度較大,內容差異性較大,致使神經網絡學習效果降低,并且文本數據中存在較多數據噪音,如低質量(標題文本過短、內容簡單)問題過多,致使神經網絡無法從文本內容中學習到有用信息.
3.7.1 外部有效性威脅
技術社區問題所在的地域不同、面向群眾不同,會造成技術論壇的使用語言也不同,因此技術論壇可能會有英語、中文等.語言的不同不僅會對問題特征提取產生影響,有可能提取到錯誤的信息,也會對神經網絡理解文本信息產生威脅,因此我們選取了使用范圍最廣的英語作為分類器主要分析的文本語言,使用英語的技術論壇最多,也保證了本文模型可以適用于更多的技術社區的問題內容.同時編程語言或文檔多以英文描述為主,自然語言處理技術在英文處理上更為成熟,從而盡量降低地特征提取和神經網絡學習文本信息過程中產生的誤差,保證分類器的性能.
其次,雖然選擇了以英文為描述語言的技術社區,但因為論壇數量很多,本文只選擇了使用人群極多的Stack Overflow技術論壇進行驗證,并沒有對所有英文論壇的數據進行測試,這也是對分類器有效性的威脅.因為本文提出的方法除問題標題外,還有問題特征如Reputation等,如果其余技術論壇無類似特征,那么會對本文所使用的方法特征提取與最后的問題解答狀態預測結果也會導致本文結論出現偏差,使得本文結論不適用于其余技術社區.
3.7.2 內部有效性威脅
對于評估有效性的威脅在于用來驗證實驗結果的數據集并沒有涵蓋所有Stack Overflow論壇的問題,選取的問題的某些特性可能會使結論產生偏差,從而導致所得結論不適用于其余論壇問題.為了減少這一威脅,我們選取了2017年的數據作為測試與驗證,可代表論壇一個長周期內的數據,以期減少某些問題的特定關聯對于驗證結果造成影響.
此外,由于本文的數據集是自行標注,根據問題的回答數量和問題的滿意答案標志來生成問題標簽,因此如果數據集中有錯誤,就會造成訓練數據的標簽出錯,進而影響深度神經網絡模型的學習效果,使結論產生偏差.此外,如果時間跨度過大,可能會造成相同問題不同解答情況即數據標簽會出錯的情況.為降低該誤差的影響,本文在樣本抽取過程中采取隨機抽樣的方法,并盡可能的增大樣本數量從而降低單條樣本錯誤對分類器訓練的影響.
我們可通過對樣本質量的改善從而提高模型的泛化能力[28],因此對于樣本中可能出現的樣本噪音,我們所提出的方法對神經網絡的文本會進行預處理.同時為增加神經網絡的魯棒性[29],在神經網絡設計過程中,會使用一些防過擬合[30]手段來減少樣本噪音對模型訓練過程的干擾[31].
由于技術論壇社區問題的時間跨度較長,實驗使用長度為1年的數據進行訓練預測時,查準率只有0.34左右.經過分析,是由于向量空間中距離相近的句子其標簽不一致,原因是舊期不能解答的問題隨著技術的發展而能夠得以解答,會出現相同問題但解答狀態相反的情況,使得相同問題標簽不同影響訓練效果,產生數據噪音.如果時間跨度過大,文本數量過多,反而會降低分類器的效果.
此外,問題的解答狀況與社區中人員,尤其是專業技術人員有很大關聯,文獻[32]中顯示Stack Overflow上10%的“專家”解決了54%的問題,并提供了60%的最佳答案,因此這些人員的流動性以及成長性可能也會對技術論壇的這一解答能力造成影響.為降低該影響,實驗在選取數據時選取了近期的、連續的、跨度較短的時間段,從而降低專家流動的影響,并且將提問者專業程度的Reputation加入到分類內容中.
技術社區論壇已經成為程序員解決技術難題的一個重要渠道.提前預知技術問題的解答情況有助于程序員準確制定最佳的應對策略.為此,本文提出了一種基于深度學習的預測方法,能較為準確地預測所提出的問題是否能及時獲得滿意答案.在Stack Overflow的真實數據上進行了實驗驗證,實驗結果表明該方法的平均查全率可達46.68%,查準率可達58.87%.而隨機猜測的平均查準率為38.77%,查全率為35.26%,與本文提出的方法有明顯差距.
盡管本文提出的方法在測試集上的性能比其他方法比有明顯提高,但總體來說準確率依然有待進一步提高.在未來的研究中,我們將對問題的解答狀態的預測方法做進一步改進,并對問題特征中的特征選取與提取工作進行更深的研究,詳細分析各種因素與問題解答狀態的關系,以期再提高預測的準確率.