摘 要:針對基于語言模型的代碼補全方法忽略源代碼中結構信息和命名信息而導致補全準確率偏低的問題,提出一種基于多任務學習的代碼補全方法(multi-task learning code completion,MTLCC)。MTLCC對源代碼數(shù)據(jù)集進行數(shù)據(jù)清洗和預處理,通過抽象語法樹(abstract syntax tree,AST)提取源代碼中的結構信息和命名信息;構建基于Transformer的多任務學習網(wǎng)絡,采用軟參數(shù)共享學習方式分別對源代碼的節(jié)點類型預測、節(jié)點值預測和語句預測進行訓練;利用集束搜索對模型推理結果進行后期處理生成代碼補全建議列表。實驗結果表明,與Pointer network、LSTM+TransformerXL和CodeGPT中最好的模型相比,MTLCC在節(jié)點類型預測和節(jié)點值預測任務中的準確率分別提升了2.5%和1.7%、MRR分別提升了3.7%和2.4%,在語句預測任務中的ROUGE-L分數(shù)(L@4)提升了0.055。
關鍵詞:代碼補全;多任務學習;抽象語法樹;Transformer;集束搜索
中圖分類號:TP391 文獻標志碼:A
文章編號:1001-3695(2023)03-036-0863-05
doi:10.19734/j.issn.1001-3695.2022.08.0396
Code completion method based on multi-task learning
Shuai Xianga,Wei Lea,b,Shu Hongpingb
(a.School of Software Engineering,b.Software Automatic Generation amp; Intelligence Service Key Laboratory of Sichuan Province,Chengdu University of Information Technology,Chengdu 610225,China)
Abstract:Aiming at the problem that the language model-based code completion method ignored the structural information and naming information in the source code,which leaded to the low completion accuracy,this paper proposed a code completion method based on MTLCC.MTLCC cleaned and preprocessed the source code dataset,extracted the structural information and naming information in the source code through the AST.It built a multi-task learning network based on Transformer,and adop-ted the soft parameter sharing learning method to train the node type prediction,node value prediction and sentence prediction of the source code respectively.It used beam search to post-process the model inference results to generate a list of code completion suggestions.The experimental results show that,compared with the best models in Pointer network,LSTM+TransformerXL and CodeGPT,the accuracy of MTLCC in node type prediction and node value prediction tasks is improved by 2.5% and 1.7%,respectively,and the MRR is improved by 3.7% and 2.4%,the ROUGE-L score in the sentence prediction task(L@4) is improved by 0.055.
Key words:code completion;multi-task learning;abstract syntax tree;Transformer;beam search
0 引言
隨著軟件規(guī)模和復雜性的提高,對程序編寫準確性和效率的要求也日益提升。代碼補全基于已編寫代碼片段建議下一個或多個可能的token,作為集成開發(fā)環(huán)境(integrated development environment,IDE)中的必備功能,代碼補全有效提高了程序編寫準確性和效率,減輕了開發(fā)人員的負擔。傳統(tǒng)代碼補全工具依賴于代碼編譯時的類型信息或啟發(fā)式規(guī)則提出建議[1,2],隨著大數(shù)據(jù)、人工智能技術的發(fā)展,越來越多的研究者專注于從大規(guī)模代碼庫中學習[3]。研究人員假設編程語言屬于自然語言范疇,并且具有重復性和可預測統(tǒng)計學規(guī)律[4,5],可以使用自然語言處理技術從源代碼中提取自然語言的統(tǒng)計特征和重復模式?;谡Z言模型的代碼補全方法中n-gram模型是使用最早和最廣泛的語言模型之一[6,7],n-gram模型是概率馬爾可夫鏈模型,在給定n-1個標記組成上下文的情況下預測文本。Tu等人[8]建立在n-gram模型上,使用緩存機制來捕獲源代碼中的局部;Hellendoorn等人[9]通過利用包括嵌套范圍、局部性和無限詞匯量在內(nèi)的各種技術改進了n-gram模型。
隨著深度學習在圖像識別、機器翻譯、自動駕駛等多個領域取得卓越表現(xiàn),源代碼語言建模技術轉(zhuǎn)向基于深度學習神經(jīng)網(wǎng)絡。Li等人[10]提出了基于循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network,RNN)的代碼補全方式,并且利用指針網(wǎng)絡結構來解決模型的OoV(out of vocabulary)問題。Liu等人[11]利用工具將JavaScript代碼語料庫中的代碼轉(zhuǎn)換為AST,并利用其結構信息將代碼補全問題轉(zhuǎn)換為對樹葉節(jié)點的預測問題,利用長短期記憶(long short-term memory,LSTM)模型和程序解析方法實現(xiàn)對下一個token的預測,但受限于模型自身的結構,該方法訓練效率慢且被證明只能捕捉200個詞匯的上下文依賴[12]。Svyatkovskiy等人[13]提出了一種基于GPT-C模型的代碼補全方法,支持多類型語言的語句補全。Liu等人[14]提出了一種多任務學習的代碼補全方法,采用硬參數(shù)共享的方式,使用TransformerXL和LSTM模型作為AST的編碼器,分別對token類型和值進行預測。
在源代碼的AST表示中,節(jié)點類型和節(jié)點值是兩個密切相關的屬性,類型可以作為值的約束,反之亦然?,F(xiàn)有代碼補全方法中沒有很好地考慮這種相關性,將源代碼作為單一自然語言進行學習,忽略了其本身結構信息和命名信息。基于以上問題提出了MTLCC,相關任務可以為彼此的學習過程提供有效約束,從一項任務中獲得的知識可有助于另一項任務,從而提升模型對于代碼的預測能力。
1 相關技術
1.1 Transformer網(wǎng)絡
Transformer是一系列的神經(jīng)網(wǎng)絡,旨在處理有序的序列數(shù)據(jù)[15]。Transformer廣泛應用于自然語言處理(NLP)和自然語言理解(NLU)領域,注意力機制使Transformer能夠?qū)W⒂谳斎氲倪x擇性部分,從而產(chǎn)生更多相關的輸出[16]。文獻[17,18]表明Transformer在多個NLP任務上的表現(xiàn)優(yōu)于RNN和LSTM模型。
GPT-2是Transformer的變體之一。GPT-2是一種自回歸的預訓練模型,由多頭自注意力層、前饋神經(jīng)網(wǎng)絡層和歸一化層組成,用于語言建模任務的GPT-2具有softmax激活函數(shù)的線性輸出層。
1.2 多任務學習
多任務學習(multi-task learning,MTL)是指同時學習多個相關任務,在學習過程中相關任務之間可以共享知識,利用任務相關性來提升模型的性能和泛化能力。MTL已被證明在許多自然語言處理任務中的有效性,如機器翻譯[19]、序列標注[20,21]和文本摘要生成[22,23]。
MTL學習方式主要分為硬參數(shù)共享學習和軟參數(shù)共享學習。前者在多個任務之間共享網(wǎng)絡的幾層隱藏層,在靠近輸出層的網(wǎng)絡開始分叉去做不同的任務。不同任務通過共享網(wǎng)絡底部的幾層隱藏層來學習一些共有的抽象層次低的特征,這種方法底層共享的參數(shù)是完全相同的。軟參數(shù)共享方式MTL不要求底部的參數(shù)完全一樣,而是對不同任務的底部參數(shù)進行正則化。相對于硬參數(shù)共享的MTL,學習模型的約束更加寬松,當任務關系不是特別緊密時,能學習得到更好的結果。
MTL訓練過程中不同任務分別對于不同的訓練數(shù)據(jù)集,每次迭代過程中隨機挑選一個任務,然后從該任務中隨機選擇一些訓練樣本計算梯度并且更新參數(shù)。通常使用交替訓練的方式近似地實現(xiàn)多個任務的同時學習。假設有N個相關任務,第n個任務的訓練集為Dn,包含Kn個樣本。
其中:x(n,k)和y(n,k)表示第n個任務中的第k個樣本以及所對應的標簽。假設這N個任務所對應的模型分別為fn(x;θ),1≤n≤N,則MTL的聯(lián)合目標函數(shù)為所有任務損失函數(shù)的線性加權,即
其中:lossn(·)是第n個任務的損失函數(shù);wn是第n個任務的權重;θ表示包含了MTL中共享模塊和私有模塊的所有參數(shù)。權重根據(jù)不同任務的重要程度或者難度來賦值。
2 基于多任務學習的代碼補全方法
本文工作主要分為數(shù)據(jù)集預處理、模型訓練和后期處理,流程如圖1所示。首先,對數(shù)據(jù)集中程序文件進行預處理,提取代碼中的重要信息(如命名信息)并對源代碼進行標記化,并且轉(zhuǎn)換為AST序列。源文件被處理成兩種不同的數(shù)據(jù),即通過前序深度優(yōu)先遍歷的AST節(jié)點序列數(shù)據(jù)和自然語言文本數(shù)據(jù)。模型訓練階段包括三個任務,即節(jié)點類型預測任務、節(jié)點值預測任務和語句預測任務,使用軟參數(shù)共享MTL的訓練策略,這三個任務之間存在一些共同的特征,并且這些特征可以相互促進同時學習。
2.1 預處理
源代碼數(shù)據(jù)集的質(zhì)量將直接影響模型訓練效果和代碼補全效果,因此要對數(shù)據(jù)集進行數(shù)據(jù)清洗和預處理操作。
a)數(shù)據(jù)清洗。首先,刪除數(shù)據(jù)集中的重復文件;其次,源代碼中會有大量的注釋和空行,這會對后面模型訓練產(chǎn)生干擾,對這一部分內(nèi)容進行清除;除英文字符外的其他字符(如日志部分)由于其不在詞匯表的范圍內(nèi),也要進行清除。
b)提取源代碼中的重要信息。任何編程語言都有明確的上下文無關文法,它可以用來將源代碼解析成AST,代表源代碼的抽象語法結構。AST中的每個非葉節(jié)點代表程序中的結構信息,每個葉節(jié)點對應于程序中的一個終端,包含一個類型屬性和一個值屬性。
算法1 利用AST轉(zhuǎn)換源代碼序列算法
輸入:進行數(shù)據(jù)清洗后的源代碼文件f。
輸出:轉(zhuǎn)換后的源代碼序列文件s。
set←(○/); //將set集合設置為空
json_node←(○/); //將json_node字典設置為空
for 節(jié)點in ast.parse(f) //遍歷文件f所生成的抽象語法樹
節(jié)點類型名←“LIBRARY”等其他特殊標記;
json_node[‘type’]←用特殊標記替換后的節(jié)點類型名;
json_node[‘value’]←節(jié)點值;
set←json_node
s←json.dump(set); //將set集合轉(zhuǎn)換為json格式
return s.
在經(jīng)過數(shù)據(jù)清洗后,使用AST庫將源代碼中的數(shù)據(jù)轉(zhuǎn)換為對應的節(jié)點類型名稱,并且提取其中的一些命名信息,以便模型能夠?qū)W習到大量源代碼中的命名規(guī)則,如算法1所示。源代碼中導入的模塊用“MOULE”標記其類型名,庫函數(shù)用“LIBRARY”標記其類型名,自定義標識符用“VARIABLE”標記其類型名,關鍵字用其自身大寫標記其類型名,且它們與各自的節(jié)點值(即token)相對應。受Izadi等人[24,25]的啟發(fā),為了規(guī)范化輸入序列,將文本中的字符串統(tǒng)一使用特殊標記“STRING”表示,將數(shù)字統(tǒng)一使用特殊標記“NUMBER”表示,操作符號用“OP”表示。對于每個節(jié)點,使用“type:value”的形式來表示;對于不具有“value”屬性的節(jié)點,使用特殊符號“EMPTY”來表示。采用前序深度優(yōu)先遍歷算法將每個節(jié)點序列化。使用AST轉(zhuǎn)換源代碼片段方法如圖2所示。
c)BPE處理。除了使用AST的處理方式外,在語句預測任務中使用BPE(Byte pair encoder)編碼,BPE編碼是一種數(shù)據(jù)壓縮算法,用來在固定大小的詞匯表中實現(xiàn)可變長度的子詞;利用分詞原理,BPE迭代地合并最頻繁出現(xiàn)的字符序列。在實際應用中語料庫往往非常巨大,而詞匯表無法包含每一個詞匯,利用BPE編碼便可有效地平衡詞典大小和編碼步驟以解決OoV問題。
預處理階段將產(chǎn)生兩個文件,即源代碼中以“type:value”表示的序列文件和去除掉空行和注釋的源代碼文本文件。
2.2 模型訓練
模型訓練階段同時進行三個預測任務的學習,即節(jié)點類型預測、節(jié)點值預測和語句預測。MTLCC模型由三組GPT-2構成,每個模型使用隨機權重初始化且都有自身對應的輸入序列和訓練目標,如圖3所示。訓練期間采用每個epoch分配隨機任務的策略,節(jié)點類型預測任務、節(jié)點值預測任務和語句預測任務的分配概率分別為20%、40%和40%。由于節(jié)點類型預測任務的詞匯量非常有限,所以分配更少的epoch。三個任務的損失在訓練期間共享,調(diào)整參數(shù)以最小化三個任務之間的交叉損失熵的平均值。
3 實驗及分析
3.1 數(shù)據(jù)集
針對Python代碼補全任務,為了公平地與基準模型方法進行對比實驗,在兩個數(shù)據(jù)集上進行實驗來評估模型,分別從Github上收集開源Python項目而構建的個人數(shù)據(jù)集(PY190K)和公共數(shù)據(jù)集(PY150K)。其中PY150K曾用于文獻[10,14,26]的實驗中。PY150K包含15萬個程序源代碼文件,并且被解析為與源代碼文件相對應的AST文件存儲。文獻[10,14]在實驗中使用了以AST格式存儲的PY150K,文獻[26]的實驗中使用了未解析的PY150K。訓練集和測試集按照80%和20%的比例分配,表1展示了這兩個數(shù)據(jù)集的內(nèi)容。
3.2 實驗參數(shù)和設備
在轉(zhuǎn)換工具中使用Python中的AST庫和Tokenize庫,使用HuggingFace庫實現(xiàn)GPT-2網(wǎng)絡和MTL模型。本文選用50 257個常見的詞匯為數(shù)據(jù)集構建詞匯表。對于模型部分,采用了12層的GPT-2網(wǎng)絡,包括12個head部分。在模型訓練中使用了交叉熵損失和Adam優(yōu)化器,最初的學習率設置為0.000 01,epoch設置為200,最大序列長度設置為1 024,其余參數(shù)設置為默認值。實驗在配置有63 GB內(nèi)存、32 GB顯存的Tesla V100-SXM2和Intel Xeon CPU E5-2698 v4的10核服務器上進行。
3.3 評估指標
a)準確率。在節(jié)點類型和節(jié)點值預測任務中,模型為源代碼文件中給定上文中每個節(jié)點的類型或值提供一個有序的建議列表。
其中:recommendationstrue表示各候選代碼中得到正確的補全結果;recommendationsall表示所有的補全結果數(shù)。準確率的K值一般取1、3、5和10,當K值越大時,準確率的值也會越大,但為了更準確地體現(xiàn)模型對于節(jié)點類型和節(jié)點值的預測能力,本文取準確率的K=1作為補全結果的評估指標。
b)MRR(mean reciprocal rank)。它是以正確補全結果第一次出現(xiàn)在整個建議列表中的排名為標準(例如若排名為n,則MRR的值為1/n)。對于測試數(shù)據(jù)中的所有待補全的N個token,MRR取所有測試補全MRR得分的平均數(shù)。本文取K=10作為MRR評估指標。
c)在語句預測任務中使用文本摘要生成任務中的指標ROUGE-L。ROUGE是一種基于召回率的相似性度量方法,它計算模型生成文本的n元組(n-gram)和參考文本的共現(xiàn)概率。ROUGE-L是ROUGE度量的變體之一,使用最長公共子序列算法計算最長匹配的單詞序列,考慮了句子級別的結構相似性,并自動識別序列n-gram的最長共現(xiàn)鏈。
3.4 實驗結果及分析
代碼補全模型最基本的評估形式就是評估其在被給定一段上文作為輸入的情況下預測下一個標記的能力。本文選取了四組模型作為對照實驗,分別將Pointer network[7]、LSTM+TransformerXL[14]和CodeGPT[26]作為基線模型。其中,節(jié)點類型預測任務只選取Pointer network和LSTM+TransformerXL作為指標評估的基線模型,因為這兩個方法都使用了AST抽取源代碼,并且分別在節(jié)點類型預測任務上進行實驗;CodeGPT只針對生成token的值預測進行訓練。
表2展示了本文模型和基準模型對于節(jié)點類型預測任務分別在PY190K和PY150K數(shù)據(jù)集上的準確率和MRR結果。結果顯示,在PY150K數(shù)據(jù)集上的節(jié)點類型預測中,所有模型的準確率在64.3%~79.2%,MRR在67.9%~82.4%。而在基于PY190K數(shù)據(jù)集的實驗中,所有模型準確率和MRR分別在68.4%~81.0%和70.8%~85.1%。節(jié)點類型預測任務中的詞匯量非常有限,在越多的AST節(jié)點類型數(shù)據(jù)訓練下,預測的準確率效果會隨之提升。MTLCC提取了源代碼中的結構信息和命名信息,在這些節(jié)點類型預測任務上展現(xiàn)出了優(yōu)勢,比其他模型更能準確地預測出下一個節(jié)點的類型。
在節(jié)點值預測任務中,不考慮節(jié)點的類型,只針對于模型預測下一個token的準確性和MRR。節(jié)點值預測結果如表3所示,由于MTLCC采用MTL的訓練方式,使得節(jié)點類型和節(jié)點值之間的模型訓練能夠相互學習,從而促進了模型對于節(jié)點值預測任務的學習。在基于PY150K數(shù)據(jù)集的實驗中,本文方法比最好的CodeGPT模型準確率和MRR分別提升了1.5%和2.0%;而在PY190K數(shù)據(jù)集中分別提升了1.7%和2.4%。由此可見,相比于采用單個GPT-2模型(即CodeGPT)的代碼補全任務,本文提出的源代碼預處理方式和MTL學習策略是具有優(yōu)勢的。此外,當數(shù)據(jù)集越大、AST節(jié)點越多時,MTLCC相比于其他基準模型能夠?qū)W習到更多且正向提升其節(jié)點值預測性能。
在語句預測任務中,將源代碼視為自然語言文本,通過評估模型生成的文本片段來展示模型對于語句預測的性能。當語句長度為L@1時(即只生成一個token),所有模型的ROUGE-L分數(shù)都可能會達到1,所以在L@1時沒有意義。這里分別取生成的語句長度為L@2、L@4和L@6,基于不同長度的語句,采集每個模型生成樣本與測試集中的標簽對照,最終取ROUGE-L均值作為評估結果。表4展示了本文模型在語句預測任務中的ROUGE-L效果。結果顯示,所有模型在生成語句長度越短時,所生成文本的得分越高(即模型對下一段代碼的預測越準確);反之,則越低?;谧宰⒁饬C制的模型相對于指針混合網(wǎng)絡模型來說表現(xiàn)得更好,這是因為前者對于語句的長依賴關系具有更好的捕捉能力。本文方法在所有模型中展現(xiàn)出優(yōu)勢,并且在token長度為4的語句中達到最好效果,比最好的基線模型高出0.055的分數(shù)。
表5給出了MTLCC模型的部分代碼補全實例,其中包括作為上文輸入的代碼片段(CS)、補全結果(CR)、參考文本(RT)和補全語句的ROUGE-L得分(score)。在輸入輸出代碼中,“/n”符號表示換行符。從表5代碼補全實例中可以看出,MTLCC模型可以有效學習已定義方法中的參數(shù)或變量,并且在給出較長的上文代碼片段的情況下,模型補全的代碼也會越具有“預見性”,能夠準確補全整行代碼,不僅僅局限于下一個token。然而,MTLCC模型缺點在于當給出的上文代碼片段較少時,模型難以推理出最準確的補全結果,從而生成不相關補全結果。
4 結束語
程序中的源代碼相對于自然語言來說更具有規(guī)律和結構性,單一地將源代碼視為自然語言會剝奪其編程語言特性,不利于模型對下一個(或多個)token的預測。本文提出了MTLCC,一種基于多任務學習的代碼補全方法。MTLCC基于GPT-2網(wǎng)絡,采用軟參數(shù)共享學習方式在三個任務(即節(jié)點類型預測任務、節(jié)點值預測任務和語句預測任務)上進行訓練,并在這三個任務上分別進行指標評估。實驗結果表明,與三個基線模型相比,本文方法在所有任務中達到了最好的效果。
未來的代碼補全工作中可考慮將源代碼的語義信息包含到預測任務中,并且利用與源代碼相關信息(如代碼注釋)來提高代碼補全的準確性。
參考文獻:
[1]楊博,張能,李善平,等.智能代碼補全研究綜述[J].軟件學報,2020,31(5):1435-1453.(Yang Bo,Zhang Neng,Li Shanping,et al.Survey of intelligent code completion[J].Journal of Software,2020,31(5):1435-1453.)
[2]Murphy GC,Kersten M,F(xiàn)indlater L.How are Java software developers using the Ellipse IDE?[J].IEEE Software,2006,23(4):76-83.
[3]胡星,李戈,劉芳,等.基于深度學習的程序生成與補全技術研究進展[J].軟件學報,2019,30(5):1206-1223.(Hu Xing,Li Ge,Liu Fang,et al.Program generation and code completion techniques based on deep learning:literature review[J].Journal of Software,2019,30(5):1206-1223.)
[4]Hindle A,Barr E T,Su Zhendong,et al.On the naturalness of software[C]//Proc of the 34th International Conference on Software Engineering.Piscataway,NJ:IEEE Press,2012:837-847.
[5]Raychev V,Vechev M T,Yahav E.Code completion with statistical language models[C]//Proc of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation.New York:ACM Press,2014:419-428.
[6]Allamanis M,Sutton C.Mining source code repositories at massive scale using language modeling[C]//Proc of the 10th Working Confe-rence on Mining Software Repositories.Piscataway,NJ:IEEE Press,2013:207-216.
[7]Franks C,Tu Zhaopeng,Devanbu P T,et al.CACHECA:a cache language model based code suggestion tool[C]//Proc of the 37th IEEE/ACM International Conference on Software Engineering.Piscataway,NJ:IEEE Press,2015:705-708.
[8]Tu Zhaopeng,Su Zhendong,Devanbu P T.On the localness of software[C]//Proc of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering.New York:ACM Press,2014:269-280.
[9]Hellendoorn V J,Devanbu P T.Are deep neural networks the best choice for modeling source code?[C]//Proc of the 11th Joint Mee-ting on Foundations of Software Engineering.New York:ACM Press,2017:763-773.
[10]Li Jian,Wang Yue,Michael R L,et al.Code completion with neural attention and Pointer networks[C]//Proc of the 27th International Joint Conference on Artificial Intelligence.Palo Alto,CA:AAAI Press,2018:4159-4165.
[11]Liu Chang,Wang Xin,Richard S,et al.Neural code completion[EB/OL].(2016-11-05).https://openreview.net/forum?id=rJbPBt9lg.
[12]Khandelwal U,He He,Peng Qi,et al.Sharp nearby,fuzzy far away:how neural language models use context[C]//Proc of the 56th Annual Meeting of the Association for Computational.Stroudsburg,PA:Association for Computational Linguistics Press,2018:284-294.
[13]Svyatkovskiy A,Deng Shaokun,F(xiàn)u Shengyu,et al.IntelliCode compose:code generation using transformer[C]//Proc of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering.New York:ACM Press,2020:1433-1443.
[14]Liu Fang,Li Ge,Wei Bolin,et al.A self-attentional neural architecture for code completion with multi-task learning[C]//Proc of the 28th International Conference on Program Comprehension.New York:ACM Press,2020:37-47.
[15]Devlin J,Chang Mingwei,Toutanova K,et al.BERT:pre-training of deep bidirectional transformers for language understanding[C]//Proc of Conference of the North American Chapter of the Association for Computational Linguistics:Human Language Technologies.Stroudsburg,PA:Association for Computational Linguistics Press,2019:4171-4186.
[16]Vaswani A,Shazeer N,Parmar N,et al.Attention is all you need[EB/OL].(2017-12-06).http://doi.org/10.48550/arxiv.1706.03762.
[17]Luong T,Pham H,Manning C D.Effective approaches to attention-based neural machine translation[C]//Proc of Conference on Empirical Methods in Natural Language Processing.Stroudsburg,PA:Association for Computational Linguistics Press,2015:1412-1421.
[18]Radford A,Narasimhan K,Salimans T,et al.Improving language understanding by generative pre-training[EB/OL].(2019-06-16).https://www.gwern.net/docs/www/s3-us-west-2.amazonaws.com/d73fdc5ffa8627bce44dcda2fc012da638ffb158.pdf.
[19]Yang Zhilin,Dai Zihang,Yang Yiming,et al.XLNet:generalized autoregressive pretraining for language understanding[C]//Proc of the 33rd International Conference on Neural Information Processing Systems.2019:5753-5763.
[20]Dong Daxiang,Wu Hua,He Wei,et al.Multi-task learning for multiple language translation[C]//Proc of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing.Stroudsburg,PA:Association for Computer Linguistics Press,2015:1723-1732.
[21]Peng Nanyun,Dredze M.Multi-task domain adaptation for sequence tagging[C]//Proc of the 2nd Workshop on Representation Learning for NLP.Stroudsburg,PA:Association for Computer Linguistics Press,2017:91-100.
[22]Lin Ying,Yang Shengqi,Stoyanov V,et al.A multi-lingual multi-task architecture for low-resource sequence labeling[C]//Proc of the 56th Annual Meeting of the Association for Computational Linguistics.Stroudsburg,PA:Association for Computer Linguistics Press,2018:799-809.
[23]Guo Han,Pasunuru R,Bansal M.Soft layer-specific multi-task summarization with entailment and question generation[C]//Proc of the 56th Annual Meeting of the Association for Computational Linguistics.Stroudsburg,PA:Association for Computer Linguistics Press,2018:687-697.
[24]Izadi M,Heydarnoori A,Gousios G.Topic recommendation for software repositories using multi-label classification algorithms[J].Empirical Software Engineering,2021,26(5):1-33.
[25]Izadi M,Gismondi R,Gousios G.CodeFill:multi-token code completion by jointly learning from structure and naming sequences[C]//Proc of the 44th IEEE/ACM International Conference on Software Engineering.Piscataway,NJ:IEEE Press,2022:401-412.
[26]Lu Shuai,Guo Daya,Ren Shuo,et al.CodeXGLUE:a machine lear-ning benchmark dataset for code understanding and generation[EB/OL].(2021-03-16).http://doi.org/10.48550/arxiv.2102.04664.
收稿日期:2022-08-05;修回日期:2022-10-10 基金項目:四川省重點研發(fā)項目(2020YFG0299)
作者簡介:帥祥(1996-),男,四川成都人,碩士研究生,主要研究方向為智能服務、大數(shù)據(jù);魏樂(1979-),男(通信作者),河南鄭州人,副教授,碩導,碩士,主要研究方向為智能服務、云制造、大數(shù)據(jù)(weile@cuit.edu.cn);舒紅平(1974-),男,重慶人,教授,博導,博士,主要研究方向為軟件工程、數(shù)據(jù)挖掘、企業(yè)信息化.