陳勇 胡德鋒 徐超 陳楠楠
摘 要:針對(duì)智能合約開發(fā)效率不高、安全漏洞頻發(fā)等問(wèn)題,提出了一種基于代碼注釋調(diào)優(yōu)的智能合約自動(dòng)生成方法。首先結(jié)合智能合約代碼關(guān)聯(lián)注釋的語(yǔ)義信息,構(gòu)建智能合約聚類分析模型,實(shí)現(xiàn)功能類似智能合約的快速精準(zhǔn)聚類;接著劃分注釋關(guān)聯(lián)的合約層、函數(shù)層、接口層等不同層次智能合約知識(shí)庫(kù),以聚類后的代碼及注釋信息為基礎(chǔ),構(gòu)造多樣化Prompt特征提示語(yǔ)句數(shù)據(jù)集;最后,以大語(yǔ)言模型ChatGLM2-6B為基礎(chǔ),借助P-Tuning v2微調(diào)技術(shù),實(shí)現(xiàn)特定需求智能合約的自動(dòng)生成。為檢測(cè)該方法的有效性,借助雙語(yǔ)互譯質(zhì)量評(píng)估輔助工具BLEU和代碼安全檢測(cè)工具M(jìn)ythril與VaaS,同現(xiàn)有方法進(jìn)行了對(duì)比。實(shí)驗(yàn)結(jié)果表明,該方法生成的代碼BLEU平均值提升了13%左右,代碼安全性提高6%左右。此方法將代碼注釋信息融入智能合約的自動(dòng)生成,有效提升了智能合約的質(zhì)量,為高效開發(fā)安全可靠的智能合約提供了一種新的方法。
關(guān)鍵詞:智能合約;注釋;大語(yǔ)言模型;微調(diào);自動(dòng)生成
中圖分類號(hào):TP183?? 文獻(xiàn)標(biāo)志碼:A??? 文章編號(hào):1001-3695(2024)05-031-1502-06
doi: 10.19734/j.issn.1001-3695.2023.09.0401
Research of smart contract automatic generation method based on code annotation optimization
Abstract:To address the issues of low efficiency and frequent security vulnerabilities in smart contract development, this paper proposed a smart contract auto-generation method based on code comment optimization. Firstly, it constructed a smart contract clustering analysis model based on the semantic information of smart contract code associated annotations to achieve fast and accurate clustering of functions similar to smart contracts. Then,it divided the smart contract knowledge base into different levels such as the contract layer, function layer, and interface layer associated with the annotation. And based on the clustered code and annotation information, it constructed a diversified Prompt feature prompt statement dataset. Finally, it achieved automatic generation of smart contracts with specific needs based on the large language model ChatGLM2-6B and with the help of P-Tuning v2 fine-tuning technology. In order to test the effectiveness of this method, this paper conducted comparative experiments with existing methods using the bilingual translation quality assessment assistant tool BLEU and the code security detection tools Mythril and VaaS. Experimental results show that the average BLEU of the code generated by this method is increased by about 13%, and the code security is improved by about 6%. This method integrates code annotation information into the automatic generation of smart contracts, effectively improves the quality of smart contracts, and provides a new method for the efficient development of safe and reliable smart contracts.
Key words:smart contract; annotation; big language model; fine-tuning; automatically generate
0 引言
隨著智能合約的快速發(fā)展,其應(yīng)用領(lǐng)域越來(lái)越廣泛,智能合約的設(shè)計(jì)除了保證其本身的安全性之外,還需要了解相關(guān)應(yīng)用領(lǐng)域的知識(shí)和技能。因此,在智能合約領(lǐng)域經(jīng)常出現(xiàn)合約開發(fā)者與合約設(shè)計(jì)者的分離:合約開發(fā)人員在掌握智能合約編程語(yǔ)言的同時(shí)卻缺乏對(duì)合約邏輯的認(rèn)識(shí),設(shè)計(jì)人員在熟悉業(yè)務(wù)規(guī)則的同時(shí)卻缺乏對(duì)智能合約的理解。這無(wú)形中降低了智能合約開發(fā)效率,影響智能合約發(fā)展的步伐。其次,據(jù)文獻(xiàn)[1]調(diào)查統(tǒng)計(jì),截至2022年10月,以太坊中部署發(fā)布的智能合約數(shù)量已經(jīng)高達(dá)5 100萬(wàn),其市場(chǎng)規(guī)模將以每年32%的增長(zhǎng)率增加,涉及的金額已經(jīng)超過(guò)億級(jí)。龐大的市場(chǎng)規(guī)模導(dǎo)致對(duì)智能合約的開發(fā)效率以及安全性要求更加嚴(yán)格,因此,如何快速開發(fā)出準(zhǔn)確安全的智能合約成為該領(lǐng)域發(fā)展亟待解決的關(guān)鍵問(wèn)題。
然而,目前智能合約的研究主要集中在合約的安全性,對(duì)智能合約的開發(fā)效率關(guān)注較少。一些研究[2,3]開始嘗試?yán)肦NN等神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)智能合約的自動(dòng)生成,但該類研究在代碼語(yǔ)義理解層面仍然存在不足,使得生成的合約存在安全性和正確性不高、人機(jī)交互效率低等問(wèn)題,難以滿足快速發(fā)展的智能合約應(yīng)用場(chǎng)景。近年來(lái),隨著注意力機(jī)制[4]的快速發(fā)展,以Chat-GPT[5]為代表的各種大語(yǔ)言模型廣泛應(yīng)用于各類通用場(chǎng)景,在代碼生成領(lǐng)域也表現(xiàn)卓越。微軟的Copilot融合了GPT的強(qiáng)大能力,能夠根據(jù)使用者輸入的信息從而生成相應(yīng)的通用類代碼;MetaAI發(fā)布的Code LLaMA Python可以生成各種高效的Python代碼。因此,大語(yǔ)言模型對(duì)于提升代碼生成的質(zhì)量和效率具有極大的促進(jìn)作用。然而,大語(yǔ)言模型的構(gòu)建離不開高質(zhì)量基礎(chǔ)數(shù)據(jù)的支撐,對(duì)于各類常規(guī)代碼的生成,大語(yǔ)言模型可以通過(guò)對(duì)大量成熟代碼的學(xué)習(xí)獲得出色的表現(xiàn),但對(duì)于智能合約這類新型軟件,直接應(yīng)用已有的大語(yǔ)言模型難免出現(xiàn)生成代碼不準(zhǔn)確、安全性不高等問(wèn)題,有必要進(jìn)行針對(duì)性的訓(xùn)練和調(diào)優(yōu)。
程序語(yǔ)義信息的提取是代碼自動(dòng)生成的關(guān)鍵,代碼注釋[6]作為源代碼的輔助信息,標(biāo)注了代碼實(shí)現(xiàn)的目的和基本思路,對(duì)于提升代碼語(yǔ)義信息提取的準(zhǔn)確率具有極大的幫助,已經(jīng)被開發(fā)者所廣泛使用以提升開發(fā)效率[7]。為此,本文從大語(yǔ)言模型出發(fā),借助于智能合約的代碼注釋,提出了一種基于注釋調(diào)優(yōu)的智能合約自動(dòng)生成方法,將代碼注釋提供的額外語(yǔ)義信息輔助大語(yǔ)言模型的調(diào)優(yōu),以提高模型學(xué)習(xí)過(guò)程中對(duì)于代碼語(yǔ)義的理解,從而更快速準(zhǔn)確地生成滿足不同需求的智能合約代碼,提高智能合約相關(guān)應(yīng)用的開發(fā)效率。本文的主要貢獻(xiàn)如下:
a)設(shè)計(jì)了基于注釋輔助聚類分析的智能合約相似性評(píng)估。對(duì)爬蟲程序獲取的智能合約進(jìn)行預(yù)處理和劃分代碼層次,從注釋信息和代碼兩個(gè)維度出發(fā),分別給予不同的權(quán)重并對(duì)各層次的智能合約源代碼進(jìn)行聚類分析,從而獲取到具有相似特征的層次化智能合約源代碼文檔和注釋,保證智能合約生成模型的準(zhǔn)確性,同時(shí)提高代碼的復(fù)用性。
b)構(gòu)建了代碼注釋組成的Prompt指令數(shù)據(jù)集。設(shè)計(jì)了多個(gè)Prompt模版,與注釋信息組成數(shù)據(jù)集的輸入部分,同時(shí)將智能合約代碼劃分為函數(shù)層、合約層、庫(kù)合約層以及接口層四個(gè)層次,并以此作為數(shù)據(jù)集的輸出部分。
c)訓(xùn)練了注釋輔助調(diào)優(yōu)的智能合約自動(dòng)生成大模型。采用P-Tuning v2微調(diào)方法,在ChatGLM2-6B大模型的基礎(chǔ)上利用智能合約數(shù)據(jù)集進(jìn)行高效的微調(diào)和訓(xùn)練,并選取調(diào)優(yōu)后的最佳模型,實(shí)現(xiàn)注釋信息輔助的智能合約代碼自適應(yīng)匹配。
1 相關(guān)研究
目前,大語(yǔ)言模型[8]在醫(yī)療、金融以及教育等領(lǐng)域都得到了廣泛的應(yīng)用,各大公司都發(fā)布了相應(yīng)的大語(yǔ)言模型,例如OpenAI的Chat-GPT、清華大學(xué)發(fā)布的ChatGLM-6B[9]大模型、Meta的LLaMA[10]以及百川等模型,大模型雖然具有強(qiáng)大的學(xué)習(xí)能力,但其參數(shù)量巨大、硬件要求高等特點(diǎn)成為了眾多學(xué)者考慮的問(wèn)題。另一方面,針對(duì)特定領(lǐng)域的問(wèn)題,其處理能力仍然有待提高,因此研究者們提出了大模型在垂直領(lǐng)域進(jìn)行下游任務(wù)的進(jìn)一步微調(diào)的方法。微軟公司提出了一種基于低階自適應(yīng)的大語(yǔ)言模型微調(diào)方法(LoRA)[11],該方法通過(guò)修改模型結(jié)構(gòu)實(shí)現(xiàn)高效微調(diào)。斯坦福大學(xué)提出的基于提示詞前綴優(yōu)化的方法(Prefix Tuning)[12]在近幾年里也得到了不斷的優(yōu)化和改進(jìn),例如Prompt Tuning、P-Tuning[13]、P-Tuning v2[14]等。微調(diào)使得大語(yǔ)言模型的發(fā)展更為廣泛,北京大學(xué)提出了開源的法律大語(yǔ)言模型(ChatLaw)[15],該模型是以LLaMA模型為基礎(chǔ)并采用LoRA方法針對(duì)法律領(lǐng)域知識(shí)進(jìn)行精準(zhǔn)微調(diào)而來(lái)。Wang等人[16]以LLaMA-7B為基準(zhǔn)模型,融入了大量的結(jié)構(gòu)化和非結(jié)構(gòu)化醫(yī)學(xué)領(lǐng)域的知識(shí)進(jìn)行微調(diào),提出了在醫(yī)療領(lǐng)域表現(xiàn)更佳的HuaTuo大語(yǔ)言模型。
針對(duì)智能合約領(lǐng)域的研究,目前主要以智能合約代碼漏洞檢測(cè)為主。文獻(xiàn)[17~19]從區(qū)塊鏈結(jié)構(gòu)中Solidity代碼層、EVM執(zhí)行層、區(qū)塊鏈系統(tǒng)層三個(gè)角度分析智能合約漏洞,其中Solidity代碼層包含重入漏洞(The Dao攻擊)、整數(shù)溢出漏洞等十幾個(gè)漏洞,EVM執(zhí)行層涉及短地址漏洞、以太丟失漏洞等四個(gè)漏洞,區(qū)塊鏈系統(tǒng)層主要包括時(shí)間戳依賴漏洞等三個(gè)漏洞。針對(duì)智能合約漏洞的檢測(cè)方法[17]主要分為形式化驗(yàn)證法、符號(hào)執(zhí)行法、模糊檢測(cè)法、中間表示法以及深度學(xué)習(xí)的方法,因此VaaS、Oyente[17]、SmartCheck[19]等工具廣泛應(yīng)用于智能合約漏洞的檢測(cè),智能合約的安全性問(wèn)題得到了有效的改善。此外,在智能合約與開發(fā)人員友好性交互方面,文獻(xiàn)[18,20]提出了一種對(duì)于特定領(lǐng)域智能合約自動(dòng)生成的方法,借助于深度學(xué)習(xí)中長(zhǎng)短期記憶遞歸神經(jīng)網(wǎng)絡(luò)(LSTM)構(gòu)建智能合約自動(dòng)生成模型,采用SmartCheck檢測(cè)生成代碼并得到了較好的實(shí)驗(yàn)結(jié)果,最后通過(guò)設(shè)計(jì)良好的交互界面提高了編程的友好性和高效性。
代碼注釋作為理解代碼的重要手段,不少研究者[21,22]對(duì)其使用方式、質(zhì)量評(píng)估和改進(jìn)等方面進(jìn)行了研究。王潮等人[23]總結(jié)了代碼注釋質(zhì)量評(píng)估相關(guān)的研究成果,從代碼注釋的一致性、重要性等角度指出代碼注釋對(duì)于程序語(yǔ)義的理解有著至關(guān)重要的作用。代碼注釋的一致性能夠充分體現(xiàn)出注釋內(nèi)容和對(duì)應(yīng)代碼真實(shí)運(yùn)行邏輯是否一致。高質(zhì)量代碼注釋有效減少了大模型理解代碼的代價(jià),尤其是在面臨著較大的代碼數(shù)據(jù)量的情況下,合理的代碼注釋從很大程度上緩解了該問(wèn)題。
在利用深度學(xué)習(xí)進(jìn)行代碼自動(dòng)生成的研究中,Iqbal等人[2]指出遞歸神經(jīng)網(wǎng)絡(luò)(RNN)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)以及生成的對(duì)抗網(wǎng)絡(luò)(GAN)是主要研究方向,其思想是利用各種神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搭建代碼自動(dòng)生成模型,并通過(guò)大量數(shù)據(jù)訓(xùn)練模型生成相應(yīng)的代碼。另一方面,ChatGLM2-6B 是由清華大學(xué)開源的開源中英雙語(yǔ)對(duì)話模型,Zheng等人[24]在此基礎(chǔ)上,經(jīng)過(guò)了600B代碼數(shù)據(jù)預(yù)訓(xùn)練,提出了CodeGeeX2的多語(yǔ)言代碼生成模型以及LLaMA在多語(yǔ)言代碼微調(diào)后的代碼生成模型Code LLaMA[25]。此外,BigCoder也發(fā)布了編程助手StarCode[26],具有代碼生成、補(bǔ)齊以及解釋等多種功能。
綜上所述,大模型在智能合約代碼生成領(lǐng)域已經(jīng)展現(xiàn)出良好的趨勢(shì),但如何增強(qiáng)大模型對(duì)代碼的語(yǔ)義理解能力仍然是研究者們需要進(jìn)一步探索的內(nèi)容,而注釋內(nèi)容能夠提供較強(qiáng)的語(yǔ)義信息,對(duì)于增強(qiáng)大模型的語(yǔ)義分析能力具有積極意義?;诖?,本文提出了基于代碼注釋和大語(yǔ)言模型微調(diào)技術(shù)相結(jié)合的智能合約自動(dòng)生成方法,以充分利用注釋的語(yǔ)義信息增強(qiáng)大模型的語(yǔ)義分析能力,提高其生成的智能合約代碼的正確性。
2 注釋信息輔助調(diào)優(yōu)的智能合約自動(dòng)生成與匹配方法
2.1 總體框架
以上述研究工作作為基礎(chǔ),本文提出了基于注釋信息輔助的智能合約自動(dòng)生成與匹配方法。首先,本文將從智能合約的注釋信息和代碼體兩個(gè)角度出發(fā),采用聚類技術(shù)針對(duì)智能合約各類層次的代碼進(jìn)行分析。然后,通過(guò)劃分聚類后的代碼層次并將注釋與之關(guān)聯(lián),構(gòu)建智能合約代碼生成的指令數(shù)據(jù)集,同時(shí)利用注釋信息輔助和安全檢測(cè)工具分別增強(qiáng)和保證其代碼的易理解性和可靠性。最后,以ChatGLM2-6B為基座模型,采用P-Tuning v2方法結(jié)合構(gòu)建的特定數(shù)據(jù)集對(duì)基座模型進(jìn)行高效微調(diào),開發(fā)人員利用界面輸入自己的功能需求從而匹配目標(biāo)代碼設(shè)計(jì)智能合約代碼,提高開發(fā)的高效性和準(zhǔn)確性。
本節(jié)將介紹整個(gè)研究過(guò)程的總體框架,具體如圖1所示。
由框架圖可知,本文研究思路主要分為三部分。首先利用爬蟲程序從以太坊上爬取智能合約源代碼文檔,將代碼和對(duì)應(yīng)注釋文檔劃分層次并通過(guò)文件序號(hào)建立對(duì)應(yīng)的映射關(guān)系。在注釋輔助智能合約源代碼聚類階段,本文對(duì)聚類的代碼和注釋文檔分別進(jìn)行預(yù)處理后作為輸入,從注釋和代碼兩個(gè)維度出發(fā),采用K-means算法生成各層次代碼簇,從而提取出具有高相似性的層次化代碼和注釋信息作為代碼生成的數(shù)據(jù)集。其次,在大模型微調(diào)數(shù)據(jù)集構(gòu)造部分,為確保篩選出對(duì)應(yīng)注釋內(nèi)容較多的代碼體,本文將聚類后的層次化代碼進(jìn)行二次預(yù)處理,并將代碼體對(duì)應(yīng)的注釋與Prompt模版構(gòu)成指令數(shù)據(jù)集的輸入部分,輸出部分為相應(yīng)的層次化智能合約代碼。最后,采用ChatGLM2-6B模型作為基礎(chǔ)模型,結(jié)合構(gòu)建的數(shù)據(jù)集進(jìn)行P-Tuning v2方式微調(diào),選取訓(xùn)練后智能合約代碼生成效果最優(yōu)的大模型,同時(shí)本文設(shè)計(jì)了便捷的人機(jī)交互界面,用戶在交互界面輸入需求信息,從而實(shí)現(xiàn)注釋輔助智能合約自適應(yīng)匹配。
2.2 注釋指導(dǎo)的智能合約聚類
就代碼分析而言,大多數(shù)研究?jī)H局限于代碼內(nèi)容本身,往往忽略了注釋為對(duì)應(yīng)代碼體所帶來(lái)的信息。因此除了代碼體本身這一基礎(chǔ)維度之外,注釋是本次研究的另一個(gè)重點(diǎn)。本文結(jié)合注釋信息文本和代碼文本兩個(gè)維度進(jìn)行聚類,從而提取相似的各層次智能合約代碼。聚類具體操作步驟如下:
注釋中含有較多的源代碼描述信息,能夠幫助開發(fā)者快速理解和閱讀智能合約源代碼。為提高研究的準(zhǔn)確性,本文對(duì)于獲取的智能合約源代碼文檔,應(yīng)盡量保證聚類實(shí)驗(yàn)前的智能合約文檔具有較多的注釋內(nèi)容。本文通過(guò)統(tǒng)計(jì)智能合約源代碼中注釋的行數(shù),從中篩選出注釋行數(shù)在300以上的智能合約代碼,同時(shí)文本量較大的智能合約文件含有豐富的注釋信息和代碼,故保留文件大小在50 KB~80 KB的智能合約文檔作為聚類的數(shù)據(jù)集。其次智能合約源程序文檔中含有眾多的JSON格式文本、二進(jìn)制代碼文本以及不含注釋的智能合約文本,這些源代碼對(duì)于實(shí)驗(yàn)沒(méi)有參考意義,因此在聚類實(shí)驗(yàn)前要進(jìn)行預(yù)處理,刪除此類智能合約源代碼文檔。
智能合約源代碼大體上由“function”“contract”“interface”和“l(fā)ibrary”四個(gè)層次代碼組成,對(duì)于聚類的數(shù)據(jù)集本文進(jìn)行了上述層次劃分。劃分過(guò)程中,鑒于源代碼結(jié)構(gòu)復(fù)雜,根據(jù)代碼的特殊形式獲取代碼和對(duì)應(yīng)的注釋內(nèi)容,例如“l(fā)ibrary”層代碼以“l(fā)ibrary Math {”和單行“}”結(jié)尾,注釋內(nèi)容則一般處于代碼開頭部分上一行并以“/**”開頭和“*/”結(jié)尾,故首先采用正則化表達(dá)式提取出注釋內(nèi)容,當(dāng)檢測(cè)到下述的代碼時(shí),首先提取出四個(gè)層次對(duì)應(yīng)的代碼存儲(chǔ)在相應(yīng)的文件中,層次化的代碼可以幫助開發(fā)者快速生成和管理目標(biāo)代碼。其次,注釋作為代碼的信息描述,將含注釋的源代碼中的注釋與源代碼分別進(jìn)行了不同文件的存儲(chǔ),有效地避免了聚類過(guò)程中這兩類樣本的相互干擾。然后通過(guò)文檔序號(hào)建立代碼體文檔和對(duì)應(yīng)注釋文檔的聯(lián)系,例如在提取過(guò)程中,提取出一個(gè)“interface”層代碼中一個(gè)接口代碼則為interface1文件,相應(yīng)的注釋文檔即對(duì)應(yīng)為interface1_note文件,建立序號(hào)映射關(guān)系的智能合約代碼體樣本和注釋信息樣本即為本次研究實(shí)驗(yàn)數(shù)據(jù)集。
K-means是一種基于距離劃分的聚類算法,其認(rèn)為兩個(gè)目標(biāo)的距離越近,相似度越大,故選取該算法為聚類算法。本文所處理的代碼和注釋都為字符和符號(hào)組成的文本,且隨著文本長(zhǎng)度增加,數(shù)據(jù)向量化的維度也會(huì)增大,余弦距離在高維空間中只受其向量夾角影響,而不受文本長(zhǎng)度的影響,從而能更好地捕捉數(shù)據(jù)之間的相似性。其次余弦距離的計(jì)算相對(duì)簡(jiǎn)單,這使得它在大規(guī)模數(shù)據(jù)集上的計(jì)算效率較高,故選取該算法為聚類算法。本文采用余弦距離(cosine distance)作為計(jì)算依據(jù),并分別計(jì)算智能合約各層次代碼內(nèi)容的余弦距離值以及對(duì)應(yīng)注釋內(nèi)容的余弦距離值,最后給予兩個(gè)余弦值一定的權(quán)重后相加即為樣本最終的判斷距離,通過(guò)衡量各樣本之間該距離從而實(shí)現(xiàn)聚類。
為提高聚類的準(zhǔn)確性,智能合約數(shù)據(jù)集在聚類前應(yīng)進(jìn)行預(yù)處理。首先,智能合約代碼中有些詞出現(xiàn)了很多次但不能體現(xiàn)出在代碼中的重要性,比如“public”“return”“internal”等詞并不能作為特征項(xiàng),因此本文設(shè)置了“public”該類詞作為停用詞。同理,注釋一般則是以“//”“/**/”等形式存在,所以這些詞也不能作為特征項(xiàng),注釋文檔聚類中應(yīng)設(shè)置“//”等停用詞。其次,鑒于Solidity語(yǔ)言特性,許多標(biāo)識(shí)符是含有大小寫的,例如“Contract”、變量名等,因此這里將大小寫視為一致。
在聚類過(guò)程中,需將每個(gè)文檔向量化,計(jì)算其余弦距離。本文采用空間向量模型(VSM),將代碼和注釋文檔看作由多組不同的特征項(xiàng)與對(duì)應(yīng)權(quán)重組成的向量,公式如下:
Di=Di(t1,w1;t2,w2;…;tn,wn)(1)
Gi=Gi(t1,w1;t2,w2;…;tn,wn)(2)
其中:Di和Gi分別表示第i個(gè)代碼和注釋文檔;tn為其中每個(gè)標(biāo)識(shí)符或關(guān)鍵字;wn為對(duì)應(yīng)的詞頻。每個(gè)代碼文檔中詞頻構(gòu)成代碼文檔向量化表示Ei=[w1;w2;…;wn],注釋文檔向量化表示為Ni=[w1;w2;…;wn],計(jì)算每個(gè)文檔與中心點(diǎn)的向量?jī)?nèi)積和。實(shí)驗(yàn)中選取多個(gè)聚類中心,依次計(jì)算各層次智能合約代碼Ei與中心文檔Ecenter的余弦距離值,同時(shí)計(jì)算該文檔對(duì)應(yīng)的注釋文檔Ni與中心文檔Ncenter的余弦距離,分別給予權(quán)重且比例為λ∶(1-λ),加權(quán)計(jì)算后進(jìn)行相加,公式為
聚類過(guò)程如算法1所示,具體如下:
a)對(duì)智能合約數(shù)據(jù)集進(jìn)行無(wú)效文檔去除,避免非合約結(jié)構(gòu)代碼對(duì)聚類的干擾,同時(shí)分別對(duì)代碼和注釋文檔進(jìn)行停用詞處理。
b)通過(guò)空間向量模型將各文檔向量化,隨機(jī)選取K個(gè)中心文檔作為聚類中心,循環(huán)開始標(biāo)志flag為true,當(dāng)滿足所有文檔都聚類至最近的聚類中心時(shí),循環(huán)標(biāo)志為false,即結(jié)束聚類。采用式(3)依次計(jì)算每段代碼及其注釋文檔與各中心點(diǎn)的距離,并將其分配給距離最近的中心文檔(第5~13行)。
c)在上一步完成后,重新計(jì)算K個(gè)簇中各文檔的平均距離并更新聚類中心(第15~17行)。
d)計(jì)算新、舊聚類中心的余弦距離,若中心點(diǎn)沒(méi)有發(fā)生變化,則結(jié)束本次聚類,否則返回算法1中第5行重復(fù)上述步驟直至聚類中心不再變化,結(jié)束標(biāo)志為flag=false(第18~23行)。
經(jīng)過(guò)聚類處理后,每個(gè)層次的代碼分為多個(gè)簇,一個(gè)簇中的代碼為相似的智能合約代碼,例如具有相似功能描述的“function”層次代碼則為一個(gè)簇。
算法1 基于注釋指導(dǎo)的智能合約K-means聚類算法
2.3 基于注釋輔助微調(diào)的多層次智能合約自動(dòng)生成方法
大模型是指深度學(xué)習(xí)中具有數(shù)以億計(jì)參數(shù)的巨大神經(jīng)網(wǎng)絡(luò)模型,這些模型在過(guò)去的幾年中得到了廣泛關(guān)注和發(fā)展,主要是由于它們?cè)诟鞣N任務(wù)上取得了令人矚目的性能提升。本文以ChatGLM2-6B 大模型為基座模型,設(shè)計(jì)了15個(gè)模仿使用者提問(wèn)方式的Prompt同注釋構(gòu)成指令數(shù)據(jù)集的輸入,注釋信息對(duì)應(yīng)的層次化代碼為輸出部分,通過(guò)基座模型對(duì)微調(diào)指令數(shù)據(jù)集的二次訓(xùn)練生成新的智能合約生成模型,實(shí)現(xiàn)智能合約的自動(dòng)化生成。在上述基礎(chǔ)上,本文采用了目前比較主流的P-Tuning v2微調(diào)方法訓(xùn)練模型,對(duì)生成的模型進(jìn)行評(píng)估并選取效果最優(yōu)的模型作為智能合約生成的大語(yǔ)言模型。
2.3.1 指令數(shù)據(jù)集預(yù)處理
聚類后的數(shù)據(jù)以代碼簇的形式輸出,每個(gè)代碼簇中含有較多高相似功能的智能合約代碼,因此需要對(duì)該數(shù)據(jù)進(jìn)行二次預(yù)處理。首先刪除智能合約注釋中的無(wú)關(guān)內(nèi)容,由于在聚類過(guò)程中進(jìn)行了停用詞處理,并沒(méi)有進(jìn)行相關(guān)代碼和注釋內(nèi)容的修改,注釋中仍存在著“/**”“@dev”“@notice”等無(wú)意義內(nèi)容,在這里將這些字符替換為空字符,并將注釋內(nèi)容重新寫入從而保證內(nèi)容的連貫性。其次,每個(gè)代碼簇中存在高相似度的智能合約代碼,為保證指令數(shù)據(jù)集的質(zhì)量,對(duì)每個(gè)簇中數(shù)據(jù)進(jìn)行相似度計(jì)算,對(duì)于相同的代碼則提取其中一個(gè)參與指令數(shù)據(jù)集的構(gòu)建。鑒于對(duì)智能合約代碼數(shù)據(jù)集劃分了層次,因此與之相對(duì)應(yīng)的單個(gè)注釋匹配字符量比較小,可以認(rèn)為是短文本類型,這恰恰符合Jaccard的計(jì)算特性。另一方面,Jaccard是一種常用的相似度計(jì)算方法,相比于其他算法,計(jì)算量以及效率更為良好,在智能合約自適應(yīng)匹配過(guò)程中,較好地降低了開發(fā)時(shí)間并且對(duì)于開發(fā)環(huán)境的要求更加友好。
故本文采用Jaccard[27]作為度量標(biāo)準(zhǔn),計(jì)算簇中代碼的相似度。對(duì)于每個(gè)簇中代碼,分別計(jì)算注釋和代碼的相似度,當(dāng)其中任意一者相似度高于0.9,則認(rèn)為這兩段代碼功能重復(fù)。 本文給定兩個(gè)集合,如式(4)所示,ui為代碼簇,表示簇中第i個(gè)代碼,ci為注釋文本簇,表示簇中對(duì)應(yīng)的第i個(gè)注釋,N為集合數(shù)量,相似度值為簇中代碼之間Jaccard度量值以及對(duì)應(yīng)注釋內(nèi)容Jaccard度量值最大值,當(dāng)最大值>0.9,則認(rèn)為是功能相同的代碼。
2.3.2 指令數(shù)據(jù)集構(gòu)建
在上述預(yù)處理后,如圖2所示,本文中指令數(shù)據(jù)集為JSON格式的數(shù)據(jù),數(shù)據(jù)模式如下:{“instruction”:“value1”,“input”:“value2”,“output”:“value3”},每條數(shù)據(jù)為包含instruction、input以及output三個(gè)鍵值對(duì)形式的JSON數(shù)據(jù),其中instruction為Prompt模版,該部分設(shè)計(jì)了15個(gè)模仿使用者提問(wèn)的方式,例如“請(qǐng)幫我生成{input}的相關(guān)代碼內(nèi)容”“你現(xiàn)在是一個(gè)語(yǔ)言模型,幫我生成相關(guān)的智能合約代碼,注釋如下:input”等,盡量最大范圍達(dá)到使用者在獲取智能合約代碼的各種提問(wèn)方式,從而提升大模型的輸出的準(zhǔn)確性。
注釋是代碼的相關(guān)信息描述,對(duì)于代碼的易理解性發(fā)揮著至關(guān)重要的作用,研究者們往往忽略了這兩者的關(guān)聯(lián)性。由于大語(yǔ)言模型在自然處理領(lǐng)域引起了廣泛關(guān)注,如何更有效地提升Prompt指令質(zhì)量也成為了研究熱點(diǎn)之一,智能合約代碼附有的注釋信息能夠?yàn)槠鋷?lái)更加準(zhǔn)確的描述。因此在提示指令工程中,本文加入了注釋信息同時(shí)隨機(jī)抽取一個(gè)模版構(gòu)建微調(diào)數(shù)據(jù)集的指令,這也是本文研究的要點(diǎn)。眾所周知,目前大多數(shù)研究者在提問(wèn)方式中通過(guò)GPT生成、人工構(gòu)造等方式盡可能最大化涉及使用者可能會(huì)提問(wèn)的各類問(wèn)句,由于智能合約涉及金融、醫(yī)療等多個(gè)領(lǐng)域,其代碼和注釋信息中內(nèi)容具有很強(qiáng)的現(xiàn)實(shí)含義,例如“token”代表貨幣,“address”代表使用者地址。結(jié)合這一內(nèi)容,本文在智能合約指令的數(shù)據(jù)集的input部分加入了注釋信息來(lái)幫助大模型更好地學(xué)習(xí)智能合約領(lǐng)域的知識(shí),如圖2所示,本文設(shè)計(jì)了多個(gè)提問(wèn)模版,隨機(jī)與注釋信息搭配構(gòu)成大模型學(xué)習(xí)的輸入內(nèi)容,output部分為輸出信息,即大模型在接收使用者的需求信息后所回應(yīng)的內(nèi)容,在這里將注釋對(duì)應(yīng)的層次化代碼作為數(shù)據(jù)集的輸出部分。
2.3.3 模型微調(diào)
自然語(yǔ)言處理目前存在一個(gè)重要范式,即一般領(lǐng)域的大規(guī)模預(yù)訓(xùn)練對(duì)特定任務(wù)領(lǐng)域的適應(yīng)。但隨著規(guī)模的變大,當(dāng)進(jìn)行特定任務(wù)適應(yīng)時(shí),由于訓(xùn)練成本太高,無(wú)法重新訓(xùn)練所有模型參數(shù),所以研究者提出在原有模型基礎(chǔ)上進(jìn)行一些垂直領(lǐng)域的微調(diào),從而達(dá)到更優(yōu)的效果。ChatGLM2-6B是由清華大學(xué)團(tuán)隊(duì)發(fā)布的第二代大模型,具有高性能、強(qiáng)大的推理能力等特點(diǎn)。本文以該模型作為微調(diào)的基礎(chǔ)模型,同時(shí)采用了目前比較熱門的P-Tuning v2方法。
P-Tuning v2是P-Tuning的優(yōu)化,利用多層提示(即深度提示優(yōu)化),在每一層都加入了Prompts tokens作為輸入,而不是僅僅加在輸入層,因此具有更多可學(xué)習(xí)的參數(shù)以及對(duì)模型的預(yù)測(cè)更直接的影響。在本實(shí)驗(yàn)中,學(xué)習(xí)率為1E-4 ,每訓(xùn)練1 000步保存一次模型,梯度累積次數(shù)和GPU設(shè)備上批次大小都為1,詞表大小為1 560,設(shè)定模型接收的最大輸入長(zhǎng)度為1 024,采用單卡進(jìn)行訓(xùn)練。
在微調(diào)訓(xùn)練后,本文將訓(xùn)練后的模型保存至相應(yīng)文件夾中,ChatGLM2-6B官方源碼中提供了模型測(cè)試的可視化界面。因此本文將代碼中模型路徑更改為訓(xùn)練后的模型,在測(cè)試界面對(duì)微調(diào)訓(xùn)練的智能合約生成大模型進(jìn)行測(cè)試。使用者在界面中輸入自己的需求信息,大模型根據(jù)接收內(nèi)容返回相應(yīng)的智能合約代碼內(nèi)容。
3 實(shí)驗(yàn)與結(jié)果分析
3.1 實(shí)驗(yàn)環(huán)境及數(shù)據(jù)集
本文實(shí)驗(yàn)是在算力服務(wù)器上完成的,顯卡為單卡A100,程序編寫和運(yùn)行環(huán)境為Python 3.10、PyTorch 2.0以及CUDA 11.6。本文采用的數(shù)據(jù)集由自編爬蟲程序獲取,選取以太坊平臺(tái)(Ethereum)并爬取10 437個(gè)智能合約源程序,智能合約文檔的大小在1 KB~211 KB。本文將數(shù)據(jù)集進(jìn)行初步的預(yù)處理,去除一些JSON、ABI等格式的智能合約,保留大小集中在50 KB~80 KB的1 737個(gè)智能合約文檔作為本文實(shí)驗(yàn)的數(shù)據(jù)集。最后對(duì)數(shù)據(jù)集中智能合約源代碼進(jìn)行“function”“contract”“interface”和“l(fā)ibrary”層次劃分以及注釋和對(duì)應(yīng)代碼體劃分,并定義了聚類分析中所需要的停用詞文檔,同時(shí)設(shè)計(jì)了15個(gè)提示指令的模板。
本文首要步驟是獲取聚類的智能合約數(shù)據(jù)集,以太坊是目前應(yīng)用最廣泛的區(qū)塊鏈交互平臺(tái),其平臺(tái)公布了眾多獲得開源許可的智能合約源代碼,本文通過(guò)編寫智能合約源代碼爬蟲程序獲取該平臺(tái)最近一年的智能合約作為實(shí)驗(yàn)數(shù)據(jù)集。具體操作流程如下:從以太坊平臺(tái)下載智能合約地址文件,借助自動(dòng)化程序打開以太坊瀏覽器,讀取文件中地址構(gòu)建智能合約源代碼頁(yè)面,從第一頁(yè)開始,循環(huán)更新內(nèi)容,按照上述方法依次獲取每頁(yè)智能合約源代碼存儲(chǔ)至本地文件中,直至智能合約地址文件讀取完畢。
3.2 結(jié)果及分析
在完成聚類實(shí)驗(yàn)后,本文獲取了618個(gè)智能合約代碼簇,每一個(gè)代碼簇包含較多相似的智能合約代碼,因此本文對(duì)簇中數(shù)據(jù)進(jìn)行上述的相似度計(jì)算,選取一個(gè)代碼以及對(duì)應(yīng)的注釋內(nèi)容和指令模板隨機(jī)構(gòu)成一條數(shù)據(jù),數(shù)據(jù)量為782條。
為確保生成代碼的有效性,在微調(diào)后的大模型中,通過(guò)指令生成50條各層次智能合約代碼,本文采用BLEU指標(biāo)對(duì)其進(jìn)行評(píng)估。BLEU指標(biāo)[28]是一種廣泛應(yīng)用于機(jī)器翻譯任務(wù)的評(píng)測(cè)機(jī)制,在這里通過(guò)生成代碼文本和參考文本之間共同出現(xiàn)n元詞的次數(shù)(n-gram)衡量生成代碼的質(zhì)量。n元詞中n取值為1~4,BLEU分?jǐn)?shù)取值為0~1,如果兩個(gè)句子完美匹配,那么BLEU為1.0,反之,如果兩個(gè)句子完全不匹配, 那么BLEU為0.0。其中,BLEU機(jī)制評(píng)分如式(5)所示。
對(duì)于生成的代碼文本,為避免符號(hào)對(duì)評(píng)測(cè)分?jǐn)?shù)的影響,本文將“+”“-”等非詞語(yǔ)統(tǒng)一替換為空格,同時(shí)根據(jù)Solidity語(yǔ)言特性將代碼文本通過(guò)空格進(jìn)行分詞并得到BLEU分?jǐn)?shù)。式(6)為提高率計(jì)算公式,P(x,y)為x相對(duì)于y的提高率。
本文針對(duì)各層次中生成的代碼分別采用BLEU機(jī)制測(cè)評(píng),實(shí)驗(yàn)后BLEU得分如表1所示,同時(shí)與文獻(xiàn)[14]進(jìn)行了對(duì)比,采用式(6)計(jì)算提高率,x為本文實(shí)驗(yàn)中合約層(contract)對(duì)應(yīng)BLEU1~4得分,y為文獻(xiàn)[14]中BLEU1~4得分。從實(shí)驗(yàn)結(jié)果可以看出,本文方法生成的代碼評(píng)分更高,本實(shí)驗(yàn)得分相對(duì)于文獻(xiàn)[14],BLEU1~4得分分別提高了6%、3%、9%、7%。
另外,為驗(yàn)證生成的智能合約的安全性和正確性,本文分別使用VaaS和Mythril安全檢測(cè)工具,對(duì)生成的智能合約的正確率進(jìn)行檢測(cè)。在本實(shí)驗(yàn)中,將代碼不完整、代碼編譯錯(cuò)誤以及檢測(cè)不合格統(tǒng)一視為不正確的智能合約,實(shí)驗(yàn)結(jié)果如表2所示。其中,第一列表示檢測(cè)的自動(dòng)生成代碼類型,該實(shí)驗(yàn)主要對(duì)比了六種類型:本文方法自動(dòng)生成的函數(shù)層(function)代碼、合約層(contract)代碼、接口層(interface)代碼以及庫(kù)層(library)代碼、無(wú)注釋微調(diào)模型生成的合約層代碼、文獻(xiàn)[14]生成的合約層代碼;第二、三列分別表示VaaS和Mythril這兩類智能合約安全檢測(cè)工具測(cè)得的正確率。
由該實(shí)驗(yàn)結(jié)果可以看出,在正確率上,合約層因?yàn)楣δ茏钊?,涉及的元素最多,所以其正確率相對(duì)較低,但也達(dá)到了72%左右。而無(wú)注釋微調(diào)的模型,其生成合約代碼的平均正確率僅為65.3%。由于文獻(xiàn)[14]僅利用Vaas檢測(cè)了其生成代碼的安全性,所以本文僅比較了Vaas工具的檢測(cè)結(jié)果。根據(jù)結(jié)果可以看出,文獻(xiàn)[14]生成的智能合約的正確率為68.27%,根據(jù)式(6)計(jì)算可得,本文方法相對(duì)于文獻(xiàn)[14],正確率提升了(72.3%-68.27%)/68.27%=6%。
此外,本文模型同目前比較主流的代碼生成模型進(jìn)行了對(duì)比實(shí)驗(yàn)。本文選取ChatGPT 3.5、Code LLaMA以及ChatGLM2-6B作為評(píng)測(cè)衡量的模型,通過(guò)同樣的口令在各個(gè)模型中生成ERC20智能合約代碼,如表3所示,并將生成代碼分別與源代碼進(jìn)行BLEU評(píng)分計(jì)算和對(duì)比。
從表3得分來(lái)看,各類大模型的低分說(shuō)明在智能合約生成方面能力很差,無(wú)法生成復(fù)雜化的代碼。本文相比其他模型具有明顯的提升,評(píng)分貼近ChatGPT,生成代碼與源代碼接近度更高,效果更好。其次,本文生成的代碼提供了相關(guān)的接口代碼、庫(kù)合約代碼。整體來(lái)看,大多數(shù)通用類模型目前僅局限于單個(gè)合約代碼,結(jié)構(gòu)較為簡(jiǎn)單,不能滿足當(dāng)前智能合約領(lǐng)域的多元化。另一方面,本文所生成代碼提供了眾多的注釋信息,這也是本文重點(diǎn)之一,注釋信息能夠幫助開發(fā)者快速高效地理解代碼,提高開發(fā)效率。
4 結(jié)束語(yǔ)
本文提出一種基于代碼注釋調(diào)優(yōu)的智能合約自動(dòng)生成方法,該方法通過(guò)爬取以太坊上智能合約源代碼作為數(shù)據(jù)集并進(jìn)行層次化劃分和代碼注釋劃分。在聚類分析中,從注釋和代碼體兩個(gè)角度出發(fā),有效地提取出各層次代碼中高相似度的代碼。同時(shí),采用ChatGLM2-6B為基座模型,利用聚類后智能合約源代碼和注釋構(gòu)建提示指令數(shù)據(jù)集,采用P-Tuning v2方式訓(xùn)練智能合約自動(dòng)生成模型,生成各類應(yīng)用場(chǎng)景下的智能合約代碼。在智能合約的安全方面,本文采用BLEU評(píng)分機(jī)制和智能合約檢測(cè)工具檢測(cè)生成代碼的質(zhì)量和安全問(wèn)題,最后設(shè)計(jì)了便捷快速的可視化界面供開發(fā)者使用。實(shí)驗(yàn)結(jié)果表明,本文方法生成的智能合約代碼質(zhì)量和安全指標(biāo)較好,相比于已有方法具有明顯的提高。
本文方法可有效應(yīng)用于智能合約的自動(dòng)生成,對(duì)于智能合約開發(fā)的效率性、安全性問(wèn)題具有一定的研究意義,但也存在一定的不足。首先本文沒(méi)有針對(duì)特定領(lǐng)域智能合約開展研究,目前僅局限于各領(lǐng)域中常用的合約代碼,缺少對(duì)各個(gè)特定領(lǐng)域代碼的研究。其次,本文所采用的ChatGLM2-6B模型雖有明顯的提高,但后續(xù)可以考慮使用更多的大模型作為基座模型開展研究。最后,在數(shù)據(jù)方面,后續(xù)可以加大數(shù)據(jù)量規(guī)模以及考慮其他微調(diào)方法,并結(jié)合如何構(gòu)建更高效的指令數(shù)據(jù)開展工作。
參考文獻(xiàn):
[1]Tolmach P,Li Yi,Lin Shangwei,et al. A survey of smart contract formal specification and verification [J]. ACM Computing Surveys (CSUR),2021,54(7): 1-38.
[2]Iqbal T,Qureshi S. The survey: text generation models in deep lear-ning [J]. Journal of King Saud University-Computer and Information Sciences,2022,34(6): 2515-2528.
[3]Bas A,Topal M O,Duman C,et al. A brief history of deep learning based text generation [C]// Proc of International Conference on Computer and Applications. Piscataway,NJ:IEEE Press,2022: 1-4.
[4]Ma Tian,Wang Wanwan,Chen Yu. Attention is all you need: an interpretable transformer-based asset allocation approach [J]. International Review of Financial Analysis,2023,90: 102876.
[5]Sallam M. ChatGPT utility in healthcare education,research,and practice: systematic review on the promising perspectives and valid concerns [J]. Healthcare,2023,11(21):2819.
[6]潘興祿,劉陳曉,王敏,等. 基于概念傳播的軟件項(xiàng)目代碼注釋生成方法 [J]. 軟件學(xué)報(bào),2023,34(9): 4114-4131. (Pan Xinglu,Liu Chenxiao,Wang Min,et al. Code comment generation based on concept propagation for software projects [J]. Journal of Software,2023,34(9): 4114-4131.)
[7]Geng Mingyang,Wang Shangwen,Dong Dezun,et al. Fine-grained code-comment semantic interaction analysis [C]// Proc of the 30th International Conference on Program Comprehension. Piscataway,NJ:IEEE Press,2022: 585-596.
[8]Xin W,Zhou Kun,Li Junyi,et al. A survey of large language models [EB/OL]. (2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2303.18223.
[9]Zeng Aohan,Wang Zihan,Du Zhengxiao,et al. GLM-130B: an open bilingual pre-trained model [EB/OL]. (2022)[2023-11-04]. https://doi.org/10.48550/arXiv.2210.02414.
[10]Touvron H,Lavril T,Izacard G,et al. LLaMA: open and efficient foundation language models [EB/OL]. (2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2302.13971.
[11]Hu E J,Shen Yelong,Wallis P,et al. LoRA: low-rank adaptation of large language models [EB/OL]. (2021) [2023-11-04]. https://doi.org/10.48550/arXiv.2106.09685.
[12]Li X L,Liang P. Prefix-tuning: optimizing continuous prompts for generation [EB/OL]. (2021) [2023-11-04]. https://doi.org/10.48550/arXiv.2101.00190.
[13]Liu Xiao,Ji Kaixuan,F(xiàn)u Yicheng,et al. P-Tuning: Prompt tuning can be comparable to fine-tuning across scales and tasks [EB/OL]. (2022)[2023-11-04]. https://aclanthology.org/2022.acl-short.8.
[14]Liu Xiao,Ji Kaixuan,F(xiàn)u Yicheng,et al. P-Tuning v2: Prompt tuning can be comparable to fine-tuning universally across scales and tasks [EB/OL]. (2021)[2023-11-04]. https://doi.org/10.48550/arXiv.2110.07602.
[15]Cui Jiaxi,Li Zongjian,Yan Yang,et al. ChatLaw: open-source legal large language model with integrated external knowledge bases [EB/OL]. (2023)[2023-11-04]. https://doi.org/10.48550/arXiv.2306.16092.
[16]Wang Haochun,Liu Chi,Xi Nuwa,et al. HuaTuo: tuning LLaMA model with Chinese medical knowledge [EB/OL]. (2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2304.06975.
[17]錢鵬,劉振廣,何欽銘,等. 智能合約安全漏洞檢測(cè)技術(shù)研究綜述[J]. 軟件學(xué)報(bào),2022,33(8): 3059-3085. (Qian Peng,Liu Zhenguang,He Qinming,et al. Smart contract vulnerability detection technique: a survey [J]. Journal of Software,2022,33(8): 3059-3085.)
[18]高一琛,趙斌,張召. 面向以太坊的智能合約自動(dòng)生成方法研究與實(shí)現(xiàn) [J]. 華東師范大學(xué)學(xué)報(bào): 自然科學(xué)版,2020,2020(5): 21-32. (Gao Yichen,Zhao Bin,Zhang Zhao. Research and implementation of a smart automatic contract generation method for Ethe-reum [J]. Journal of East China Normal University: Natural Sciences,2020,2020(5): 21-32.)
[19]Rani P,Birrer M,Panichella S,et al. What do developers discuss about code comments? [C]// Proc of the 21st IEEE International Working Conference on Source Code Analysis and Manipulation. Piscataway,NJ:IEEE Press,2021: 153-164.
[20]Mao Dianhui,Wang Fang,Wang Yalei,et al. Visual and user-defined smart contract designing system based on automatic coding [J]. IEEE Access,2019,7: 73131-73143.
[21]Xing Hu,Xin Xia,Lo D,et al. Practitionersexpectations on automated code comment generation [C]// Proc of the 44th International Conference on Software Engineering. Piscataway,NJ:IEEE Press,2022: 1693-1705.
[22]Rani P,Panichella S,Leuenberger M,et al. What do class comments tell us?An investigation of comment evolution and practices in Pharo [J]. Empirical Software Engineering,2021,26(6): 112.
[23]王潮,徐衛(wèi)偉,周明輝. 軟件中代碼注釋質(zhì)量問(wèn)題研究綜述 [J]. 軟件學(xué)報(bào). 2023,35(2): 513-531. (Wang Chao,Xu Weiwei,Zhou Minghui. Survey on quality of software code comments [J]. Journal of Software,2023,35(2): 513-531.)
[24]Zheng Qinkai,Xia Xiao,Zou Xu,et al. CodeGeeX: a pre-trained model for code generation with multilingual evaluations on Human-Eval-X [EB/OL].(2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2303.17568
[25]Roziere B,Gehring J,Gloeckle F,et al. Code LLaMA: open foundation models for code [EB/OL]. (2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2308.12950.
[26]Li R,Allal L B,Zi Yangtian,et al. StarCoder: may the source be with you! [EB/OL]. (2023) [2023-11-04]. https://doi.org/10.48550/arXiv.2305.06161.
[27]郭宏,伊亞聰,閆獻(xiàn)國(guó),等. 基于Jaccard 的協(xié)同過(guò)濾刀具推薦算法 [J]. 太原科技大學(xué)學(xué)報(bào),2023,44(5): 464-468,475. (Guo Hong,Yi Yacong,Yan Xianguo,et al. Collaborative filter tool recommendation algorithm based on Jaccard [J]. Journal of Taiyuan Uni-versity of Science and Technology,2023,44(5): 464-468,475.)
[28]Xia Min,Shao Haidong,Ma Xiandong,et al. A stacked GRU-RNN-based approach for predicting renewable energy and electricity load for smart grid operation [J]. IEEE Trans on Industrial Informatics,2021,17(10): 7050-7059.