• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于協(xié)同融合網(wǎng)絡(luò)的代碼搜索模型

      2024-01-09 03:59:32宋其洪劉建勛扈海澤張祥平
      計(jì)算機(jī)應(yīng)用 2023年12期
      關(guān)鍵詞:池化分詞語(yǔ)句

      宋其洪,劉建勛*,扈海澤,張祥平

      基于協(xié)同融合網(wǎng)絡(luò)的代碼搜索模型

      宋其洪1,2,劉建勛1,2*,扈海澤1,2,張祥平1,2

      (1.服務(wù)計(jì)算與軟件服務(wù)新技術(shù)湖南省重點(diǎn)實(shí)驗(yàn)室(湖南科技大學(xué)),湖南 湘潭 411201; 2.湖南科技大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,湖南 湘潭 411201)(?通信作者電子郵箱904500672@qq.com)

      搜索并重用相關(guān)代碼可以有效提高軟件開(kāi)發(fā)效率?;谏疃葘W(xué)習(xí)的代碼搜索模型通常將代碼片段和查詢語(yǔ)句嵌入同一向量空間,通過(guò)計(jì)算余弦相似度匹配并輸出相應(yīng)代碼片段;然而大多數(shù)模型忽略了代碼片段與查詢語(yǔ)句間的協(xié)同信息。為了更全面地表征語(yǔ)義信息,提出一種基于協(xié)同融合的代碼搜索模型BofeCS。首先,采用BERT(Bidirectional Encoder Representations from Transformers)模型提取輸入序列的語(yǔ)義信息并將它表征為向量;其次,構(gòu)建協(xié)同融合網(wǎng)絡(luò)提取代碼片段和查詢語(yǔ)句間分詞級(jí)的協(xié)同信息;最后,構(gòu)建殘差網(wǎng)絡(luò)緩解表征過(guò)程中的語(yǔ)義信息丟失。為驗(yàn)證BofeCS的有效性,在多語(yǔ)言數(shù)據(jù)集CodeSearchNet上進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明,相較于基線模型UNIF(embedding UNIFication)、TabCS(Two-stage attention-based model for Code Search)和MRCS(Multimodal Representation for neural Code Search),BofeCS的平均倒數(shù)排名(MRR)、歸一化折損累計(jì)增益(NDCG)和前位成功命中率(SR@)均有顯著提高,其中MRR值分別提升了95.94%、52.32%和16.95%。

      軟件開(kāi)發(fā);代碼搜索;協(xié)同融合;BERT;殘差網(wǎng)絡(luò)

      0 引言

      隨著開(kāi)源代碼數(shù)量不斷增長(zhǎng),從大型代碼庫(kù)中搜索和重用代碼已經(jīng)成為提高軟件開(kāi)發(fā)效率的主要方法之一。開(kāi)發(fā)人員在搜索工具中輸入查詢語(yǔ)句,搜索工具在開(kāi)源代碼庫(kù)(如Github)中進(jìn)行搜索匹配,進(jìn)而推薦最相似的代碼片段供開(kāi)發(fā)人員選擇和重用。因此,準(zhǔn)確地為開(kāi)發(fā)人員推薦符合需求的代碼片段對(duì)軟件工程的發(fā)展具有十分重要的意義。

      然而,當(dāng)前基于深度學(xué)習(xí)的代碼搜索模型并沒(méi)有完全捕獲代碼片段和查詢語(yǔ)句之間的關(guān)系[1-3]。圖1是一個(gè)代碼-查詢對(duì)示例,大多數(shù)模型只能將查詢語(yǔ)句中的分詞“file”同代碼片段中的分詞“filewriter”和“File”等分詞聯(lián)系起來(lái),因?yàn)槠渲卸己嘘P(guān)鍵詞“file”;然而,從深層語(yǔ)義聯(lián)系層面,分詞“file”與代碼片段中的分詞“content”和“write”也有強(qiáng)聯(lián)系。在真實(shí)的代碼搜索任務(wù)中,查詢語(yǔ)句和代碼庫(kù)中的候選代碼同樣存在這種深層語(yǔ)義聯(lián)系,即協(xié)同信息。若模型無(wú)法完全感知代碼片段和查詢語(yǔ)句間的關(guān)系,勢(shì)必影響表征向量的完整性,進(jìn)一步影響代碼搜索的準(zhǔn)確性。

      圖1 代碼-查詢對(duì)示例

      針對(duì)當(dāng)前代碼搜索模型對(duì)協(xié)同信息考慮不足的問(wèn)題,本文提出一種代碼搜索模型BofeCS。首先采用BERT (Bidirectional Encoder Representations from Transformers)模型提取語(yǔ)義信息并表征為向量。其次,在計(jì)算機(jī)視覺(jué)(Computer Vison, CV)和自然語(yǔ)言處理(Natural Language Processing, NLP)領(lǐng)域,一些研究者應(yīng)用協(xié)同注意力機(jī)制捕獲多輸入信息間的相關(guān)性[4-6]。受此啟發(fā),構(gòu)建協(xié)同融合網(wǎng)絡(luò)提取代碼片段和查詢語(yǔ)句間分詞級(jí)協(xié)同信息。最后,受CV領(lǐng)域的殘差機(jī)制[7]啟發(fā),構(gòu)建殘差網(wǎng)絡(luò)彌補(bǔ)表征過(guò)程中語(yǔ)義信息丟失。最終融合協(xié)同信息生成語(yǔ)義信息相對(duì)完整的表征向量,通過(guò)計(jì)算代碼片段和查詢語(yǔ)句間向量距離,實(shí)現(xiàn)最優(yōu)代碼匹配。

      為驗(yàn)證BofeCS的有效性,在CodeSearchNet數(shù)據(jù)集[8]上進(jìn)行對(duì)比分析,并選擇UNIF(embedding UNIFication)[9]、TabCS(Two-stage attention-based model for Code Search)[10]和MRCS(Multimodal Representation for neural Code Search)[11]這3種先進(jìn)方法作為基線模型;同時(shí)構(gòu)建了一系列實(shí)驗(yàn),驗(yàn)證BofeCS的結(jié)構(gòu)合理性,并探索具體細(xì)節(jié)以優(yōu)化模型性能。

      本文的主要工作如下:1)提出一種高效的代碼搜索模型BofeCS,它可以捕獲代碼片段和查詢語(yǔ)句間的深層聯(lián)系,幫助開(kāi)發(fā)人員快速準(zhǔn)確地搜索相關(guān)代碼。2)通過(guò)構(gòu)建協(xié)同融合網(wǎng)絡(luò)充分感知語(yǔ)義關(guān)聯(lián),捕獲代碼片段和查詢語(yǔ)句間的協(xié)同信息。3)通過(guò)構(gòu)建殘差結(jié)構(gòu),有效緩解語(yǔ)義特征表征過(guò)程中的信息丟失。

      1 相關(guān)工作

      代碼搜索是采用查詢語(yǔ)句描述需求以搜索相應(yīng)功能的代碼片段,供開(kāi)發(fā)人員重用以高效編碼。目前,代碼搜索的研究主要包含查詢擴(kuò)展(Query Expansion,QE)和代碼表征模型兩方面。

      1.1 查詢擴(kuò)展

      相較于代碼注釋,查詢語(yǔ)句較短,它所包含的語(yǔ)義信息通常無(wú)法全面表達(dá)開(kāi)發(fā)人員的查詢意圖。因此,基于QE的研究提高了需求描述的完整性,進(jìn)而提高了代碼搜索的準(zhǔn)確性。該流程如式(1)所示:

      目前,QE研究主要集中于擴(kuò)展同義詞的方法[12-14]。例如:Liu等[15]提出神經(jīng)查詢擴(kuò)展(Neural QE, NQE)方法,使模型接受一組關(guān)鍵字并預(yù)測(cè)一組與基礎(chǔ)語(yǔ)料庫(kù)中查詢關(guān)鍵字共同出現(xiàn)的關(guān)鍵字,實(shí)現(xiàn)QE;Wang等[16]結(jié)合強(qiáng)化學(xué)習(xí)與QE以提升QE的能力;基于變化序列的語(yǔ)義信息,Zou等[17]提出了一種新型查詢方法QESC(QE method based on Semantics of Change sequences),可以從與查詢語(yǔ)義相似的變化中提取相關(guān)的術(shù)語(yǔ)以擴(kuò)展查詢;Hu等[18]提出代碼描述挖掘框架CodeMF(Code-description Mining Framework),以消除噪聲帖子并從編程論壇中提取高質(zhì)量的軟件庫(kù),應(yīng)用于QE以提高代碼搜索的性能;由于檢索到的方法大多不能直接滿足用戶需求,Wu等[19]基于檢索到方法后可能發(fā)生的改變這一觀察,提出預(yù)測(cè)改變意圖的QE方法。

      1.2 代碼表征模型

      由于自然語(yǔ)言和編程語(yǔ)言存在較大的語(yǔ)義鴻溝,所以通過(guò)構(gòu)建表征模型將代碼片段和查詢語(yǔ)句嵌入同一向量空間,以縮小兩者之間的語(yǔ)義鴻溝,探索兩者間的聯(lián)系。具體流程如圖2所示,代碼片段和查詢語(yǔ)句作為模型輸入,分別經(jīng)過(guò)代碼片段和自然語(yǔ)言編碼器編碼,嵌入為代碼片段和查詢語(yǔ)句向量,通過(guò)計(jì)算向量相似度以推薦相關(guān)代碼片段。

      圖2 基于深度學(xué)習(xí)的代碼搜索流程

      近幾年,基于深度學(xué)習(xí)的代碼表征模型成為研究的熱點(diǎn),例如:Gu等[3]首次將深度學(xué)習(xí)與代碼搜索結(jié)合提出DeepCS(Deep Code Search)模型,使用兩個(gè)長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)分別嵌入代碼片段和查詢語(yǔ)句的語(yǔ)義信息,學(xué)習(xí)其中的語(yǔ)義關(guān)聯(lián)以實(shí)現(xiàn)代碼匹配;基于DeepCS,COSEA(Convolutional cOde SEarch with layer-wise Attention)模型[20]使用卷積神經(jīng)網(wǎng)絡(luò)捕捉代碼結(jié)構(gòu)信息以豐富表征向量的語(yǔ)義信息;Cambronero等[9]提出有監(jiān)督的代碼搜索模型UNIF,使用基于注意力的權(quán)重機(jī)制結(jié)合每個(gè)分詞向量生成代碼表征,通過(guò)求查詢語(yǔ)句分詞向量均值生成查詢語(yǔ)句表征;Xu等[10]提出TabCS,通過(guò)雙階段注意力機(jī)制考慮模型輸入特征間的關(guān)系表征代碼和查詢語(yǔ)句;基于圖嵌入技術(shù),Ling等[21]提出的DGMS(Deep Graph Matching and Searching for semantic code retrieval)模型將代碼片段和查詢語(yǔ)句用圖結(jié)構(gòu)表示,并構(gòu)建基于圖的匹配和搜索模型檢索最佳匹配代碼;Wang等[22]嘗試構(gòu)建圖神經(jīng)網(wǎng)絡(luò)以增強(qiáng)對(duì)代碼的表征能力。一些研究針對(duì)二進(jìn)制代碼的相似性優(yōu)化代碼搜索[23]。在模型輸入的預(yù)處理方面,ASTNN(AST-based Neural Network)方法[24]切分表示代碼結(jié)構(gòu)的抽象語(yǔ)法樹(shù)(Abstract Syntax Tree, AST),生成語(yǔ)句級(jí)的表征向量,增強(qiáng)了代碼表征的完整性。Gu等[11]提出新型多模態(tài)表征模型MRCS(Multimodal Representation for neural Code Search)。針對(duì)代碼提出基于AST遍歷和采樣的4種樹(shù)序列,分別與代碼分詞結(jié)合作為多模態(tài)代碼表征;針對(duì)查詢語(yǔ)句,使用它的分詞作為單模態(tài)表征。為了探索模型的普適性,AdaCS(Adaptive deep Code Search)方法[25]嵌入特定領(lǐng)域的詞匯并匹配句法模式,將匹配特征轉(zhuǎn)移到新的代碼庫(kù)中以降低訓(xùn)練成本。

      1.3 協(xié)同注意力機(jī)制

      注意力機(jī)制使深度學(xué)習(xí)模型可以專注于數(shù)據(jù)的重要部分。由于多數(shù)模型的輸入包含多種模態(tài)信息,為了捕獲輸入信息間的映射語(yǔ)義關(guān)系,研究者們提出了協(xié)同注意力機(jī)制[4-6]。該機(jī)制主要采用注意力機(jī)制探尋多個(gè)輸入間交互關(guān)系中的重要部分,捕獲多輸入間的映射語(yǔ)義信息。例如:Ma等[26]基于協(xié)同注意力機(jī)制針對(duì)多標(biāo)簽文本分類任務(wù)提出一種改進(jìn)的多步多分類模型,具體使用協(xié)同注意力機(jī)制分析原文和引導(dǎo)標(biāo)簽之間的聯(lián)系,有助于過(guò)濾錯(cuò)誤預(yù)測(cè)引起的錯(cuò)誤累積問(wèn)題;Zhang等[27]提出基于協(xié)同注意力機(jī)制的網(wǎng)絡(luò)捕獲情感分析中方面(Aspect)和上下文之間的關(guān)系,為給定句段分配正確的極性;Shuai等[28]將協(xié)同注意力機(jī)制應(yīng)用于基于卷積神經(jīng)網(wǎng)絡(luò)的模型,捕獲輸入數(shù)據(jù)的聯(lián)系,提高代碼表征的能力。

      2 BofeCS

      2.1 整體架構(gòu)

      BofeCS的架構(gòu)如圖3所示,包括三個(gè)模塊:第一模塊將預(yù)處理得到的代碼片段和查詢語(yǔ)句向量分別送入BERT完成語(yǔ)義嵌入;第二模塊構(gòu)建協(xié)同融合網(wǎng)絡(luò)生成協(xié)同矩陣以捕獲代碼片段和查詢語(yǔ)句之間分詞級(jí)的協(xié)同信息,突出關(guān)鍵語(yǔ)義特征,降低噪聲;第三模塊構(gòu)建殘差網(wǎng)絡(luò),將協(xié)同信息作為語(yǔ)義殘差,彌補(bǔ)模型訓(xùn)練過(guò)程中丟失的語(yǔ)義信息,得到代表代碼片段和查詢語(yǔ)句語(yǔ)義特征的完整表征向量。最后,通過(guò)計(jì)算余弦相似度匹配代碼片段向量與查詢語(yǔ)句向量,推薦最優(yōu)的代碼片段。

      圖3 BofeCS的整體架構(gòu)

      2.2 語(yǔ)義嵌入

      結(jié)合個(gè)注意力頭,得到查詢語(yǔ)句和代碼片段的多頭自注意力層輸出,計(jì)算過(guò)程如式(7)(8)所示:

      其中:Q和C分別是查詢語(yǔ)句和代碼片段多頭自注意力層的融合矩陣;Concat代表連接操作。

      為了防止模型訓(xùn)練過(guò)程中出現(xiàn)過(guò)擬合,在BERT層后連接Dropout層,以增強(qiáng)模型的泛化能力。由于BERT內(nèi)部結(jié)構(gòu)較復(fù)雜,整個(gè)BERT編碼運(yùn)算由BERT操作表示。代表代碼片段的序列向量C和代表查詢語(yǔ)句的序列向量Q經(jīng)過(guò)式(9)(10)的BERT計(jì)算,分別得到模型第一模塊中代碼片段與查詢語(yǔ)句的向量C和Q。

      2.3 協(xié)同融合網(wǎng)絡(luò)

      其中?代表兩矩陣點(diǎn)乘過(guò)程中對(duì)應(yīng)分詞間協(xié)同信息的計(jì)算。

      對(duì)于圖1所示的代碼-查詢對(duì),經(jīng)過(guò)上述計(jì)算生成如圖4所示的協(xié)同矩陣。其中:每一行代表代碼片段中相應(yīng)的某一個(gè)分詞與查詢語(yǔ)句中每一個(gè)分詞的關(guān)聯(lián)程度;每一列代表查詢語(yǔ)句中相應(yīng)的某一個(gè)分詞與代碼片段中每一個(gè)分詞的關(guān)聯(lián)程度;矩陣中每個(gè)方格的不同顏色和數(shù)值代表相應(yīng)分詞間的協(xié)同信息。分詞間關(guān)聯(lián)越密切,相應(yīng)方格的顏色就越深,數(shù)值就越高;關(guān)聯(lián)越強(qiáng)意味著語(yǔ)義信息越相近,則相應(yīng)分詞對(duì)此代碼片段和查詢語(yǔ)句的匹配貢獻(xiàn)度就越高。因此,各分詞間的協(xié)同信息是衡量相應(yīng)代碼片段和查詢語(yǔ)句的語(yǔ)義信息是否匹配的重要因素。例如,查詢語(yǔ)句中的分詞“file”與代碼片段中的分詞“content”和“txt”的語(yǔ)義相似,有著密切的聯(lián)系,故圖4中相應(yīng)方格的顏色就較深;而查詢語(yǔ)句中的分詞“file”與代碼片段中的“public”分詞的語(yǔ)義聯(lián)系較弱,相應(yīng)方格的顏色就較淺。在計(jì)算相似度時(shí),更應(yīng)關(guān)注聯(lián)系密切的分詞語(yǔ)義,降低無(wú)關(guān)分詞對(duì)代碼匹配的影響。通過(guò)有側(cè)重地表征對(duì)匹配具有不同貢獻(xiàn)程度的分詞,提高特征信息表征準(zhǔn)確度,進(jìn)而提高代碼推薦的準(zhǔn)確性。

      圖4 協(xié)同矩陣中的協(xié)同信息

      由于協(xié)同矩陣第行中的每個(gè)元素代表代碼片段中第個(gè)分詞與查詢語(yǔ)句中每個(gè)分詞的關(guān)聯(lián)程度,則第行元素組成的協(xié)同信息代表代碼片段中第個(gè)分詞對(duì)該代碼-查詢對(duì)匹配的貢獻(xiàn)程度。因此,對(duì)協(xié)同矩陣的所有行向量進(jìn)行如式(13)的最大池化操作,得到該代碼片段中的各分詞與當(dāng)前查詢語(yǔ)句段匹配的貢獻(xiàn)權(quán)重。同理,對(duì)于協(xié)同矩陣的列向量,同樣如式(14)對(duì)它們進(jìn)行最大池化操作,得到查詢語(yǔ)句中所有分詞對(duì)于整個(gè)匹配的貢獻(xiàn)權(quán)重。

      故代碼片段和查詢語(yǔ)句各分詞的權(quán)重分?jǐn)?shù)計(jì)算如下:

      2.4 殘差網(wǎng)絡(luò)及相似性度量

      最終,代碼片段和查詢語(yǔ)句的匹配程度由余弦函數(shù)計(jì)算的相似分?jǐn)?shù)決定。如式(25)所示:

      2.5 模型訓(xùn)練

      代碼搜索任務(wù)實(shí)際上可以看成一個(gè)分類任務(wù)。每個(gè)查詢語(yǔ)句可能對(duì)應(yīng)著多個(gè)滿足功能需求的代碼片段,而它們之間存在著語(yǔ)義相似度,相似度分?jǐn)?shù)越高的代碼片段將被視為最佳匹配結(jié)果。因此,將代碼搜索任務(wù)轉(zhuǎn)化為將某一查詢語(yǔ)句歸類為代碼庫(kù)中某一代碼片段的分類任務(wù),故采用多分類協(xié)同熵函數(shù)作為模型訓(xùn)練的損失函數(shù),如式(26)所示:

      其中:L表示第個(gè)batch的損失值;是模型參數(shù);Avg表示值函數(shù);是整個(gè)數(shù)據(jù)集劃分的batch數(shù)。

      損失函數(shù)的計(jì)算過(guò)程分為softmax計(jì)算和協(xié)同熵計(jì)算兩個(gè)階段:

      2)對(duì)于此batch中的協(xié)同損失,個(gè)代碼片段可以作為個(gè)標(biāo)簽,計(jì)算將查詢語(yǔ)句分類為個(gè)代碼片段標(biāo)簽情況的損失,如式(28)所示:

      其中:l為此batch中第個(gè)查詢語(yǔ)句正確分類的情況;p為經(jīng)softmax歸一化輸出第個(gè)類別的概率。當(dāng)分類越準(zhǔn)確時(shí),p對(duì)應(yīng)的分量越接近1,L也越小。

      此外,模型使用Adam優(yōu)化器,將學(xué)習(xí)率設(shè)為0.000 4,學(xué)習(xí)率衰減值設(shè)為0.001進(jìn)行訓(xùn)練。

      3 實(shí)驗(yàn)與結(jié)果分析

      為了驗(yàn)證所提模型在代碼搜索任務(wù)上的效果以及結(jié)構(gòu)的合理性,構(gòu)建了以下實(shí)驗(yàn):

      1)RQ1。將BofeCS與當(dāng)今先進(jìn)模型對(duì)比,驗(yàn)證BofeCS在代碼搜索任務(wù)上的效果。

      2)RQ2。探索如何構(gòu)建輸入信息并選擇具體方法,最大限度地提升BofeCS的性能。

      3)RQ3。驗(yàn)證BofeCS中的不同部分對(duì)代碼搜索性能的影響。

      4)RQ4。驗(yàn)證BofeCS在其他編程語(yǔ)言上的表現(xiàn)。

      3.1 實(shí)驗(yàn)配置

      3.1.1環(huán)境配置

      所有實(shí)驗(yàn)均在linux環(huán)境下,使用兩塊內(nèi)存為11 GB的Nvidia GTX 2080Ti GPU,基于Tensorflow學(xué)習(xí)框架,使用Python語(yǔ)言進(jìn)行編碼、測(cè)試及運(yùn)行。

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

      采用CodeSearchNet數(shù)據(jù)集[8]進(jìn)行訓(xùn)練、驗(yàn)證和測(cè)試,該語(yǔ)料庫(kù)涵蓋超過(guò)兩百萬(wàn)條從開(kāi)源庫(kù)收集的代碼-查詢對(duì),其中查詢語(yǔ)句使用相應(yīng)代碼注釋表示,包含6種常用編程語(yǔ)言:Python、Javascript、Ruby、Go、Java和PHP。RQ1~RQ3均采用其中的Java數(shù)據(jù)集,RQ4采用全部6種數(shù)據(jù)集。該語(yǔ)料庫(kù)的具體細(xì)節(jié)如表1所示,預(yù)先按編程語(yǔ)言種類分為6類,并分別劃分為訓(xùn)練集、驗(yàn)證集(Valid)和測(cè)試集這3部分。

      表1CodeSearchNet語(yǔ)料庫(kù)的具體情況

      Tab.1 Details about CodeSearchNet corpus

      3.1.3評(píng)價(jià)指標(biāo)

      為了有效評(píng)估BofeCS的效果,本文采用代碼搜索領(lǐng)域使用最廣泛的3個(gè)指標(biāo)進(jìn)行評(píng)價(jià),分別是:

      1)歸一化折損累計(jì)增益(Normalized Discounted Cumulative Gain, NDCG)。它衡量實(shí)際返回的代碼片段排序列表與最理想的代碼片段排序列表之間的相似性,注重最終推薦的代碼列表中代碼片段的整體排序情況,如式(29)所示:

      其中:是驗(yàn)證/測(cè)試集中查詢語(yǔ)句數(shù),r是返回的top-搜索結(jié)果中位置的代碼片段與查詢語(yǔ)句的相關(guān)性。代碼搜索模型的NDCG分?jǐn)?shù)越高,代表返回推薦代碼列表的整體質(zhì)量越高,且將更相關(guān)的代碼排序到列表越靠前的位置。

      2)平均倒數(shù)排名(Mean Reciprocal Rank, MRR)。它衡量與查詢語(yǔ)句匹配的目標(biāo)代碼片段在返回的代碼列表中的排名情況,且只關(guān)心最相關(guān)代碼片段的排名情況,排名越靠前,MRR值越高,反之越低,如式(30)所示:

      其中:Rank是對(duì)于第個(gè)查詢語(yǔ)句返回的代碼片段推薦列表,最相關(guān)的代碼片段的排序位置。MRR值越高,代表代碼搜索的性能越好。

      3.1.4基線模型

      將BofeCS與當(dāng)前先進(jìn)的方法進(jìn)行對(duì)比分析,包括:

      1)UNIF[9]。它是有監(jiān)督代碼搜索模型,引入注意力機(jī)制,并結(jié)合每個(gè)分詞的嵌入信息,分別生成代碼片段與查詢語(yǔ)句的表征向量。

      2)TabCS[10]。它是雙層注意力代碼搜索模型,通過(guò)兩層注意力機(jī)制,根據(jù)輸入信息之間的關(guān)系分別生成代碼片段與查詢語(yǔ)句的表征向量。

      3)MRCS[11]。它是多模態(tài)代碼表征模型,基于遍歷和采樣的4種樹(shù)序列作為代碼的語(yǔ)法信息,結(jié)合源代碼的分詞序列進(jìn)行特征信息表征。

      3.2 RQ1:BofeCS在代碼搜索任務(wù)上的表現(xiàn)

      RQ1將各模型在代碼搜索任務(wù)上進(jìn)行對(duì)比分析。其中,MRCS模型將代表代碼語(yǔ)義信息的Tokens序列與代表代碼語(yǔ)法信息的樹(shù)序列作為代碼片段部分的輸入。Gu等[11]提出了基于遍歷和采樣的4種樹(shù)序列:SBT(Structure-Based Traversal)、LCRS(Left-Child Right-Sibling)、RootPath和Leafpath,RQ1使用效果最好的Tokens+SBT作為MRCS的輸入結(jié)構(gòu)。4個(gè)模型均在CodeSearchNet語(yǔ)料庫(kù)的Java數(shù)據(jù)集進(jìn)行模型的訓(xùn)練和測(cè)試,實(shí)驗(yàn)結(jié)果如表2所示。由表2可知,相較于基線方法UNIF、TabCS和MRCS,BofeCS的評(píng)價(jià)指標(biāo)值均有顯著提升,其中MRR值分別提升了95.94%、52.32%和16.95%。

      相較于其他3種方法,BofeCS不僅使用表征能力更強(qiáng)的BERT進(jìn)行語(yǔ)義嵌入,還在分詞粒度上捕獲查詢語(yǔ)句與源代碼之間的協(xié)同信息;同時(shí)考慮語(yǔ)義表征過(guò)程中丟失的語(yǔ)義信息,保證語(yǔ)義信息的完整性。這些都使BofeCS大幅提高了對(duì)語(yǔ)義信息表征的準(zhǔn)確性,具有較好的代碼搜索效果。

      表24個(gè)模型在代碼搜索任務(wù)上的對(duì)比實(shí)驗(yàn)結(jié)果

      Tab.2 Results of comparison experiment of four models on code search task

      3.3 RQ2:輸入信息的構(gòu)建和具體方法的選擇

      3.3.1探索BofeCS輸入信息的構(gòu)成

      BofeCS使用代碼片段和查詢語(yǔ)句的分詞序列(T)作為語(yǔ)義信息作為輸入,而MRCS采用基于遍歷和采樣的4種樹(shù)序列SBT、LCRS、RootPath和Leafpath代表代碼的語(yǔ)法特征信息。本節(jié)將代表代碼語(yǔ)法特征的4種樹(shù)序列分別與代表代碼語(yǔ)義特征的分詞序列一同作為BofeCS的輸入,討論樹(shù)序列是否能增強(qiáng)BofeCS的表征能力,提升代碼搜索準(zhǔn)確性。實(shí)驗(yàn)結(jié)果如表3所示,可以看出,使用任一種樹(shù)序列作為額外輸入,對(duì)BofeCS的代碼搜索效果均沒(méi)有積極作用。這可能是由于過(guò)多的信息作為輸入,導(dǎo)致BofeCS無(wú)法捕獲關(guān)鍵語(yǔ)義信息,表征向量中充斥過(guò)多噪聲導(dǎo)致搜索性能下降。因此,以分詞序列(T)作為BofeCS的輸入,既能保證表征信息的完整性,又能避免信息冗余而產(chǎn)生的噪聲,進(jìn)而提高模型的準(zhǔn)確性。

      表3樹(shù)序列對(duì)BofeCS性能的影響

      Tab.3 Influence of tree sequence on BofeCS performance

      3.3.2損失函數(shù)的選擇

      本文選擇如式(26)所示的多分類協(xié)同熵(S)作為損失函數(shù),式(32)所示的損失函數(shù)(M)也常用于代碼搜索模型的訓(xùn)練。

      表4兩種損失函數(shù)的表現(xiàn)

      Tab.4 Performance of two loss functions

      3.3.3池化操作的選擇

      由上文可知,BofeCS在協(xié)同融合模塊通過(guò)對(duì)協(xié)同矩陣展開(kāi)行/列操作,池化操作生成各分詞對(duì)于對(duì)應(yīng)查詢-代碼對(duì)的匹配權(quán)重值。最大池化和平均池化的區(qū)別是選擇分詞與對(duì)應(yīng)代碼片段或查詢語(yǔ)句的各分詞匹配的權(quán)重最大值或平均值作為該分詞的權(quán)重值。對(duì)比最大池化操作和平均池化兩種方法對(duì)BofeCS性能的影響,結(jié)果如表5所示,可以看出,最大池化操作的效果優(yōu)于平均池化操作。

      表5兩種池化操作的表現(xiàn)

      Tab.5 Performance of two pooling operations

      綜合以上實(shí)驗(yàn)結(jié)果,本文選擇多分類協(xié)同熵?fù)p失函數(shù)作為損失函數(shù),并選擇最大池化作為池化操作以最大限度提升BofeCS性能。

      3.4 RQ3:消融實(shí)驗(yàn)

      為驗(yàn)證BofeCS中各模塊的有效性,分別去除BofeCS中的協(xié)同融合網(wǎng)絡(luò)、殘差結(jié)構(gòu)和Dropout結(jié)構(gòu),結(jié)果如表6所示。由表6可知,這3個(gè)部分均對(duì)BofeCS的性能起著關(guān)鍵的作用:協(xié)同融合網(wǎng)絡(luò)用于捕獲代碼片段與查詢語(yǔ)句間映射關(guān)系中所蘊(yùn)含的語(yǔ)義信息,突出匹配的關(guān)鍵語(yǔ)義信息并指導(dǎo)表征過(guò)程;殘差結(jié)構(gòu)將第一模塊嵌入的原始語(yǔ)義向量與協(xié)同融合網(wǎng)絡(luò)生成的協(xié)同向量進(jìn)行融合,保證了表征語(yǔ)義信息的完整性;Dropout結(jié)構(gòu)丟棄部分隱藏層節(jié)點(diǎn),使BofeCS不會(huì)過(guò)度依賴訓(xùn)練數(shù)據(jù)集的局部特征,增強(qiáng)模型的泛化能力。

      表6消融實(shí)驗(yàn)結(jié)果

      Tab.6 Results of ablation experiments

      3.5 RQ4:BofeCS在多語(yǔ)言上的表現(xiàn)

      CodeSearchNet是目前代碼搜索研究最為廣泛的數(shù)據(jù)集,共包含6種常用編程語(yǔ)言,超過(guò)200萬(wàn)條數(shù)據(jù)。因此在CodeSearchNet數(shù)據(jù)集上對(duì)BofeCS的多語(yǔ)言代碼搜索任務(wù)進(jìn)行實(shí)驗(yàn)并分析。實(shí)驗(yàn)結(jié)果如表7所示,可以看出,BofeCS在6種語(yǔ)言上都具有較高的準(zhǔn)確度,且在PHP語(yǔ)言上表現(xiàn)最優(yōu),在Ruby語(yǔ)言上的代碼搜索性能較弱。這可能由于Ruby數(shù)據(jù)集的數(shù)據(jù)量?jī)H為Java數(shù)據(jù)集的11%,模型無(wú)法充分地學(xué)習(xí)深層語(yǔ)義聯(lián)系,但良好的結(jié)果依然說(shuō)明BofeCS在較小的數(shù)據(jù)集上仍能展現(xiàn)較優(yōu)的代碼搜索效果。因此,BofeCS在代碼搜索任務(wù)中具有較強(qiáng)的泛化能力。

      表7BofeCS在6種語(yǔ)言上的表現(xiàn)

      Tab.7 Performance of BofeCS in six languages

      4 結(jié)語(yǔ)

      針對(duì)代碼搜索中存在的協(xié)同信息缺失問(wèn)題,本文提出了一個(gè)代碼搜索模型BofeCS。實(shí)驗(yàn)與結(jié)果分析表明,BofeCS能有效提高代碼搜索的準(zhǔn)確性,同時(shí)具有較高的多語(yǔ)言搜索的泛化能力。本文的研究結(jié)論如下:1)源代碼與查詢語(yǔ)言之間存在較強(qiáng)的協(xié)同信息,并影響模型表征的準(zhǔn)確度;2)協(xié)同融合網(wǎng)絡(luò)能有效地提取源代碼與查詢語(yǔ)言之間的協(xié)同信息,提高表征的準(zhǔn)確性;3)BofeCS包含的3個(gè)模塊具有充分的結(jié)構(gòu)合理性,同時(shí)具有多語(yǔ)言搜索的泛化能力。

      未來(lái)工作將探索更有效的代碼結(jié)構(gòu)信息表示方法以提高對(duì)于代碼的表征能力,還將嘗試使用遷移學(xué)習(xí)、元學(xué)習(xí)等技術(shù)來(lái)提高模型對(duì)不同數(shù)據(jù)集的適應(yīng)能力。

      [1] YAO Z, PEDDAMAIL J R, SUN H. CoaCor: code annotation for code retrieval with reinforcement learning [C]// Proceedings of the 2019 World Wide Web Conference. Republic and Canton of Geneva: International World Wide Web Conferences Steering Committee, 2019: 2203-2214.

      [2] WAN Y, SHU J, SUI Y, et al. Multi-modal attention network learning for semantic source code retrieval [C]// Proceedings of the 34th IEEE/ACM International Conference on Automated Software Engineering. Piscataway: IEEE, 2019: 13-25.

      [3] GU X, ZHANG H, KIM S. Deep code search [C]// Proceedings of the ACM/IEEE 40th International Conference on Software Engineering. New York: ACM, 2018: 933-944.

      [4] YU Z, YU J, XIANG C, et al. Beyond bilinear: generalized multimodal factorized high-order pooling for visual question answering [J]. IEEE Transactions on Neural Networks and Learning Systems, 2018, 29(12): 5947-5959.

      [5] LI L, DONG R, CHEN L. Context-aware co-attention neural network for service recommendations [C]// Proceedings of the IEEE 35th International Conference on Data Engineering Workshops. Piscataway: IEEE, 2019: 201-208.

      [6] LI B, SUN Z, LI Q, et al. Group-wise deep object co-segmentation with co-attention recurrent neural network [C]// Proceedings of the 2019 IEEE/CVF International Conference on Computer Vision. Piscataway: IEEE, 2019: 8518-8527.

      [7] HE K, ZHANG X, REN S, et al. Deep residual learning for image recognition[C]// Proceedings of the 2016 IEEE Conference on Computer Vision and Pattern Recognition. Piscataway: IEEE, 2016: 770-778.

      [8] HUSAIN H, WU HH, GAZIT T, et al. CodeSearchNet challenge: evaluating the state of semantic code search [EB/OL]. [2022-09-12].https://arxiv.org/pdf/1909.09436.pdf.

      [9] CAMBRONERO J, LI H, KIM S, et al. When deep learning met code search[C]// Proceedings of the 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM, 2019: 964-974.

      [10] XU L, YANG H, LIU C, et al. Two-stage attention-based model for code search with textual and structural features[C]// Proceedings of the 2021 IEEE International Conference on Software Analysis, Evolution and Reengineering. Piscataway: IEEE, 2021: 342-353.

      [11] GU J, CHEN Z, MONPERRUS M. Multimodal representation for neural code search[C]// Proceedings of the 2021 IEEE International Conference on Software Maintenance and Evolution. Piscataway: IEEE, 2021: 483-494.

      [12] LV F, ZHANG H, LOU J G, et al. CodeHow: effective code search based on API understanding and extended Boolean model (E)[C]// Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. Piscataway: IEEE, 2015: 260-270.

      [13] LU M, SUN X, WANG S, et al. Query expansion via WordNet for effective code search[C]// Proceedings of the IEEE 22nd International Conference on Software Analysis, Evolution, and Reengineering. Piscataway: IEEE, 2015: 545-549.

      [14] LEMOS O A L, DE PAULA A C, ZANICHELLI F C, et al. Thesaurus-based automatic query expansion for interface-driven code search [C]// Proceedings of the 11th Working Conference on Mining Software Repositories. New York: ACM, 2014: 212-221.

      [15] LIU J, KIM S, MURALI V, et al. Neural query expansion for code search[C]// Proceedings of the 3rd ACM SIGPLAN International Workshop on Machine Learning and Programming Languages. New York: ACM, 2019: 29-37.

      [16] WANG C, NONG Z, GAO C, et al. Enriching query semantics for code search with reinforcement learning[J]. Neural Networks, 2022, 145: 22-32.

      [17] ZOU Q, ZHANG C. Query expansion via learning change sequences[J]. International Journal of Knowledge-based and Intelligent Engineering Systems, 2020, 24(2): 95-105.

      [18] HU G, PENG M, ZHANG Y, et al. Unsupervised software repositories mining and its application to code search[J]. Software: Practice and Experience, 2020, 50(3): 299-322.

      [19] WU H, YANG Y. Code search based on alteration intent[J]. IEEE Access, 2019, 7: 56796-56802.

      [20] WANG H, ZHANG J, XIA Y, et al. COSEA: convolutional code search with layer-wise attention [EB/OL]. [2022-09-12].https://arxiv.org/pdf/2010.09520.pdf.

      [21] LING X, WU L, WANG S, et al. Deep graph matching and searching for semantic code retrieval[J]. ACM Transactions on Knowledge Discovery from Data, 2021, 15(5): No.88.

      [22] WANG W, LI G, MA B, et al. Detecting code clones with graph neural network and flow-augmented abstract syntax tree[C]// Proceedings of the IEEE 27th International Conference on Software Analysis, Evolution and Reengineering. Piscataway: IEEE, 2020: 261-271.

      [23] 夏冰,龐建民,周鑫,等.二進(jìn)制代碼相似性搜索研究進(jìn)展[J]. 計(jì)算機(jī)應(yīng)用, 2022, 42(4):985-998.(XIA B, PANG J M, ZHOU X, et al. Research progress on binary code similarity search[J]. Journal of Computer Applications, 2022, 42(4):985-998.)

      [24] ZHANG J, WANG X, ZHANG H, et al. A novel neural source code representation based on abstract syntax tree [C]// Proceedings of the IEEE/ACM 41st International Conference on Software Engineering. Piscataway: IEEE, 2019: 783-794.

      [25] LING C, LIN Z, ZOU Y, et al. Adaptive deep code search [C]// Proceedings of the 28th International Conference on Program Comprehension. New York: ACM, 2020: 48-59.

      [26] MA H, LI Y, JI X, et al. MsCoa: multi-step co-attention model for multi-label classification [J]. IEEE Access, 2019, 7: 109635-109645.

      [27] ZHANG P, ZHU H, XIONG T, et al. Co-attention network and low-rank bilinear pooling for aspect based sentiment analysis [C]// Proceedings of the 2019 IEEE International Conference on Acoustics, Speech and Signal Processing. Piscataway: IEEE, 2019: 6725-6729.

      [28] SHUAI J, XU L, LIU C, et al. Improving code search with co-attentive representation learning[C]// Proceedings of the 28th International Conference on Program Comprehension. New York: ACM, 2020: 196-207.

      [29] SHWARTZ-ZIV R, TISHBY N. Opening the black box of deep neural networks via information [EB/OL]. [2022-09-12].https://arxiv.org/pdf/1703.00810.pdf.

      [30] BELGHAZI M I, BARATIN A, RAJESWAR S, et al. Mutual information neural estimation[C]// Proceedings of the 35th International Conference on Machine Learning. New York: JMLR.org, 2018: 531-540.

      Code search model based on collaborative fusion network

      SONG Qihong1,2, LIU Jianxun1,2*, HU Haize1,2, ZHANG Xiangping1,2

      (1(),411201,;2,,411201,)

      Searching and reusing relevant code can significantly improve software development efficiency. The deep learning-based code search models usually embed code pieces and query statements into the same vector space and then match and output the relevant code by computing cosine similarity; however, most of these models ignore the collaborative information between code pieces and query statements. To fully represent semantic information, a collaborative fusion-based code search model named BofeCS was proposed. Firstly, BERT (Bidirectional Encoder Representations from Transformers) model was utilized to extract the semantic information of the input sequences and then represent it as vectors. Secondly, a collaborative fusion network was constructed to extract the token-level collaborative information between code pieces and query statements. Finally, a residual network was built to alleviate the semantic information loss during the representation process. The multi-lingual dataset CodeSearchNet was used to carry out experiments to evaluate the effectiveness of BofeCS. Experimental results show that BofeCS can significantly improve the accuracy of code search and outperform the baseline models, UNIF (embedding UNIFication), TabCS (Two-stage Attention-Based model for Code Search), and MRCS (Multimodal Representation for neural Code Search), in Mean Reciprocal Rank (MRR), Normalized Discounted Cumulative Gain (NDCG), and TopSuccess hit Rate (SR@), where the MRR values are improved by 95.94%, 52.32%, and 16.95%, respectively.

      software development; code search; collaborative fusion; BERT (Bidirectional Encoder Representations from Transformers); residual network

      This work is partially supported by National Natural Science Foundation of China (61872139).

      SONG Qihong, born in 1998, M. S. candidate. His research interests include code search, code completion.

      LIU Jianxun, born in 1970, Ph. D., professor. Her research interests include big data, service computing, cloud computing.

      HU Haize, born in 1989, Ph. D. candidate, lecturer. His research interests include data mining, code search.

      ZHANG Xiangping, born in 1993, Ph. D. candidate. His research interests include code representation, code clone detection.

      TP311.5

      A

      1001-9081(2023)12-3896-07

      10.11772/j.issn.1001-9081.2022111783

      2022?11?29;

      2023?03?25;

      2023?03?28。

      國(guó)家自然科學(xué)基金資助項(xiàng)目(61872139)。

      宋其洪(1998—),男,陜西寶雞人,碩士研究生,CCF會(huì)員,主要研究方向:代碼搜索、代碼補(bǔ)全;劉建勛(1970—),男,湖南衡陽(yáng)人,教授,博士,CCF杰出會(huì)員,主要研究方向:大數(shù)據(jù)、服務(wù)計(jì)算、云計(jì)算;扈海澤(1989—),男,湖南邵陽(yáng)人,講師,博士研究生,主要研究方向:數(shù)據(jù)挖掘、代碼搜索;張祥平(1993—),男,福建三明人,博士研究生,主要研究方向:代碼表征、代碼克隆檢測(cè)。

      猜你喜歡
      池化分詞語(yǔ)句
      基于緊湊型雙線性網(wǎng)絡(luò)的野生茵識(shí)別方法研究
      基于Sobel算子的池化算法設(shè)計(jì)
      卷積神經(jīng)網(wǎng)絡(luò)中的自適應(yīng)加權(quán)池化
      重點(diǎn):語(yǔ)句銜接
      結(jié)巴分詞在詞云中的應(yīng)用
      基于卷積神經(jīng)網(wǎng)絡(luò)和池化算法的表情識(shí)別研究
      精彩語(yǔ)句
      值得重視的分詞的特殊用法
      如何搞定語(yǔ)句銜接題
      高考分詞作狀語(yǔ)考點(diǎn)歸納與疑難解析
      陇川县| 彭水| 波密县| 滦平县| 伽师县| 南城县| 道孚县| 商洛市| 呼玛县| 阿图什市| 南皮县| 澎湖县| 怀安县| 固镇县| 吴堡县| 昭觉县| 临安市| 常德市| 涿州市| 定边县| 湖北省| 綦江县| 新巴尔虎左旗| 渑池县| 泉州市| 岐山县| 连云港市| 临汾市| 永定县| 雷波县| 四会市| 凉城县| 阳朔县| 武威市| 江门市| 广元市| 集贤县| 霍林郭勒市| 弋阳县| 石景山区| 卢湾区|