国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于深度學習的Stack Overflow問題帖分類方法

2021-07-15 01:24賈焱鑫許舒源
吉林大學學報(理學版) 2021年4期
關鍵詞:帖子類別標簽

楊 光, 賈焱鑫, 陳 翔,2, 許舒源

(1. 南通大學 信息科學技術學院, 江蘇 南通 226019; 2. 南京大學 計算機軟件新技術國家重點實驗室, 南京 210023)

科研開發(fā)人員經(jīng)常在其問答網(wǎng)站(例如Stack Overflow, 簡稱SO)上討論并解決技術開發(fā)過程中遇到的問題. 目前, SO中已積累了16 500 000個可以解決開發(fā)人員技術問題的問題帖及對應的答案帖, 而用戶在如此海量的帖子中找到正確的解決方案有一定的困難. 因此, 對Stack Overflow網(wǎng)站的挖掘與分析已成為軟件倉庫挖掘領域的一個研究熱點. 例如: Shah等[1]通過建立邏輯回歸分類器為用戶提出的問題找出最優(yōu)答案并分析出答案的質(zhì)量; Mamykina等[2]分析了成功問答網(wǎng)站的設計特點; Openja等[3]從主題分析的角度對Stack Overflow網(wǎng)站上與軟件工程相關問題的帖子進行了大規(guī)模實證研究.

為簡要描述SO的帖子內(nèi)容, 每個問題帖都標有1~5個標簽, 標簽主要基于技術內(nèi)容對帖子進行分類, 例如帖子是否與Android,Java或Hadoop等相關. 目前, 網(wǎng)站使用用戶定義的標簽對每個問題進行分類, 但標簽一般是在用戶發(fā)布問題時手工提供的, 這可能導致用戶提供了錯誤和不一致的標簽, 例如一個用戶可能使用標簽“iphone api”, 而另一個用戶可能使用“iphone sdk”, 雖然意圖相同(即帖子是相關的), 但由于帖子使用了不同標簽, 所以不會被分在一組. 該問題導致了“標簽爆炸”. 一般使用4%的標簽即可完成90%的問題貼分類. 標簽可能無法反映出問題的目的, 例如含有“Java”標簽的問題只能確定該問題與Java語言有關, 但無法確定該問題是與GUI開發(fā)相關還是與網(wǎng)絡問題相關. 為解決上述問題, Barua等[4]提出了一種半自動方法, 該方法基于LDA(latent dirichlet allocation)[5], 其嘗試分析出主要的討論主題. 但研究表明, 不能僅分析開發(fā)人員所討論的主題, 在檢索開發(fā)人員的問題時, 也應該考慮開發(fā)人員提問的原因. 了解帖子的提問目的可幫助開發(fā)人員在SO中找到相關的帖子, 并集成到IDE(integrated development environment)中[6]. Beyer等[7]提供了一個通用的分類方法, 給出了7種問題的目的類別: API_CHANGE,API_USAGE,CONCEPTUAL,DISCREPANCY,LEARNING,ERROES和REVIEW, 之后使用基于正則表達式和機器學習的方法對帖子進行分類, 但基于正則表達式需要人工識別問題帖子中的短語模式, 因此存在模式手工提取困難的問題, 而傳統(tǒng)機器學習方法在預測性能方面則存在一定的瓶頸.

以提問目的對帖子進行分類, 可以為分析SO上的帖子討論主題增加新的維度. 因此, 本文基于開發(fā)人員提問目的, 使用TextCNN和融合注意力機制的TextRNN方法對SO的帖子問題目的進行分類, 并與4種傳統(tǒng)機器學習算法(樸素Bayes、K近鄰、 隨機森林和邏輯回歸)和文獻[7]提出的正則表達式方法為基準方法進行對比實驗. 實驗結果表明, 本文基于TextCNN和 融合注意力機制的TextRNN的深度學習模型對SO貼子問題目的上的分類性能在多數(shù)情況下都優(yōu)于對比方法.

1 基于深度學習的問題帖分類方法

隨著深度學習技術的迅速發(fā)展, 不同的深度神經(jīng)網(wǎng)絡模型逐漸被應用到文本分類任務中, 其中最經(jīng)典的是TextCNN[8]和TextRNN[9]. 本文考察上述兩種深度文本分析算法在SO帖子問題目的分類上的預測性能. 本文方法的整體框架如圖1所示, 共分為3個階段: 數(shù)據(jù)預處理、 模型訓練和模型驗證.

圖1 本文方法整體框架Fig.1 Overall framework of proposed method

1.1 TextCNN

卷積神經(jīng)網(wǎng)絡(convolutional neural network, CNN)的核心點在于可以捕捉局部相關性. 在文本分類任務中, 可利用CNN提取句子中類似N-gram的關鍵信息. 本文使用的卷積神經(jīng)網(wǎng)絡模型結構如圖2所示, 該模型由輸入層、 卷積層、 池化層和全連接層構成. TextCNN模型的輸入層需要輸入一個定長的文本序列, 本文輸入文本序列中各詞匯對應的分布式表示(即詞向量). 由圖2可見, 輸入層(即最左邊矩陣)的每一行表示一個詞匯的詞向量, 維度為dim, 行數(shù)表示輸入訓練的文本長度. 在卷積層中, 一般使用多個不同規(guī)模的濾波器, 在自然語言處理領域, 卷積核一般只進行一維滑動, 即卷積核的寬度W與詞向量的維度dim等寬. 卷積核的高度H, 即窗口值, 可理解為N-gram模型中的N. 每個卷積核類似于一個可訓練的濾波器, 提取輸入的部分特征, 然后將卷積結果經(jīng)過激活函數(shù)(即ReLU)處理后, 輸入到池化層. 池化層的輸入一般來源于上一個卷積層, 主要有如下作用: 1) 保留主要特征, 同時減少下一層的參數(shù)和計算量, 以防止過擬合問題; 2) 保持某種不變性. 在TextCNN模型的池化層中使用Max-pool, 既減少了模型的參數(shù), 又保證了在不定長的卷基層輸出上獲得一個定長的全連接層輸入. 全連接層的作用是分類器, TextCNN模型使用只有一層隱藏層的全連接網(wǎng)絡, 相當于將卷積與池化層提取的特征輸入到一個邏輯分類器中進行分類.

圖2 TextCNN的網(wǎng)絡模型結構Fig.2 Network model structure of TextCNN

1.2 TextRNN

盡管TextCNN在很多任務中性能較好, 但CNN中kernel_size視野的固定, 使其無法建模更長的序列信息, 且kernel_size的超參數(shù)調(diào)節(jié)也較繁瑣. CNN本質(zhì)是做文本的特征表達, 而自然語言處理中更常用的是遞歸神經(jīng)網(wǎng)絡(RNN), 能更好地表達上下文信息. 在文本分類任務中, 本文使用基于雙向長短期記憶人工神經(jīng)網(wǎng)絡(LSTM)的TextRNN, 從某種意義上可理解為可捕獲變長且雙向的“N-gram”信息. TextRNN的結構如圖3所示.

圖3 TextRNN的網(wǎng)絡模型結構Fig.3 Network model structure of TextRNN

LSTM是一種特殊的RNN網(wǎng)絡, 其設計目的是為了解決長依賴問題, 通過在RNN上加入門控實現(xiàn), 由3個門控制細胞狀態(tài), 分別為遺忘門、 輸入門和輸出門. 遺忘門通過查看ht-1和xt信息輸出一個[0,1]內(nèi)的向量, 該向量中的0,1值表示細胞狀態(tài)Ct-1中的哪些信息保留或丟棄, 0表示不保留, 1表示都保留, 用公式表示為

ft=σ(Wf·[ht-1,xt]+bf).

(1)

在輸入門處理前, 需決定給細胞狀態(tài)添加哪些新的信息.首先, 通過輸入門的操作決定更新哪些信息, 然后, 通過tanh層得到新的候選細胞信息, 這些信息可能會被更新到細胞信息中, 用公式表示為

it=σ(Wi·[ht-1,xt]+bi),

(2)

(3)

(4)

更新完細胞狀態(tài)后需要根據(jù)輸入的ht-1和xt判斷輸出細胞的哪些狀態(tài)特征, 輸出門將細胞狀態(tài)經(jīng)過tanh層得到一個[-1,1]內(nèi)的向量, 該向量與輸出門得到的判斷條件相乘即為最終該RNN單元的輸出, 用公式表示為

ot=σ(Wo[ht-1,xt]+bo),

(5)

ht=ot×tanh(Ct).

(6)

1.3 注意力機制

本文采用注意力機制[10]對TextRNN進行優(yōu)化. 在對SO問題帖子進行分類時主要依賴開發(fā)人員提供問題帖子的標題和描述, 文本特征較稀疏, 注意力機制源于對人類視覺的研究, 使訓練重點集中在輸入數(shù)據(jù)的相關部分而忽略無關部分.

2 實 驗

下面對基于深度學習的SO帖子問題目的分類的有效性進行實驗驗證.

2.1 數(shù)據(jù)集

考慮1 100個與Android相關的SO帖子, 該數(shù)據(jù)集由Beyer等[7]搜集并手動將這些帖子分類為7個問題類別. SO數(shù)據(jù)集中的特征簡稱及對應的描述列于表1.

表1 SO數(shù)據(jù)集的特征簡稱及含義

2.2 評測指標

由帖子的手動分類可知, 一些帖子可能同時屬于多個類別, 如圖4所示的帖子, 其同時被歸為API_USAGE和REVIEW. 因為短語“How can I”是API_USAGE類別的識別模式, 而短語“Is there a simpler way”是REVIEW類別的識別模式. 因此帖子問題目的分類是一個多標簽分類問題(multi-label classification).

圖4 帖子問題目的分類實例Fig.4 Example of a post question purpose classification

本文使用二分類技術, 將多標簽分類轉(zhuǎn)換為二元分類問題: 為每個問題類別建立分類器模型, 以確定該帖子是否屬于該類別. 若將屬于該類別的帖子設為正例, 不屬于該類別的帖子設為反例, 則可根據(jù)真實類型與模型的預測類型組合, 將帖子劃分為真正例(true positive)、 假正例(false positive)、 真反例(true negative)和假反例(false negative), 并令TP,FP,TN和FN分別表示對應的帖子數(shù).

準確率表示在預測結果中, 正確分類的帖子數(shù)占所有帖子數(shù)的比例, 其計算公式為

(7)

F1指標是查準率和查全率的調(diào)和均值, 可對查準率和查全率兩個指標進行有效的平衡, 其計算公式為

(8)

2.3 實驗設計

本文基于Pytorch框架設計基于TextCNN和基于融合注意力機制的TextRNN的SO帖子問題目的的分類方法. 首先需要對原始數(shù)據(jù)集進行處理, 對原始數(shù)據(jù)去除〈code〉〈/code〉間的代碼片段, 去除html標簽后, 再利用Porter Stemmer算法進行詞干還原, 然后進行分詞操作生成語料庫.

將數(shù)據(jù)集劃分為驗證集和測試集, 參考文獻[6]中的原始實驗設置, 將100個單獨用作測試的帖子分離出來, 為防止深度學習在訓練時的過擬合問題, 將剩余的1 000個帖子按9∶1的比例進一步劃分為訓練集和驗證集. 對基準方法的實現(xiàn), 基于正則表達式根據(jù)文獻[6]中的共享代碼進行復現(xiàn), 基于機器學習的分類方法通過Sklearn進行復現(xiàn).

本文將正則表達式分類方法用Reg表示, 將隨機森林方法用RF表示, 將線性回歸方法用LR表示, 將K近鄰方法用KNN表示, 將樸素Bayes方法用MNB表示, 將TextCNN方法用TCNN表示, 將TextRNN方法用TRNN表示. 有些類別(如API_CHANGE, LEARNING和REVIEW)存在明顯的類不平衡問題, 數(shù)據(jù)集的正負樣本百分數(shù)列于表2. 本文采用隨機過采樣方法對3個類別進行正負樣本不均衡問題處理, 將隨機重復正樣本, 直至正樣本數(shù)量與負樣本數(shù)量相同.

表2 數(shù)據(jù)集的正負樣本百分數(shù)

實驗對比基準方法采用基于隨機森林的機器學習方法、 正則表達式方法、 樸素Bayes方法、 邏輯回歸方法和K近鄰方法.

在機器學習的分類方法中, 先對文本進行預處理, 然后計算帖子文本的tf-idf矩陣作為特征, 并使用各種機器學習的分類模型進行分類測試. 深度學習模型的超參取值設置如下: Adam對應的學習率設為0.001, SGD對應的學習率設為0.1. 對于TextCNN模型, 卷積核的尺寸設為(2,3,4), 每種卷積核的數(shù)量設為256, Dropout設為0.5, 激活函數(shù)設為ReLU, 池化選擇設為1-max pooling, 詞向量維度設為100, batch_size設為128. 對于TextRNN模型, 使用兩層的LSTM, 第一層LSTM的hidden size設為256, 第二層的hidden size設為128, Dropout設為0.5, 激活函數(shù)設為ReLU, 詞向量維度設為300, batch_size設為32.

2.4 結果分析

基于準確率指標和基于F1指標的實驗結果分別列于表3和表4. 由表3和表4可見, 針對7個類別, 本文基于深度學習的問題貼分類方法, 在大部分情況下都優(yōu)于其他對比基準方法. 宏觀上, 融合注意力機制的TextRNN方法優(yōu)于TextCNN方法. 其中在API_USAGE類別上, TextRNN方法的準確率比隨機森林方法提高了9.64%, 比正則表達式方法提高了5.81%. 但在少數(shù)類別上的分類結果不如對比基準方法, 在REVIEW類別上效果最差. 其性能不佳的原因為: 在100條測試集中REVIEW的正樣本數(shù)量僅11條, 而API_USAGE的正樣本數(shù)量有47條, 從而導致深度學習模型的分類性能并不理想.

表3 基于準確率指標的實驗結果

表4 基于F1指標的實驗結果

針對優(yōu)化器選擇及是否采用預訓練詞向量, 本文對模型性能的影響進行了對比實驗. 在優(yōu)化器選擇上, 本文使用最常用的SGD優(yōu)化器和Adam優(yōu)化器; 在預訓練詞向量上, 本文使用Glove預訓練完的詞向量.

首先, 分析優(yōu)化器選擇對分類性能的影響, 對比結果列于表5和表6. 由表5和表6可見, 在準確率指標上, 使用Adam優(yōu)化器比使用SGD優(yōu)化器分類性能可平均提升1.59%; 在F1指標上, 使用Adam優(yōu)化器比使用SGD優(yōu)化器分類性能可平均提升1.33%.

表5 優(yōu)化器選擇對TextCNN分類性能的影響

表6 優(yōu)化器選擇對TextRNN分類性能的影響

其次, 分析預訓練詞向量對分類性能的影響, 對比結果列于表7和表8. 由表7和表8可見, 在準確率指標上, 使用Glove比使用隨機詞向量生成分類性能可平均提升0.3%; 在F1指標上, 使用Glove比使用隨機詞向量生成分類性能可平均提升0.7%.

表7 是否采用預訓練詞向量對TextCNN分類性能的影響

表8 是否采用預訓練詞向量對TextRNN分類性能的影響

實驗結果表明, 采用基于深度學習的問題貼分類方法中, 使用Adam優(yōu)化器和Glove預訓練完的詞向量可有效提高訓練出模型的分類性能.

綜上所述, 本文基于深度學習的TextCNN和融合注意力機制的TextRNN, 提出了一種基于深度學習的SO問題帖分類方法, 并分析了該方法兩個設計要素對模型性能的影響. 與經(jīng)典基準方法的對比結果驗證了該方法的有效性.

猜你喜歡
帖子類別標簽
無懼標簽 Alfa Romeo Giulia 200HP
壯字喃字同形字的三種類別及簡要分析
不害怕撕掉標簽的人,都活出了真正的漂亮
暴力老媽
標簽化傷害了誰
服務類別
科學家的標簽
多類別復合資源的空間匹配
中醫(yī)類別全科醫(yī)師培養(yǎng)模式的探討
高手是這樣拍馬屁的