999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于預訓練模型的代碼分類研究

2023-10-08 13:15:14洪慶成謝春麗
軟件工程 2023年10期
關鍵詞:分類文本實驗

梁 瑤, 洪慶成, 王 霞, 謝春麗

(江蘇師范大學計算機科學與技術學院, 江蘇 徐州 221116)

0 引言(Introduction)

隨著開源代碼倉庫的出現,網絡上存在大量的源代碼文件,對代碼進行功能分類可幫助開發者快速找到要復用的代碼或組件,有利于開發過程中代碼的重用、理解、查找和維護,因此代碼分類是各種軟件開發任務的基礎工作。HINDLE等[1]的研究表明程序語言和自然語言都包含豐富的統計特性,利用自然語言的文本分類技術能夠有效地實現源代碼分類?;谏疃葘W習的文本分類從淺層表示轉變到深層學習表示,分類的準確性與穩定性得到了顯著提升。但是,目前的方法多屬于有監督學習,需要大量帶標注的數據集作為訓練樣本,而人工標注數據集不僅代價高,而且耗時長。針對這一現狀,提出了基于CodeBERT的代碼預訓練模型,首先利用無監督學習技術針對大量無標簽的源代碼學習其語法、語義、上下文語境等特征信息,其次構建分類器,在少量有監督數據集上進行微調,實現代碼分類任務。

1 相關工作(Related work)

代碼分類是通過一定的標準、規則將實現不同功能、語義不相似的代碼進行區分,最終將語義相似、功能相同的源代碼歸為同一類別的過程。代碼分類首先要從代碼不同的抽象層次上提取代碼文本中蘊含的特征信息,其次根據分類器映射到不同的類別中,不同的表征方式會影響特征提取的有效性。對于實現不同功能的源代碼進行相似度檢測的前提,是將源代碼按照一定的粒度級別切分為基本代碼單元,即檢測粒度。目前,代碼分類研究根據粒度劃分級別主要采用固定切分和自由切分兩種方式。固定切分主要包括按行切分、按塊切分、按函數切分、按文件切分和按項目切分等,對于固定切分,如果劃分的粒度級別太大,則源代碼切分后的丟失檢查概率會很高,如果劃分的粒度級別太小,則檢測工作會耗費更多的時間與精力。因此,在具體的應用中,可以采用多種粒度對源代碼進行切分操作,例如按照Token切分、按字符串切分、按特征向量切分、按樹結點切分和按子圖結構切分等,不同源代碼的表征粒度直接影響相似性計算的精度。

早期的代碼分類是借鑒文本分類的方法,20世紀50年代至60年代,文本分類領域的資深學者通過積累的工作經驗定義一些規則,從而實現分類,這種方法不僅耗時費力,還要求研究人員必須對某一領域有足夠深入的了解,才能總結分類規則并進行分類篩選,因此文本分類方法的局限性較大。針對該問題,基于統計學中字詞頻率的思想,提出了支持向量機(Support Vector Machine,SVM)技術,推動了文本分類的進一步發展。與此同時,深度學習技術在自然語言領域的成功應用給代碼分類帶來了新的突破,MOU等[2]通過一個單層神經網絡學習抽象語法樹(Abstract Syntax Tree,AST)中上層結點的詞向量,提出一種基于樹的卷積神經網絡模型(Tree-Based Convolutional Neural Network,TBCNN)進行代碼分類。BEN等[3]針對代碼本身具有的一些結構化特性,提出了連續空間的語句向量(Inst2vec)模型,該模型在代碼分類和性能預測等多種任務中獲得了很好的效果。ZHANG等[4]提出了語句級別的向量嵌入,有效捕獲了代碼的語法和語義信息,學習的代碼向量被用于代碼克隆檢測和代碼分類,取得了良好的分類效果。預訓練模型能從大量無標簽數據中學習代碼的特征信息,因此被廣泛應用于代碼表征任務[5]。例如,自監督預訓練模型(InferCode)[6]和基于BERT的預訓練模型(CodeBERT)[7]。本文將CodeBERT預訓練模型引入代碼分類任務,一方面利用預訓練模型強大的特征學習能力提高代碼分類的性能,另一方面避免進行昂貴的人工標記,降低了實驗成本。

2 代碼分類模型(Code classification model)

代碼分類模型主要由源碼預處理、源代碼文本表征以及構建分類器三個部分組成,數據預處理主要是克服源代碼文本的篇幅長度、空白字符等消極因素對模型的影響。源代碼文本表征指利用CodeBERT模型將源代碼文本中的每一個詞映射為詞向量,所有詞向量經過拼接處理、特征提取后,可以得到整篇文本的向量化表示,文本表征的輸出向量是分類器的輸入,將源代碼的表征向量送入Softmax層進行測試并評估結果,實現代碼分類。

2.1 源碼預處理

首先將獲取的源代碼數據集進行預處理,使數據集盡可能地符合預訓練模型的輸入要求,其次對處理后的源代碼數據集進行向量化操作,使得分類的源代碼文本向量可以被模型訓練學習。目前,常見的文本預處理方法有清除文本雜質、去停用詞、類別匹配和文本過濾等[8]。清除中文文本雜質的具體流程一般包括消除難以識別的特殊符號、刪除多余的空白字符、將繁體漢字轉換為簡體漢字三個過程。由于本文數據集是源代碼文本,因此本文中去除源代碼文本雜質的流程包括清除計算機難以辨識的特殊符號和刪除多余的空白字符兩項操作,使源代碼文本的特征表示只關注源代碼中每一個token的語義和特征信息,從而提取源代碼文本中有價值的特征信息,以獲得更加有效的代碼表征。由于源代碼文本中通常存在輸入輸出、語句分隔符、括號等反復出現且無重要信息的詞,所以本文將這類詞加入停用詞詞庫進行篩選,避免無特殊含義的詞作為輸入詞。由于在分類任務中需要少量有監督的樣本,因此需要預先知道源代碼實現的功能并對其進行標注處理,將實現相同功能的源代碼文本整理在同一個文件夾中。為防止源代碼文本篇幅長度超過本文模型的輸入范圍和樣本數據分布不一致問題,本文將對源代碼文本的篇幅長度進行篩選并對所有類別的文本進行整體過濾。

2.2 源代碼文本表征

傳統研究方法通過詞向量(Word2vec)模型[9]得到源代碼文本的詞向量,經過此模型訓練得到的不同詞向量的大小固定,而一篇完整的文本可能由許多不同的字詞組成,真正有價值的字詞往往只占很小的一部分。此外,由于Word2vec模型訓練得到的詞向量相同,而相同詞向量對應的字詞在不同的語境中表達的含義不同,因此為符合現實的語義要求,使用CodeBERT模型替代Word2vec模型訓練文本向量。

在預訓練階段,CodeBERT模型的輸入通常設置為自然語言片段與程序語言片段組成的一個句子對,它們之間用一個特殊分隔符[SEP]進行分隔,具體的輸入形式為[CLS],w1,w2,…,wn,[SEP],c1,c2,…,cm,[EOS],其中第一個片段w1,w2,…,wn是自然語言文本,n為文本長度,第二個片段c1,c2,…,cm則是程序語言文本,m為程序長度。[CLS]、[SEP]和[EOS]是具有特殊作用的標志,[CLS]固定位于輸入語句對的開頭,[SEP]標志僅用于分隔輸入語句對中不同模態的語言,在后面的訓練過程中一般無特殊作用,[EOS]則固定位于輸入語句對的結尾,它本身不具有任何特殊的含義。

CodeBERT的輸出包括每個token的上下文向量表示和[CLS]的表示。[CLS]作為聚合序列表示蘊含整篇文本的豐富語義信息,在下游任務中一般使用[CLS]表征向量,對其參數進行微調可以實現不同的功能應用。由于實驗數據集使用的是C++源碼,其本質不含有任何自然語言的單模態數據,所以輸入的具體形式為[CLS],c1,c2,…,cm,[EOS]。通過模型訓練可以得到源代碼中每一個token的向量化表示和蘊含整篇文本信息的[CLS]向量,在后期的分類任務中,利用[CLS]向量初始化分類器。

2.3 構建分類器

2.3.1 Softmax回歸模型

本文使用Softmax回歸模型[10]實現代碼功能的多分類任務。Softmax回歸模型是邏輯回歸模型在多分類問題中的延伸與擴展,一般采用極大似然估計的方法進行參數估計,主要是對已知標簽類型的樣本進行學習訓練從而優化模型,因此經過預處理的數據非常適合有監督學習任務。例如,{(x1,y1),(x2,y2),…,(xN,yN)},xi(i=1,2,…,N)表示第i篇源代碼文本對應的向量表征,N是訓練集中源代碼文本的數量,yi∈{1,2,…,K},K是分類數量,yi表示第i篇源代碼文本對應的標簽,即該篇源代碼實現的功能,由于本文研究的代碼分類屬于多分類問題,所以K>2。

在測試集中,輸入樣本xi,Softmax回歸模型會根據分布函數公式計算條件概率,即給定測試集中樣本xi屬于某一個類別的概率,其中出現概率最大的類別即當前樣本xi所屬的代碼功能類別。

因此,最終分布函數會輸出一個K維向量,每一維度的數值表示當前樣本屬于已知類別中某一類別的概率,并且模型將K維向量進行求和運算,然后做歸一化處理,使得所有向量元素和為1,Softmax回歸模型的判別函數hθ(xi)如公式(1)所示:

(1)

判別函數中的概率公式p(yi=j|xi;θ)(j=1,2,…,K)是當前樣本屬于目標類別j的概率,根據網絡的前向運算獲得K個輸出概率值,選擇具有最大輸出值的類別yk作為本文研究的預測值,θ為網絡權值參數。

2.3.2 代碼分類模型構建

本文提出基于CodeBERT的代碼分類模型,其輸入為訓練集U的源代碼文本U={(x1,y1),(x2,y2),…,(xN,yN)},(xi,yi)∈U(i=1,2,…,N),xi為第i篇源代碼文本,yi為第i篇源代碼文本對應的標簽,即該篇源代碼實現的功能,輸出是源代碼分類模型,具體步驟如下。

(1)訓練集U經過預處理后得到訓練集U′,源代碼文本預處理首先刪除文本空白字符,降低輸入樣本的特征維度,其次去除停用詞,消除沒有價值的字詞對模型訓練的消極影響,最后進行長度切分處理,使輸入源代碼文本的篇幅長度符合模型的輸入要求。

(2)使用CodeBERT預訓練模型在訓練集U上進行微調,通過CodeBERT模型處理之后輸出得到訓練集U′對應的特征表示V={v1,v2,…,vN},其中vi∈V(i=1,2,…,N)是每條源代碼文本xi對應句子級別的特征向量。在具體的實驗過程中,輸入的源代碼文本經過CodeBERT模型訓練得到的[CLS]向量包含該篇源代碼的綜合語義信息,提取了每一語句中重要字詞的特征信息。

(3)將每一篇源代碼對應的特征表示V輸入Softmax回歸模型進行分類處理,Softmax回歸模型會根據分布函數的條件概率公式計算出該篇源代碼最有可能對應的功能類別。

(4)源代碼文本分類模型輸出每一篇源代碼的標簽。

3 實驗與分析(Experiment and analysis)

本文主要進行了兩個實驗,即基于CodeBERT和基于Text-CNN的代碼分類,本節主要介紹實驗中使用的實驗數據、實驗過程及實驗結果?;贑odeBERT的代碼分類如圖1所示。

圖1 基于CodeBERT的代碼分類Fig.1 Code classification based on CodeBERT

3.1 數據集

本文收集了江蘇師范大學教學科研輔助平臺中學生提交的C++源代碼課程作業作為數據集,其中包括35個種類,共905篇源代碼,每個文件夾種類都代表一種功能的實現,包括但不限于進制轉換、歐幾里得算法、求逆序數、迪杰斯特拉算法及判斷閏年。雖然每個種類的文件夾內又包含了數量不等的源代碼文本,但是不同種類的源代碼文本的數量符合相同的數學分布,即具有大致相同的均值與方差,所以將這些數據進行訓練學習可以避免實驗誤差。本文設置的兩組實驗均采用相同的數據集,模型評價指標主要為精確率(Precision)、準確率(Accuracy)、召回率(Recall)和F1值。

3.2 實驗

3.2.1 基于CodeBERT的實驗

本文實驗主要使用CodeBERT預訓練模型對預處理后帶標簽的源代碼數據進行訓練與驗證,最終得到每一篇源代碼的特征向量,該特征向量不僅含有源代碼的語法與語義信息,還包含豐富的上下文語境信息,最終將每一篇源代碼的特征向量送入全連接層進行拼接,連接Softmax層實現分類。本文實驗將預處理后生成的帶有標簽的數據集劃分為訓練集、驗證集,便于后續CodeBERT模型讀取和處理,數據文件的每一行都表示為源代碼標簽。訓練集和驗證集均經過充分的打亂,服從同樣的數據分布,便于模型訓練的調參和結果評估。

由于本文實驗設備存在內存限制與運行效率低的局限性,因此對本文實驗的數據進行劃分,按批次輸送到模型中。本文模型在驗證集上取得的精確率最高為0.983,F1值最高為0.96,具體的實驗結果如表1所示。

表1 CodeBERT模型實驗結果Tab.1 Experimental results based on CodeBERT

3.2.2 基于Text-CNN的實驗

本文實驗對數據集進行預處理,匹配并標記源碼,按8∶1∶1的比例將其劃分為訓練集、測試集和驗證集。由于Text-CNN模型數據最終的輸入形式為源碼的路徑信息,因此需要將樣本數據集轉化為文本文件,該文本文件的具體內容為組合后源代碼的不同路徑信息及它們的標簽。本文實驗同樣劃分數據,將其按批次輸送到模型中計算余弦相似度衡量代碼語義相似度。

本文模型經過反復訓練,相似度閾值范圍取[0,1],F1值的最好結果為0.846(如圖2所示),其對應的精確率為0.853,召回率為0.840。

圖2 基于Text-CNN實驗結果Fig.2 Experimental results based on Text-CNN model

3.3 實驗結果與分析

本文的兩個實驗使用了相同的C++源碼數據集,并采用了兩種不同的方式從本質上實現了代碼分類。因此,本文實驗對比分析具有可信度且從對比結果來看,本文實驗為代碼分類研究提供了新方法、新工具?;贑odeBERT的模型訓練和基于Text-CNN的模型訓練對比結果如表2所示。

表2 實驗對比結果Tab.2 Comparison of experimental results

實驗結果表明,基于CodeBERT預訓練模型的方法可以更全面、準確地反映代碼之間的結構關系、語義關系,具有更好的性能指標。但是,該實驗存在模型整體結構單一、在識別粒度更小的結構上存在不足等問題。對于相似度計算實驗,后期將進一步研究關鍵詞、語義、語法、結構等方面對代碼分類結果的影響,設計更全面的檢測方法。

4 結論(Conclusion)

在數據量日益激增的信息化時代,如何高效地處理與提取文本數據的有效信息具有非常重要的研究價值。本文在解決源代碼的分類問題時,使用CodeBERT預訓練模型替代傳統的Word2vec模型作詞嵌入操作,利用學習得到的文本向量實現分類。實驗通過更新參數為模型挑選適合的優化器,其性能比一般基于文本的詞向量方法優越。

通過實驗對比發現,本文實驗中源代碼的表征方法可以充分利用文本的結構與上下文信息,但對代碼文本的局部特征信息進行學習時,其效果不如基于CNN模型表征學習得到的局部信息豐富。因此,在充分抽取文本局部特征信息的同時,如何利用源代碼文本的結構和上下文信息提高分類效率,是未來需要進一步研究的內容。

猜你喜歡
分類文本實驗
記一次有趣的實驗
分類算一算
在808DA上文本顯示的改善
做個怪怪長實驗
分類討論求坐標
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
數據分析中的分類討論
教你一招:數的分類
NO與NO2相互轉化實驗的改進
實踐十號上的19項實驗
太空探索(2016年5期)2016-07-12 15:17:55
主站蜘蛛池模板: 中国丰满人妻无码束缚啪啪| 国产三级毛片| 国产91无码福利在线| lhav亚洲精品| 欧美三級片黃色三級片黃色1| 中文字幕第4页| 最新国产精品第1页| 亚洲精品福利网站| 亚洲区欧美区| 亚洲天天更新| 亚洲第一成年网| 在线观看免费黄色网址| 亚洲不卡网| 国产视频a| 亚洲综合婷婷激情| 重口调教一区二区视频| 久操中文在线| 白浆视频在线观看| 99精品国产自在现线观看| 最新亚洲人成网站在线观看| 亚洲欧美日韩成人高清在线一区| 亚洲另类色| 欧美一区日韩一区中文字幕页| 国产清纯在线一区二区WWW| 国产一在线观看| 精品三级网站| 国产特一级毛片| 国产爽妇精品| 亚洲精品久综合蜜| 欧美在线视频不卡| 国产精品第5页| 久久精品国产电影| 亚洲性视频网站| 久久精品人人做人人爽电影蜜月| 一级成人欧美一区在线观看| 成年网址网站在线观看| 婷婷久久综合九色综合88| 国产黄在线免费观看| 国产性精品| 国产一区二区三区在线精品专区| 亚洲国产成熟视频在线多多| 欧美激情第一欧美在线| 激情综合婷婷丁香五月尤物| 国产第一色| 日日拍夜夜操| 国产亚洲精品资源在线26u| 极品私人尤物在线精品首页| 国产精品午夜电影| 午夜色综合| 国产SUV精品一区二区| a天堂视频| 亚洲Av激情网五月天| 国产伦精品一区二区三区视频优播| 亚洲精品无码在线播放网站| 国产成人av大片在线播放| 精品国产aⅴ一区二区三区| 欧美亚洲一区二区三区在线| 伊在人亚洲香蕉精品播放| 日韩美女福利视频| 国产va免费精品观看| 亚洲天堂精品在线| 在线毛片网站| 国产网友愉拍精品| 亚洲精品视频免费观看| 日韩欧美91| 日本午夜网站| 国产亚洲男人的天堂在线观看| 红杏AV在线无码| 欧美在线精品一区二区三区| 国内精品免费| 色综合综合网| 青青操国产| 亚洲看片网| 白浆视频在线观看| 亚洲无码高清视频在线观看| 久久伊人操| 伊人91在线| 婷婷综合在线观看丁香| 无码国产伊人| 欧美区一区二区三| 五月天久久综合| 日本国产一区在线观看|