必贏官網(wǎng)發(fā)布兩篇關(guān)于“大語(yǔ)言模型與軟件工程任務(wù)”的新綜述。站在大語(yǔ)言模型風(fēng)口上的軟件工程,將飄往何方?
必贏3003no1線路檢測(cè)中心必贏3003no1線路檢測(cè)中心InPlusLab團(tuán)隊(duì)于2023年8月22日和11月17日在arXiv上分別公布了兩篇“大語(yǔ)言模型+軟件工程”的綜述:
https://arxiv.org/abs/2308.11396
https://arxiv.org/abs/2311.10372
當(dāng)前,隨著越來(lái)越多的專為軟件工程任務(wù)設(shè)計(jì)的LLMs得到部署,也有越來(lái)越多研究工作聚焦于將LLMs在軟件工程領(lǐng)域的應(yīng)用和實(shí)例分析。LLM能否更好地解析需求,能否生成高質(zhì)量的代碼、高覆蓋的測(cè)試用例等已成為軟件工程領(lǐng)域的熱門話題。然而,在現(xiàn)有文獻(xiàn)中,不僅對(duì)于LLM在軟件工程領(lǐng)域的應(yīng)用和評(píng)估的調(diào)研工作存在缺失,對(duì)于專為軟件工程任務(wù)設(shè)計(jì)的LLMs的演變、表現(xiàn)和發(fā)展方向也缺少系統(tǒng)性的回顧。必贏3003no1線路檢測(cè)中心InPlusLab團(tuán)隊(duì)公布的這兩篇文章則分別針對(duì)這兩點(diǎn)展開(kāi)了系統(tǒng)性綜述。
第一篇文章全面梳理了軟件工程領(lǐng)域與LLM的結(jié)合點(diǎn),并總結(jié)了當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)情況,為L(zhǎng)LM在軟件工程領(lǐng)域的研究和優(yōu)化提供了基礎(chǔ)性建議。根據(jù)當(dāng)前行業(yè)對(duì)大模型中“大”的定義以及LLM的時(shí)效性,文章分別從ACM Digital Library,IEEE Xplore Digital Library和arXiv等六個(gè)主要文獻(xiàn)數(shù)據(jù)庫(kù)中收集并篩選出了2022年以來(lái)的123篇相關(guān)文獻(xiàn)。主要針對(duì)下面兩個(gè)問(wèn)題展開(kāi):
1. RQ1: 當(dāng)前LLM與軟件工程有哪些結(jié)合性工作?它們關(guān)注于軟件工程中的哪些任務(wù)?
2. RQ2: 當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)如何?以及對(duì)未來(lái)工作的一些討論。
RQ1: 對(duì)當(dāng)前文獻(xiàn)中LLM
與軟件工程研究點(diǎn)的回顧
文章將篩選出的123篇論文根據(jù)涉及的軟件工程任務(wù)的具體內(nèi)容進(jìn)行了分類,主要包括七個(gè)類別:代碼生成(Code Generation)、代碼摘要(Code Summarization)、代碼翻譯(Code Translation)、漏洞檢測(cè)(Vulnerability Detection)、代碼評(píng)估(Code Evaluation)、代碼管理(Code Management)和問(wèn)答交互(Q&A Interaction)。并展示了分類后文獻(xiàn)的分布情況(如下圖所示),其中面向代碼生成(Code Generation)的研究相對(duì)較多,而面向代碼翻譯(Code translation)的最少,面向其他軟件工程任務(wù)的數(shù)量相對(duì)較為平均。
針對(duì)每個(gè)類別,文章給出了它們的定義并在正文中詳細(xì)闡述了示例和當(dāng)前的研究工作,這可以幫助研究人員在將LLM應(yīng)用于軟件工程任務(wù)時(shí)繼續(xù)發(fā)現(xiàn)和解決潛在問(wèn)題。在代碼生成任務(wù)上,當(dāng)前的研究工作主要分為三個(gè)方向:評(píng)估工作、發(fā)布全新的測(cè)試框架或方法、增強(qiáng)的大語(yǔ)言模型的代碼生成能力。
在問(wèn)答交互任務(wù)上,當(dāng)前工作則主要集中于開(kāi)發(fā)原型系統(tǒng)或交互框架、評(píng)估工作、提示工程以及問(wèn)答交互時(shí)安全性和效率問(wèn)題的改進(jìn)。
雖然在軟件工程領(lǐng)域中,軟件評(píng)估和漏洞挖掘存在一定的交集。但由于它們?cè)贚LM上的應(yīng)用側(cè)重不同,所以文章也進(jìn)行了分別討論。在軟件評(píng)估方面,當(dāng)前工作主要集中于測(cè)試用例生成、提出代碼測(cè)試框架、測(cè)試助手或代碼測(cè)試模型;在漏洞挖掘方面,則主要關(guān)注評(píng)估工作、正確性和效率問(wèn)題的改進(jìn)及應(yīng)用的研究。
當(dāng)前工作在代碼摘要上的研究方向和在代碼生成上的比較接近,主要方向分別是評(píng)估工作、應(yīng)用研究和增強(qiáng)LLM的代碼摘要能力;而在代碼翻譯任務(wù)上工作較少,僅有的三個(gè)工作聚焦于逆向工程與應(yīng)用。
同時(shí),還有一些工作將LLM用于代碼管理,主要分為輔助代碼合并和代碼版本管理。
文章還對(duì)其他一些相關(guān)工作進(jìn)行了展示,如性別取向、數(shù)據(jù)虛擬化等。
RQ2: 對(duì)當(dāng)前LLM在軟件工程任務(wù)上的
性能表現(xiàn)進(jìn)行回顧
盡管LLM在文本生成任務(wù)上有優(yōu)秀的表現(xiàn),但其在代碼生成等軟件工程任務(wù)上的表現(xiàn)還需要進(jìn)一步驗(yàn)證。在這部分,文章對(duì)上述文獻(xiàn)中含有評(píng)估內(nèi)容的論文進(jìn)行了篩選??紤]到不同評(píng)估工作采用的LLM和關(guān)注的軟件工程任務(wù)可能不同,所以文章在篩選時(shí)也對(duì)這些信息進(jìn)行了整理(如下表所示)。文章主要從摘要和結(jié)論中篩選出文章的評(píng)估結(jié)果,并按結(jié)果分為:Finished Well, Poor Proformance和Ambiguity。需要注意的是,藍(lán)色陰影代表雖然文章評(píng)測(cè)的LLM(s)在該任務(wù)上表現(xiàn)不好,但是文獻(xiàn)中依然給出來(lái)積極的態(tài)度;紅色陰影代表評(píng)估結(jié)果不錯(cuò),但仍然存在限制,甚至是不夠好。
文章對(duì)以上結(jié)果進(jìn)行討論,并初步得出結(jié)論:(1)代碼生成作為一個(gè)較難的任務(wù),目前LLMs在這個(gè)任務(wù)上往往并不能達(dá)到“可直接使用”的程度,表現(xiàn)也并不優(yōu)異和統(tǒng)一。但一些文章中雖然評(píng)估的結(jié)論并沒(méi)有對(duì)LLMs作出肯定,還是給出了積極的態(tài)度;(2)在程序修復(fù)、Text-to-SQL這些任務(wù)上,LLM通常能做的很好;(3)在程序漏洞檢測(cè)上,LLMs通常表現(xiàn)得并不好;(4)雖然有兩篇文獻(xiàn)關(guān)于LLMs在測(cè)試用例生成這一任務(wù)上的結(jié)論存在矛盾,但它們也都給出了比較積極的態(tài)度,認(rèn)為L(zhǎng)LMs在這項(xiàng)任務(wù)上具有潛力;(5)在代碼總結(jié)、代碼解釋任務(wù)上,LLMs通常具有很好的表現(xiàn),但在魯棒性上有所欠缺;(6)比較新的LLMs在代碼生成這項(xiàng)任務(wù)上的表現(xiàn)進(jìn)步很大。
文章得到一個(gè)最基本的結(jié)論:LLMs在一些需要理解代碼語(yǔ)法的軟件工程任務(wù)上,如代碼摘要、代碼修復(fù),獲得了很好的表現(xiàn);但在一些需要理解代碼語(yǔ)義的軟件工程任務(wù)上,如代碼生成、漏洞檢測(cè),通常表現(xiàn)的不夠好;LLMs隨著版本/模型的迭代依然在不斷進(jìn)步,是具有潛力的。所以,文章認(rèn)為在當(dāng)前階段,LLMs依然不能代替人工進(jìn)行軟件工程任務(wù),但是它能成為一個(gè)很好的程序開(kāi)發(fā)者助理、搜索器和提示工具。
第二篇文章對(duì)代碼LLM(Code LLMs) 的發(fā)展歷程和性能表現(xiàn)進(jìn)行了全面調(diào)查和分析,包括Code LLMs與通用LLMs之間的性能,以及Code LLMs之間的性能表現(xiàn)。文章的動(dòng)機(jī)為:Code LLMs可以通過(guò)指令微調(diào)的方法產(chǎn)生,也可以通過(guò)傳統(tǒng)的預(yù)訓(xùn)練方法得到。身為專門為軟件工程領(lǐng)域開(kāi)發(fā)的語(yǔ)言模型,理想情況下,LLMs在軟件工程任務(wù)上的能力通常可以得到進(jìn)一步激發(fā),并擁有更強(qiáng)的代碼生成、漏洞挖掘等能力。所以,當(dāng)前也有大量工作聚焦于此,并產(chǎn)生許多具有里程碑意義的Code LLMs,如Codex、StarCoder、Code Llama等。但是,由于指令微調(diào)、訓(xùn)練數(shù)據(jù)等各方面帶來(lái)的不確定因素,以及當(dāng)前最先進(jìn)的通用LLMs,如GPT-4,在各個(gè)軟件工程領(lǐng)域取得了矚目的效果。我們很難確定當(dāng)前最先進(jìn)的Code LLMs在軟件工程任務(wù)上能否比當(dāng)前最先進(jìn)的通用LLMs獲得更好的表現(xiàn)。同時(shí),Code LLMs的數(shù)量繁多,它們很大一部分都是通過(guò)在通用LLMs或其他Code LLMs上微調(diào)得到。由于它們可能擁有不同的結(jié)構(gòu)和微調(diào)技術(shù),所以很可能不同Code LLMs擅長(zhǎng)的軟件工程任務(wù)并不相同。然而,目前卻缺少對(duì)Code LLMs及其性能的系統(tǒng)性調(diào)查,尤其是Code LLMs與通用LLMs、以及Code LLMs之間的性能調(diào)查。
為此,文章從GitHub, dblp, Google Scholar和 arXiv四個(gè)主要的發(fā)布新模型的數(shù)據(jù)庫(kù)中篩出了134篇有效的相關(guān)文獻(xiàn)。文章主要針對(duì)下面三個(gè)問(wèn)題展開(kāi):
1. RQ1: 當(dāng)前有哪些專為軟件工程任務(wù)設(shè)計(jì)的LLMs?它們是如何演變的?
2. RQ2: 這些Code LLMs在軟件工程任務(wù)上的性能表現(xiàn)比通用LLMs更好嗎?
3. RQ3: 在不同軟件工程任務(wù)上,不同Code LLMs的表現(xiàn)如何?
RQ1: 當(dāng)前有哪些專為軟件工程任務(wù)
設(shè)計(jì)的LLMs?它們是如何演變的?
文章將收集到的專為軟件工程任務(wù)設(shè)計(jì)的LLMs(Code LLMs)進(jìn)行整理并展示了它們之間的關(guān)系。下圖根據(jù)發(fā)布單位統(tǒng)計(jì)了Code LLMs的數(shù)量。我們可以看到,企業(yè)主導(dǎo)的Code LLMs有18個(gè),其中微軟發(fā)布最多,占8個(gè);高校共發(fā)布18個(gè)Code LLMs;相對(duì)來(lái)說(shuō),研究團(tuán)隊(duì)和社區(qū)發(fā)布的Code LLMs最多,有21個(gè)。
文章也按照發(fā)布的時(shí)間對(duì)Code LLMs進(jìn)行了展示(如下圖所示)。其中紅色表示未開(kāi)源,藍(lán)色表示開(kāi)源。我們可以看到隨著年份的增加,越來(lái)越多的企業(yè)、高校和科研團(tuán)隊(duì)參與到Code LLMs的開(kāi)發(fā)中。
文章還梳理了這些Code LLMs之間的關(guān)系(如下圖所示)。其中箭頭表示被指向者由指向者發(fā)展得到,這種發(fā)展包括且不限于:改良、微調(diào)、借用技術(shù)。
RQ2: 這些Code LLMs在軟件工程任務(wù)上
的性能表現(xiàn)比通用LLMs更好嗎?
文章從收集的論文中篩選出對(duì)Code LLMs進(jìn)行評(píng)測(cè)、發(fā)布全新評(píng)測(cè)基準(zhǔn)以及全新Code LLMs的文章。并從全部文獻(xiàn)中篩查出實(shí)驗(yàn)部分存在Code LLMs與通用 LLMs對(duì)比工作的內(nèi)容,最終得到如下圖的結(jié)果:
在上表的38篇文獻(xiàn)中,共有11篇工作中的實(shí)驗(yàn)顯示通用LLMs在軟件工程任務(wù)上的表現(xiàn)更好,而有20篇工作的實(shí)驗(yàn)部分,顯示Code LLMs表現(xiàn)更優(yōu)秀。還有7篇文章,我們無(wú)法從其中的實(shí)驗(yàn)部分或文章結(jié)論中得到關(guān)于Code LLMs與通用LLMs誰(shuí)更好的明確結(jié)論。
根據(jù)上述文獻(xiàn)的結(jié)果,我們可以得到如下結(jié)論:(1)模型的參數(shù)對(duì)模型的性能影響非常大,同一模型的較大規(guī)模往往具有更好的表現(xiàn);(2)對(duì)于同一模型,面向軟件工程任務(wù)進(jìn)行指令微調(diào)后的新模型比基座模型具有更好的表現(xiàn);(3)在參數(shù)量接近時(shí),Code LLMs往往比通用LLMs表現(xiàn)更好;(4)當(dāng)前最先進(jìn)的Code LLM比當(dāng)前最先進(jìn)的通用LLMs(GPT-4)在代碼生成任務(wù)上表現(xiàn)更好。
文章還分享了一些有趣的結(jié)果:(1)同一模型的參數(shù)規(guī)模對(duì)模型的能力存在重要的影響,但在影響程度上,不同LLMs的表現(xiàn)可能存在差異,模型參數(shù)量對(duì)于模型性能是否存在邊際效應(yīng),以及不同模型對(duì)于參數(shù)量的敏感程度,或許是一個(gè)值得討論的問(wèn)題。(2)所有的編碼器-解碼器模型的HumanEval結(jié)果都比僅解碼器模型差的多??赡苁且?yàn)椋壕幋a器-解碼器與HumanEval設(shè)置不太一致,但是僅編碼器模型卻與競(jìng)賽編程設(shè)置非常一致。所以,文章認(rèn)為我們可能還需要更加多樣化的測(cè)試基準(zhǔn)來(lái)量化Code LLMs的真實(shí)能力,單一的benchmark可能并不能完整體現(xiàn)LLMs的性能。(3)LLM的能力不完全由其規(guī)模決定,數(shù)據(jù)質(zhì)量可能發(fā)揮著非常重要的作用。所以phi-1.5-1.3B才有可能戰(zhàn)勝參數(shù)規(guī)模五倍于它的LLMs。
當(dāng)然,我們也發(fā)現(xiàn),當(dāng)前在實(shí)際的應(yīng)用中評(píng)估Code LLMs和通用LLMs的性能表現(xiàn)比較困難。一個(gè)最主要的原因是當(dāng)前最先進(jìn)的通用LLMs——GPT-4和GPT-3.5-tubro未開(kāi)源,所以很多測(cè)試都沒(méi)有將這兩個(gè)LLMs進(jìn)行對(duì)比。并且,由于每個(gè)工作的發(fā)表時(shí)間不同,每個(gè)工作所能采用的Code LLMs與通用LLMs也幾乎不相同,這便導(dǎo)致各個(gè)工作的評(píng)測(cè)結(jié)果存在差異。
RQ3: 在不同軟件工程任務(wù)上,
不同Code LLMs的表現(xiàn)如何?
文章首先從收集的論文中整理出具有對(duì)LLMs在軟件工程任務(wù)上評(píng)測(cè)的部分,并將這些工作面向不同的軟件工程任務(wù)進(jìn)行分類,再按評(píng)測(cè)的benchmark進(jìn)行分類,文章希望可以為每一個(gè)benchmark整理出一個(gè)相對(duì)較為完整的名單。
文章在這一部分不僅整理了包含HumanEval、MBPP等主流Benchmark的較為完整的名單,還將不同文獻(xiàn)中的大量數(shù)據(jù)進(jìn)行整理和展示。并且文章針對(duì)Code LLMs的表現(xiàn)進(jìn)行了闡述,給出了如下結(jié)論:(1)當(dāng)前針對(duì)LLMs的評(píng)估更關(guān)注代碼生成任務(wù),對(duì)于其他任務(wù)的評(píng)估或關(guān)注度較少。不僅相關(guān)評(píng)估工作存在缺失,在新模型發(fā)布時(shí),也鮮少關(guān)注漏洞修復(fù)等任務(wù)。(2)對(duì)于代碼生成任務(wù)存在HumanEval等廣受關(guān)注的benchmark,而其他任務(wù)上缺少這樣的benchmark;在代碼生成任務(wù)上,Code-LLaMA系列的LLMs表現(xiàn)得最好,其中Unnatural-Code-LLaMA-34B的表現(xiàn)最突出;在API相關(guān)的代碼生成任務(wù)上,ToolCoder表現(xiàn)更好,而GPT-4、GPT-3.5(GPT-3.5-turbo)也具有很好的性能表現(xiàn)。(3)在測(cè)試用例生成任務(wù)上,GPT-4和GPT-3.5(GPT-3.5-turbo)具有更好的性能表現(xiàn)。(4)在代碼摘要任務(wù)上,CodeT5+具有更好的性能表現(xiàn),好于GPT-3.5(GPT-3.5-turbo)。(5)在代碼翻譯任務(wù)上,GPT-4的表現(xiàn)更好。(6)在漏洞修復(fù)任務(wù)上,根據(jù)僅有的一些結(jié)果,Codex的性能更好。
必贏3003no1線路檢測(cè)中心必贏3003no1線路檢測(cè)中心發(fā)布的這兩篇論文圍繞“大語(yǔ)言模型+軟件工程”主題,不僅全面梳理了軟件工程領(lǐng)域與LLM的結(jié)合點(diǎn)、總結(jié)了當(dāng)前LLM在軟件工程任務(wù)上的表現(xiàn)情況,也對(duì)代碼 LLM(Code LLMs)的發(fā)展歷程和性能表現(xiàn)進(jìn)行了全面調(diào)查和分析。兩篇文章對(duì)范圍內(nèi)歷史工作進(jìn)行系統(tǒng)回顧的同時(shí),也對(duì)該主題的發(fā)展方向進(jìn)行了討論,比如Code LLMs的性能改進(jìn)方向等,值得關(guān)注!