CN120225991A 使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查評(píng)論(微軟技術(shù)許可有限責(zé)任公司)_第1頁(yè)
CN120225991A 使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查評(píng)論(微軟技術(shù)許可有限責(zé)任公司)_第2頁(yè)
CN120225991A 使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查評(píng)論(微軟技術(shù)許可有限責(zé)任公司)_第3頁(yè)
CN120225991A 使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查評(píng)論(微軟技術(shù)許可有限責(zé)任公司)_第4頁(yè)
CN120225991A 使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查評(píng)論(微軟技術(shù)許可有限責(zé)任公司)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

(19)國(guó)家知識(shí)產(chǎn)權(quán)局PCT/US2023/0368272023WO2024/123442EN2024.06.13專利代理師丁君軍吳巖琨地址美國(guó)華盛頓州A·斯維亞特科夫斯基使用機(jī)器學(xué)習(xí)根據(jù)歷史數(shù)據(jù)生成代碼審查代碼蓋異塊碼開(kāi)碼重查EF1-Bcia塊具有塊交叉注意力的取回增強(qiáng)的神經(jīng)變換器模型在給予所提議的表示為代碼差異塊的源代碼改變和歷史代碼審查評(píng)論集合的情況下預(yù)代碼審查評(píng)論與語(yǔ)義上類似于所提議的源代碼改變的代碼編輯相關(guān)聯(lián)。代碼差異塊被劃分為2存儲(chǔ)器,存儲(chǔ)一個(gè)或多個(gè)程序,所述一個(gè)或多個(gè)程序被配置為以代碼差異格式獲取對(duì)源代碼程序的所提議的源代碼改變,其中所述代碼差異格式包訪問(wèn)代碼審查評(píng)論的數(shù)據(jù)庫(kù),其中所述數(shù)據(jù)庫(kù)的每個(gè)代碼審查評(píng)論與代碼編輯相關(guān)從所述代碼審查評(píng)論的數(shù)據(jù)庫(kù)取回針對(duì)對(duì)所述源代碼程序的所述所提議的源代碼改從深度學(xué)習(xí)模型生成針對(duì)所述所提議的源代碼改變的2.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指生成與所述數(shù)據(jù)庫(kù)的代碼審查評(píng)論相關(guān)聯(lián)的、針對(duì)每個(gè)3.根據(jù)權(quán)利要求2所述的系統(tǒng),其中所述一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指通過(guò)將與所取回的所述代碼審查評(píng)論相關(guān)聯(lián)的所述代碼編輯的所述編碼與所述所提議的源代碼改變的所述編碼進(jìn)行比較來(lái)確定所取回的所述代碼審查評(píng)論與類似于所述所4.根據(jù)權(quán)利要求3所述的系統(tǒng),其中與所取回的所述代碼審查評(píng)論相關(guān)聯(lián)的所述代碼5.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指基于與類似于相應(yīng)塊的所述代碼編輯的代碼編輯相關(guān)聯(lián)的每個(gè)所取回的代碼審查評(píng)其中針對(duì)每個(gè)塊的代碼審查評(píng)論的所述取回基于所述塊編碼和與每個(gè)代碼審查評(píng)論7.根據(jù)權(quán)利要求6所述的系統(tǒng),其中每個(gè)塊編碼和與每個(gè)代碼審查評(píng)論相關(guān)聯(lián)的每個(gè)8.根據(jù)權(quán)利要求1所述的系統(tǒng),其中所述深度學(xué)習(xí)模型包括具有自注意力和交叉注意3獲取表示對(duì)源代碼程序進(jìn)行代碼編輯的代碼差異塊;訪問(wèn)多個(gè)代碼審查評(píng)論,每個(gè)代碼審查評(píng)論與相關(guān)聯(lián)的代碼編輯的編碼相關(guān)聯(lián);將所述代碼差異塊劃分為多個(gè)塊;對(duì)所述多個(gè)塊中的每個(gè)塊進(jìn)行編碼;針對(duì)每個(gè)塊,從所述多個(gè)代碼審查評(píng)論取回一個(gè)或多個(gè)代碼審查評(píng)論,其中所取回的代碼審查評(píng)論與類似于相應(yīng)塊編碼的編碼相關(guān)聯(lián);以及從深度學(xué)習(xí)模型生成針對(duì)所述代碼差異塊的所預(yù)測(cè)的代碼審查,其中所述深度學(xué)習(xí)模型被給予所述多個(gè)塊中的每個(gè)塊的一個(gè)或多個(gè)所取回的所述代碼審查評(píng)論和所述代碼差異塊。10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:訪問(wèn)神經(jīng)編碼器,以生成每個(gè)塊編碼以及與所述多個(gè)代碼審查評(píng)論中的每個(gè)代碼審查評(píng)論相關(guān)聯(lián)的所述編碼。11.根據(jù)權(quán)利要求10所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述神經(jīng)編碼器是具有注意力的神經(jīng)編碼器變換器模型。12.根據(jù)權(quán)利要求10所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:基于距離得分來(lái)確定一個(gè)或多個(gè)所取回的所述代碼審查評(píng)論與每個(gè)塊之間的相似性,其中所述距離得分基于塊編碼和與所取回的代碼審查評(píng)論相關(guān)聯(lián)的編碼之間的差異。13.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:基于相應(yīng)距離得分來(lái)排序針對(duì)所述代碼差異塊的每個(gè)塊的所取回的所述代碼審查評(píng)從經(jīng)排序的所取回的所述代碼審查評(píng)論中選擇,基于所述距離得分來(lái)選擇經(jīng)排序的所取回的所述代碼審查評(píng)論中的一個(gè)經(jīng)排序的所取回的代碼審查評(píng)論。14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:聚集所述選擇所取回的所述代碼審查評(píng)論中的一個(gè)所取回的代碼審查評(píng)論;以及將所聚集的所取回的所述代碼審查評(píng)論輸入到所述深度學(xué)習(xí)模型。15.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中所述深度學(xué)習(xí)模型是具有注意力的神經(jīng)變換器模型。4背景技術(shù)[0001]代碼或?qū)Φ葘彶槭窃谲浖_(kāi)發(fā)期間經(jīng)常利用的過(guò)程,其中開(kāi)發(fā)中的源代碼由源代碼作者的一個(gè)或多個(gè)對(duì)等來(lái)審查。源代碼被經(jīng)常檢查以發(fā)現(xiàn)錯(cuò)誤,以確保源代碼符合最佳實(shí)踐標(biāo)準(zhǔn)并且發(fā)現(xiàn)缺陷,諸如競(jìng)爭(zhēng)條件、惡意軟件、存儲(chǔ)器泄漏、緩沖器溢出、格式串利用等。代碼審查被使用于發(fā)現(xiàn)在軟件發(fā)布之前源代碼開(kāi)發(fā)中可能已經(jīng)被忽視的這些問(wèn)題。[0002]代碼審查經(jīng)常是手動(dòng)執(zhí)行的,要求對(duì)等花費(fèi)大量時(shí)間來(lái)理解源代碼程序并且審查源代碼。代碼審查要求對(duì)等理解源代碼程序的邏輯、功能、類型和其它因素。當(dāng)手動(dòng)執(zhí)行代碼審查過(guò)程時(shí),其受到人為錯(cuò)誤的影響。對(duì)等審查方可能錯(cuò)過(guò)源代碼中非常明顯的錯(cuò)誤或浪費(fèi)時(shí)間來(lái)審查和評(píng)論未出錯(cuò)的源代碼。發(fā)明內(nèi)容[0003]提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在下文的具體實(shí)施方式中進(jìn)一步所描述的一些概念。本發(fā)明內(nèi)容不旨在于標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在于被使用于限制所要求保護(hù)的主題的范圍。[0004]訓(xùn)練具有塊交叉注意力模型的取回增強(qiáng)的神經(jīng)變換器模型以在給予所提議的源代碼改變的情況下自動(dòng)生成代碼審查評(píng)論并且聚集在語(yǔ)義上類似于所提議的源代碼改變的所取回的代碼審查評(píng)論。所提議的源代碼改變以代碼差異格式表示,該代碼差異格式示出了被提議給源代碼程序或片段的先前版本的代碼編輯。從存儲(chǔ)在非參數(shù)存儲(chǔ)器中的預(yù)先配置的歷史代碼審查評(píng)論的數(shù)據(jù)庫(kù)中取回所聚集的所取回的代碼審查評(píng)論。所取回的代碼審查評(píng)論與類似于所提議的源代碼的代碼編輯的代碼編輯相關(guān)聯(lián)。相似性基于所提議的源代碼改變的代碼編輯的編碼與關(guān)聯(lián)于歷史代碼審查評(píng)論的代碼編輯的編碼接近地匹配。[0005]通過(guò)閱讀下文的具體實(shí)施方式和相關(guān)聯(lián)附圖的審查,這些和其它特征和優(yōu)點(diǎn)將是清楚的。應(yīng)當(dāng)理解的是,前述的一般實(shí)施方式和下文的具體實(shí)施方式僅是說(shuō)明性的,而不是限制所要求保護(hù)的方面。附圖說(shuō)明[0006]圖1是圖示了用于在歷史代碼審查評(píng)論和代碼差異塊上生成神經(jīng)編碼器的示例性系統(tǒng)的示意圖。[0007]圖2是圖示了用于生成代碼審查取回?cái)?shù)據(jù)庫(kù)的示例性系統(tǒng)的示意圖。[0008]圖3是圖示了用于自動(dòng)生成針對(duì)所給予的代碼差異塊和一個(gè)或多個(gè)所取回的代碼審查評(píng)論的代碼審查評(píng)論的示例性系統(tǒng)的示意圖。[0009]圖4是圖示了使用于自動(dòng)生成代碼審查評(píng)論的具有塊交叉注意力的神經(jīng)變換器模型的示例性架構(gòu)的示意圖。[0010]圖5是圖示了生成包括訓(xùn)練神經(jīng)編碼器、生成代碼審查取回?cái)?shù)據(jù)庫(kù)、以及訓(xùn)練具有注意力的神經(jīng)變換器模型的代碼審查生成引擎的組件的示例性方法的流程圖。[0011]圖6是圖示了在推理期間代碼審查生成引擎的示例性方法的流程圖。5[0012]圖7是圖示了在版本控制源代碼儲(chǔ)存庫(kù)中使用代碼審查生成系統(tǒng)的示意圖。[0013]圖8是圖示了示例性操作環(huán)境的框圖。具體實(shí)施方式[0015]本公開(kāi)的方面從屬于使用具有塊交叉注意力的取回增強(qiáng)的神經(jīng)變換器模型的自動(dòng)化代碼審查評(píng)論。給予表示為代碼差異塊的所提議的源代碼改變以及一個(gè)或多個(gè)所取回的代碼審查評(píng)論,該模型預(yù)測(cè)代碼審查評(píng)論。代碼差異塊表示對(duì)其周圍的上下文未被改變的源代碼片斷的所提議的編輯。從歷史代碼審查評(píng)論的數(shù)據(jù)庫(kù)獲取所取回的代碼審查評(píng)論。每個(gè)歷史代碼審查評(píng)論與特定的代碼編輯集合相關(guān)。基于所取回的代碼審查評(píng)論的代碼編輯與代碼差異塊的代碼編輯的語(yǔ)義相似性來(lái)從數(shù)據(jù)庫(kù)選擇所取回的代碼審查評(píng)論。[0016]使用所取回的代碼審查評(píng)論作為具有注意力模型的取回增強(qiáng)的神經(jīng)變換器的輸入有助于模型預(yù)測(cè)最相關(guān)的代碼審查候選,而不要求昂貴并且大規(guī)模的訓(xùn)練過(guò)程。在大訓(xùn)練數(shù)據(jù)集上的訓(xùn)練增加了由模型做出預(yù)測(cè)來(lái)使用的參數(shù)的數(shù)目,從而增加了模型的大小以及在目標(biāo)系統(tǒng)中訓(xùn)練和部署模型所需要的計(jì)算資源。[0017]代碼審查是經(jīng)常是版本控制源代碼儲(chǔ)存庫(kù)的部分的過(guò)程。版本控制源代碼儲(chǔ)存庫(kù)管理文件系統(tǒng)的文件的改變。每個(gè)開(kāi)發(fā)方在他們自己的分支中獲取儲(chǔ)存庫(kù)中的文件的完整副本。原始代碼通常被存儲(chǔ)在單獨(dú)的計(jì)算設(shè)備中的主分支中。開(kāi)發(fā)方對(duì)其儲(chǔ)存庫(kù)的文件的版本做出改變。在提交中注意對(duì)文件的改變。在將改變合并回到原始文件之前,使用代碼審查過(guò)程來(lái)審查改變。[0018]代碼審查過(guò)程從發(fā)布拉取請(qǐng)求開(kāi)始。拉取請(qǐng)求是將一個(gè)或多個(gè)提交合并到儲(chǔ)存庫(kù)的不同分支(諸如,主分支)中的請(qǐng)求。對(duì)對(duì)等或?qū)彶榉綄彶檫@些變化并且提供評(píng)論或建議的、在本文中也被稱為代碼審查評(píng)論。代碼審查評(píng)論可以包括源代碼、自然語(yǔ)言文本和/或其組合。開(kāi)發(fā)方可以基于由對(duì)等提交的評(píng)論對(duì)代碼進(jìn)行附加改變。然后,批準(zhǔn)拉取請(qǐng)求并且將改變合并到源代碼儲(chǔ)存庫(kù)的主分支中或丟棄。[0019]從具有基于代碼審查評(píng)論的代碼改變的拉取請(qǐng)求生產(chǎn)歷史代碼審查評(píng)論的數(shù)據(jù)庫(kù)。代碼改變被表示為代碼差異塊。每個(gè)代碼差異塊被劃分為塊,其中每個(gè)塊表示代碼差異塊的多個(gè)連續(xù)標(biāo)記。對(duì)每個(gè)塊進(jìn)行編碼并且將其使用作為數(shù)據(jù)庫(kù)中的索引以訪問(wèn)對(duì)應(yīng)歷史代碼審查評(píng)論。針對(duì)代碼差異塊的每個(gè)塊的編碼由在具有和不具有相關(guān)聯(lián)的代碼審查評(píng)論的代碼差異塊的無(wú)監(jiān)督訓(xùn)練數(shù)據(jù)集上所訓(xùn)練的神經(jīng)編碼器來(lái)執(zhí)行。[0020]在推理時(shí),使用需要代碼審查評(píng)論的代碼差異塊的編碼塊來(lái)搜索數(shù)據(jù)庫(kù)。針對(duì)每個(gè)塊,使用與代碼審查評(píng)論相關(guān)聯(lián)的塊的編碼和代碼差異塊的編碼之間的L2距離來(lái)獲取其近似的k個(gè)最接近的代碼審查評(píng)論。所取回的代碼審查評(píng)論按照L2距離的降序排序并且使用前k個(gè)所取回的代碼審查評(píng)論來(lái)將代碼差異塊輸入增強(qiáng)到具有塊交叉注意力的取回增強(qiáng)神經(jīng)變換器模型中。k的值是預(yù)先配置的并且基于它們相應(yīng)的L2距離將所取回的代碼審查評(píng)論的數(shù)目限制為至多k個(gè)代碼審查評(píng)論。[0021]現(xiàn)在將注意力轉(zhuǎn)向更詳細(xì)地描述用于代碼審查評(píng)論自動(dòng)化的組件、方法、過(guò)程和6[0023]圖1圖示了用于生成神經(jīng)編碼器的示例性系統(tǒng)100的框圖,該神經(jīng)編碼器產(chǎn)生針對(duì)代碼差異塊的每個(gè)塊的編碼或嵌入。神經(jīng)編碼器在導(dǎo)出來(lái)自各種代碼審查任務(wù)的大規(guī)模無(wú)監(jiān)督數(shù)據(jù)上進(jìn)行訓(xùn)練,該代碼審查任務(wù)包括具有和不具有代碼審查評(píng)論的改變代碼的編輯。改變代碼是由于代碼審查中的對(duì)等做出評(píng)論或建議而已經(jīng)修改的源代碼。改變的代碼以代碼差異格式利用其周圍的上下文來(lái)表示以示出對(duì)原始代碼或產(chǎn)生改變的代碼的代碼的先前版本做出的編輯。本質(zhì)上,代碼差異塊示出了由于代碼審查評(píng)論及其周圍未改變的上下文而做出的編輯。[0024]系統(tǒng)100包括一個(gè)或多個(gè)源代碼儲(chǔ)存庫(kù)102、數(shù)據(jù)挖掘引擎104、代碼差異塊生成器106、預(yù)訓(xùn)練數(shù)據(jù)集生成器108、預(yù)訓(xùn)練引擎110和神經(jīng)編碼器112。數(shù)據(jù)挖掘引擎104挖掘源代碼儲(chǔ)存庫(kù)102以用于拉取請(qǐng)求、提交、評(píng)論以及具有代碼改變103和/或相關(guān)聯(lián)的代碼審查評(píng)論116的源代碼文件。在一方面,挖掘來(lái)自公開(kāi)可用的開(kāi)放源代碼儲(chǔ)存庫(kù)的代碼改變和代碼審查評(píng)論。代碼改變以代碼差異格式被格式化。[0025]代碼差異格式示出了兩個(gè)文件之間的變化,諸如原始源代碼和原始源代碼的修訂版本,在文件兩者共有的行序列中,散布具有不同行的組。代碼差異塊114是改變的源代碼行的序列,包括由一些未改變的行或上下文所包圍的所刪除的行。因?yàn)槲锤淖兊男袃H出現(xiàn)一次,代碼差異格式是代碼改變的高效表示。代碼差異格式包括每個(gè)行開(kāi)始處的差異字符。該差異字符利用“—”和“+”標(biāo)簽表示變化并且利用空格表表示代碼改變和代碼審查評(píng)論是有益的,因?yàn)槟P湍軌蚋玫亓私獯a編輯和相關(guān)代碼審查評(píng)論之間的關(guān)系。代碼差異塊是用于顯示改變之前的代碼和改變之后的代碼的緊湊和方便的格式,其包括在所給予的粒度(諸如在行級(jí))的編輯步驟。如此,針對(duì)模型學(xué)習(xí)的代碼差異塊是更自然的方式,而不是通過(guò)原始源代碼來(lái)訓(xùn)練模型。[0026]代碼差異塊生成器106接收由數(shù)據(jù)挖掘引擎104找到的拉取請(qǐng)求、提交、評(píng)論和源代碼文件,提取相關(guān)代碼改變103并且將它們格式化為代碼差異塊114.代碼差異塊114是具有代碼變化以及其周圍的上下文的源代碼行序列。周圍的上下文包括在源代碼代碼行改變之前和之后未改變的代碼行。在改變的源代碼的每行的開(kāi)始處,存在標(biāo)識(shí)代碼改變的字符。A"!"表示兩個(gè)文件對(duì)應(yīng)的的行之間的變化,"+"表示添加行并且"-"指示去除行??崭癖硎疚锤淖兊木€。[0027]預(yù)訓(xùn)練數(shù)據(jù)集生成器108通過(guò)對(duì)應(yīng)的特殊標(biāo)記來(lái)替換代碼差異塊114中的差異字[0028]然后,預(yù)訓(xùn)練數(shù)據(jù)集生成器108使用去噪掩蔽目標(biāo)來(lái)隨機(jī)掩蔽代碼差異塊114和每個(gè)代碼審查評(píng)論或?qū)彶樵u(píng)論116中的標(biāo)記。該模型接收代碼差異塊和代碼審查評(píng)論的掩蔽序列并且該模型學(xué)習(xí)通過(guò)預(yù)測(cè)掩蔽標(biāo)記的替換來(lái)重構(gòu)原始文本。[0029]預(yù)訓(xùn)練數(shù)據(jù)集生成器108根據(jù)代碼差異塊和代碼審查評(píng)論生成預(yù)訓(xùn)練數(shù)據(jù)集118。在一個(gè)或多個(gè)方面,預(yù)訓(xùn)練數(shù)據(jù)集118包括以下預(yù)訓(xùn)練數(shù)據(jù)集中的任何一項(xiàng)或多項(xiàng):去噪代碼差異預(yù)訓(xùn)練數(shù)據(jù)集120;去噪審查評(píng)論預(yù)訓(xùn)練數(shù)據(jù)集122;以及差異標(biāo)簽預(yù)測(cè)預(yù)訓(xùn)練數(shù)據(jù)集124。[0030]去噪代碼差異預(yù)訓(xùn)練數(shù)據(jù)集120包含多個(gè)去噪代碼差異預(yù)訓(xùn)練樣本。例如,預(yù)訓(xùn)練7Java.Util.Properties。預(yù)訓(xùn)練生成器108利用特殊字符或標(biāo)記[ADD]、[DEL]、[KEEP]來(lái)替用于代碼,隨機(jī)地掩蔽源代碼的某些行以生成預(yù)訓(xùn)練樣本130。然后,預(yù)訓(xùn)練樣本則變成:[DEL]ImportJava.Sq1.Statement;[ADD][TAGO];[KEEP[TAG1]其中標(biāo)簽[TAGO]and[TAG1]已經(jīng)替換了源代碼的全部行。[0031]去噪審查評(píng)論預(yù)訓(xùn)練數(shù)據(jù)集122包含多個(gè)去噪審查評(píng)論預(yù)訓(xùn)練樣本。例如,預(yù)訓(xùn)練數(shù)據(jù)集生成器108接收代碼審查樣本134,"Ithink"import"isnotallowedinKylin'sstaticcodeanalysis.Canyouaddexactpackagename?(我認(rèn)為Kylin的靜態(tài)代碼分析不允許使用“import”。您能添加確切的包名嗎?)”。去噪目標(biāo)被應(yīng)用于隨機(jī)地掩蔽代碼審查樣本136中的標(biāo)記。將標(biāo)記Import替換為[TAGO]、將標(biāo)記Kylin’s替換為[TAG1]、將標(biāo)記審查預(yù)培訓(xùn)樣本136得到:“Ithink[TAGO]isnotallowedin[TAG1]staticcode[TAG2][0032]差異標(biāo)簽預(yù)測(cè)預(yù)訓(xùn)練數(shù)據(jù)集124包含多個(gè)差異標(biāo)簽預(yù)測(cè)預(yù)訓(xùn)練樣本。預(yù)訓(xùn)練數(shù)據(jù)集生成器108接收代碼差異塊140并且通過(guò)特殊標(biāo)記[ADD]、[DEL]、[KEEP]142來(lái)替換代碼差異塊中的差異字符。然后,預(yù)訓(xùn)練數(shù)據(jù)集生成器108隨機(jī)地掩蔽某些特殊標(biāo)記144。Java.Sq1.Statement;ImportJava.Util.List;andImport練生成器108利用特殊字符[ADD]、[DEL]、[KEEP]來(lái)替換差異字符。這將代碼變換為源代碼用[MASK]標(biāo)記來(lái)替換[DEL]和[ADD]標(biāo)簽,得到以下差異標(biāo)簽預(yù)測(cè)預(yù)訓(xùn)練樣本:[MASK]ImportJava.Sq1.Statement;[MASK]ImportJava.Sq1.Statement;[KEEP]ImportJava.Util.List;[KEEP]ImportJava.Util.Prop[0034]在另一方面,通過(guò)對(duì)比學(xué)習(xí)來(lái)訓(xùn)練神經(jīng)編碼器變換器模型。對(duì)比學(xué)習(xí)是自監(jiān)督學(xué)習(xí)技術(shù),其中模型從對(duì)比樣本中學(xué)習(xí),特別是從共同的屬性和與不同類型的樣本不同的屬性中學(xué)習(xí)。給予對(duì)比預(yù)訓(xùn)練數(shù)據(jù)集D={qi,p',P.1…,Pin},i=0...N,其中每個(gè)樣本由具有代碼差異塊的嵌入的查詢組成;正樣本包括相同意圖的語(yǔ)義上相似的代碼差異塊的嵌入;以及不同的開(kāi)發(fā)方意圖的代碼差異塊不相關(guān)的負(fù)樣本集合。然后通過(guò)以下公式來(lái)給予對(duì)比損失(正樣本的負(fù)對(duì)數(shù)似然度):其中sim是嵌入向量之間的余弦相似性。[0036]預(yù)訓(xùn)練引擎110接收每個(gè)預(yù)訓(xùn)練數(shù)據(jù)集的每個(gè)預(yù)訓(xùn)練樣本并且將每個(gè)預(yù)訓(xùn)練樣本變換為輸入到神經(jīng)編碼器中的輸入嵌入序列。沒(méi)有輸入預(yù)訓(xùn)練數(shù)據(jù)集來(lái)訓(xùn)練深度學(xué)習(xí)模型的特定順序。在完成預(yù)訓(xùn)練后,預(yù)訓(xùn)練引擎可以測(cè)試并且驗(yàn)證神經(jīng)編碼器以滿足特定的性8[0037]圖2描繪了用于生成代碼審查取回?cái)?shù)據(jù)庫(kù)222的系統(tǒng)200。其示出了源代碼儲(chǔ)存庫(kù)[0038]數(shù)據(jù)挖掘引擎206提取來(lái)自源代碼儲(chǔ)存庫(kù)202的由于代碼審查而被改變的源代碼[0039]所改變的代碼被格式化為代碼差異塊208,代碼差異塊208包括所改變的代碼以及其在代碼差異格式中的周圍的上下文。塊生成器212將每個(gè)代碼差異塊劃分為多個(gè)塊214。具有n個(gè)標(biāo)記的代碼差異塊d,d=(x?,x?,…x),被分割為塊序列(C?,C?,…,C?),其中每個(gè)塊個(gè)標(biāo)記并且1=2。[0040]神經(jīng)編碼器216將編碼差異塊E(Ci)的每個(gè)塊編碼為相應(yīng)嵌入包括指向存儲(chǔ)在代碼審查結(jié)構(gòu)226中的對(duì)應(yīng)代碼審查評(píng)論的索引。因?yàn)榇a差異塊中的每[0041]圖3圖示了代碼審查生成引擎300的示例性配置。代碼審查生成引擎300自動(dòng)產(chǎn)生[0042]代碼審查請(qǐng)求組件302與尋找針對(duì)表示所改變的代碼以及其周圍的上下文的代碼差異塊的代碼審查評(píng)論的應(yīng)用交互。塊生成器306接收代碼差異塊304并且將代碼差異塊304劃分為m個(gè)塊C?,...C?308。每個(gè)塊Ci由神經(jīng)編碼器310編碼并且每個(gè)編碼塊或嵌入312由數(shù)據(jù)庫(kù)引擎316使用作為取回鍵以取回前k個(gè)語(yǔ)義相似的代碼審查評(píng)論,其中k是預(yù)定參代碼差異塊索引和指向代碼審查結(jié)構(gòu)322中的相應(yīng)代碼審查評(píng)論的指針。經(jīng)編碼的代碼差異塊被使用于取回前k個(gè)最接近的語(yǔ)義相似的代碼審查,該代碼審查被增強(qiáng)到具有塊交叉注意力330的神經(jīng)變換器模型的輸入。波束搜索引擎328使用具有塊交叉注意力330的神經(jīng)[0044]在一方面,神經(jīng)編碼器310是配置有多個(gè)堆疊的編碼器塊的具有注意力的神經(jīng)變以代碼差異格式所呈現(xiàn)的所改變的代碼中做出的編輯與代碼審查評(píng)論之間的關(guān)系。為此,神經(jīng)編碼器生成將源代碼編輯與代碼審查評(píng)論相關(guān)聯(lián)的9計(jì)算機(jī)系統(tǒng)能夠通過(guò)使用算法和統(tǒng)計(jì)模型來(lái)分析數(shù)據(jù)中的模式并且從數(shù)據(jù)中的模式中得力指導(dǎo)神經(jīng)網(wǎng)絡(luò)聚焦于輸入序列中的特征或的不同位置的不同的表示。神經(jīng)變換器模型在注意力和不使用遞歸神經(jīng)網(wǎng)絡(luò)(RNN)(例如,長(zhǎng)短期記憶(LSTM)網(wǎng)絡(luò))和卷積神經(jīng)網(wǎng)絡(luò)(CNN)的情況下處理其的輸入和輸出之間的依存注意力的神經(jīng)變換器模型和取回增強(qiáng)的神經(jīng)變換器模型可互換的被使用。還應(yīng)當(dāng)注意的不限于這些類型的神經(jīng)網(wǎng)絡(luò)并且可以應(yīng)用于利用具有注意力機(jī)制的神經(jīng)網(wǎng)絡(luò)的其他類型[0050]具有注意力的神經(jīng)變換器模型使用注意力機(jī)制來(lái)關(guān)聯(lián)輸入嵌入序列的不同位置[0058]具有矩陣參數(shù)W;∈Rdmodelxdk,W∈Rdmodelxdk,Wi∈Rdmodelxd[0059]自注意力是涉及單個(gè)輸入嵌入序列的標(biāo)記的不同位置的注意力機(jī)制。查詢、鍵和值從相同的輸入嵌入序列被生成。交叉注意力混合相同維度的兩個(gè)單獨(dú)的嵌入序列。在交叉注意力中,序列中的一個(gè)序列用作查詢輸入并且另一嵌入序列用作鍵和值輸入。在一方面,輸入到編碼器交叉注意力的查詢是需要代碼審查的差異塊的塊的嵌入的線性投影并且鍵和值輸入是聚集的代碼審查的嵌入序列的線性投影。[0060]圖4示出了在編碼器-解碼器配置中具有塊交叉注意力的神經(jīng)變換器模型的示例性結(jié)構(gòu)。神經(jīng)變換器模型400包含耦合到多個(gè)堆疊的解碼器塊404A、404B(“404”)的多個(gè)所堆疊的編碼器塊402A、402B(“402”)。在一方面,解碼器塊404包括耦合到兩個(gè)所堆疊的標(biāo)準(zhǔn)解碼器塊408的塊交叉注意力解碼器塊406。[0061]編碼器塊402包括輸入層410、多頭自注意力層412、多頭交叉注意力層414和前饋網(wǎng)絡(luò)層416。編碼器塊402的初始輸入是輸入序列的輸入嵌入418,諸如代碼差異塊420.以便于保持輸入嵌入418中的標(biāo)記的順序,將位置嵌入422添加到輸入嵌入418形成上下文張量[0062]編碼器塊402A、402B由三層組成。第一層包括多頭自注意力組件412,跟隨有層歸一化組件413。第二層包括多頭交叉注意力層414,跟隨有層歸一化組件415.第三層包括前饋神經(jīng)網(wǎng)絡(luò)416,跟隨有層歸一化組件417。[0063]上下文張量424被輸入到第一編碼器塊402A的多頭自注意力組件412,其具有到層歸一化組件413的殘差鏈接。層歸一化組件413的輸出被輸入到具有到層歸一化組件415的殘差鏈接的多頭交叉注意力層414。[0064]多頭交叉注意力層414接收針對(duì)輸入代碼差異塊424的所取回的代碼審查的聚集的嵌入426。嵌入是形狀BxKxMxN的張量,其中B表示批次大小,K表示針對(duì)代碼差異塊的所取回的代碼審查的數(shù)目,M表示每所取回的代碼審查的塊的最大數(shù)目,以及N表示每塊[0065]多頭交叉注意力層的輸出被輸入到前饋神經(jīng)網(wǎng)絡(luò)416,該前饋神經(jīng)網(wǎng)絡(luò)416具有到層歸一化組件417的另一殘差鏈接。編碼器塊402的輸出是隱藏表示集合418.然后通過(guò)附加的編碼器塊發(fā)送隱藏表示集合418。在最后的編碼器塊處,隱藏表示集合420被發(fā)送到塊交叉注意力解碼器塊406。[0066]解碼器塊404A至404B(“404”)包括塊交叉注意力解碼器塊406和兩個(gè)標(biāo)準(zhǔn)解碼器塊408。塊交叉注意力解碼器塊406包括掩蔽的多頭自注意力層432、編碼器-解碼器塊交叉注意力層436和前饋網(wǎng)絡(luò)層414,在這些層中的每個(gè)層下面具有層歸一化組件434、438、442。標(biāo)準(zhǔn)解碼器塊408包括掩蔽的多頭自注意力層444和具有相應(yīng)層歸一化組件446、450的前饋層448。[0067]初始地,掩蔽的多頭自注意力組件432接收<START>標(biāo)記并且然后接收先前時(shí)間步長(zhǎng)移位的輸出嵌入。掩蔽的多頭自注意力組件432掩蔽來(lái)自將來(lái)時(shí)間步長(zhǎng)的輸出嵌入。編碼器-解碼器塊交叉注意力層436接收來(lái)自先前解碼器層的查詢以及來(lái)自最后編碼器塊402B的輸出的存儲(chǔ)器鍵和值420.以此方式,解碼器塊404可以注意輸入序列的每個(gè)位置。前饋神經(jīng)網(wǎng)絡(luò)440分別處理每個(gè)輸出編碼。在層之間使用層歸一化組件434、438、442以歸一化跨特征的輸入。[0068]解碼器452的輸出層包括線性層454和softmax層456。線性層454是神經(jīng)網(wǎng)絡(luò),其接11收最后一個(gè)解碼器塊404B的未縮放輸出并且將它們變換為logit.logit是來(lái)自最后解碼器塊的前饋輸出的非歸一化預(yù)測(cè)。softmax層456將softmax函數(shù)應(yīng)用于線性層的logit以近似地針對(duì)模型詞匯的概率分布。該概率分布被使用于預(yù)測(cè)輸出序列中下一標(biāo)記是否成功。[0069]在一個(gè)方面,具有塊交叉注意的神經(jīng)變換器模型400包含被布置到神經(jīng)變換器塊中的十二個(gè)編碼器塊的堆棧和十二個(gè)解碼器塊的堆棧。每個(gè)編碼器塊的輸出被傳遞到下一編碼器塊并且被處理。每個(gè)解碼器塊接收從最后的編碼器塊計(jì)算的注意力權(quán)重。使用多個(gè)堆疊的編碼器塊和解碼器塊增加了模型的容量,允許模型學(xué)習(xí)增加的抽象級(jí)。[0070]在一個(gè)方面,解碼器塊配置有塊交叉注意力解碼器塊,該塊交叉注意力解碼器塊跟隨有兩個(gè)標(biāo)準(zhǔn)解碼器塊。配置有編碼器和解碼器塊的神經(jīng)變換器模型以及僅配置有解碼器塊的神經(jīng)變換器模型在某些情況下表現(xiàn)更好。以便于提供針對(duì)任何情況獲取配置兩者的益處的模型,圖4中所示出的神經(jīng)變換器模型將兩個(gè)具有自注意力的標(biāo)準(zhǔn)解碼器塊與塊交叉注意力解碼器塊交錯(cuò)以實(shí)現(xiàn)配置兩者的益處。[0071]在其它方面,解碼器塊可以包括數(shù)個(gè)堆疊塊交叉注意力解碼器塊。在其它方面,解碼器塊可以包括塊交叉注意力解碼器塊和標(biāo)準(zhǔn)解碼器塊的不同混合。[0073]現(xiàn)在將注意力轉(zhuǎn)向在針對(duì)取回增強(qiáng)代碼完成的系統(tǒng)中被使用的方法的更具體實(shí)施方式??梢岳斫獾氖?,除非另有說(shuō)明,代表性的方法不一定必須以所呈現(xiàn)的順序或以任何特定的順序執(zhí)行。此外,可以以串行或并行方式,或串行和并行操作的任何組合來(lái)執(zhí)行關(guān)于方法描述的各種活動(dòng)。在一個(gè)或多個(gè)方面中,該方法說(shuō)明針對(duì)本文所公開(kāi)的系統(tǒng)和設(shè)備的[0074]圖5圖示了用于生成代碼審查生成引擎500的組件的示例性方法。訓(xùn)練神經(jīng)編碼器以學(xué)習(xí)預(yù)測(cè)針對(duì)無(wú)監(jiān)督預(yù)訓(xùn)練數(shù)據(jù)集上的代碼差異塊的每個(gè)塊的嵌入。預(yù)訓(xùn)練數(shù)據(jù)集是從代碼審查評(píng)論導(dǎo)出的并且源代碼已經(jīng)基于代碼審查評(píng)論或被改變而沒(méi)有代碼審查評(píng)論。預(yù)訓(xùn)練數(shù)據(jù)集的樣本針對(duì)神經(jīng)編碼器被掩蔽或去噪以學(xué)習(xí)預(yù)測(cè)所改變的代碼或代碼審查評(píng)論中的掩蔽或去噪的標(biāo)記。預(yù)訓(xùn)練數(shù)據(jù)以代碼差異格式而被格式化使得神經(jīng)編碼器學(xué)習(xí)所做出的代碼編輯與其對(duì)應(yīng)的代碼審查評(píng)論之間的關(guān)系。[0075]轉(zhuǎn)向圖1和圖5,數(shù)據(jù)挖掘引擎104挖掘用于拉取請(qǐng)求、提交、評(píng)論、代碼審查、源代碼和被使用于生成預(yù)訓(xùn)練數(shù)據(jù)集的數(shù)據(jù)的各種源代碼儲(chǔ)存庫(kù)102。數(shù)據(jù)挖掘引擎104提取從拉取請(qǐng)求提交中找到的源代碼文件的兩個(gè)版本之間的差異所導(dǎo)出的所改變的代碼。所改變的代碼可以包括代碼審查評(píng)論,該代碼審查評(píng)論包括描述針對(duì)改變的原因、用于補(bǔ)救的建[0076]在一方面,GitHub代表性狀態(tài)傳送(“REST”)應(yīng)用編程接口("API")被使用于收集碼差異、評(píng)論等。利用那些代碼審查(“ETCR”)工具被用于收集拉取請(qǐng)求和審查評(píng)論的元數(shù)據(jù),該元數(shù)據(jù)被使用于經(jīng)由GitHubAPI來(lái)查詢與審查評(píng)論相對(duì)應(yīng)的代碼改變,包括原始文件、新的文件和代碼差異。收集代碼變化和審查評(píng)論以構(gòu)建針對(duì)神經(jīng)編碼器的預(yù)訓(xùn)練數(shù)據(jù)[0077]代碼差異示出了差異格式的相同的源代碼文件的兩個(gè)版本之間的變化。從拉取請(qǐng)求中提取代碼差異。備選地,代碼差異可以從諸如Unix操作系統(tǒng)的差異實(shí)用程序的軟件工具和其他這種工具生成。從代碼差異產(chǎn)生代碼差異塊,該代碼差異塊包含代碼差異和圍繞代碼差異的已經(jīng)不具有改變的多個(gè)源代碼行。差異塊生成器106利用對(duì)應(yīng)的特殊標(biāo)記(例[0078]然后,預(yù)訓(xùn)練數(shù)據(jù)集生成器108對(duì)預(yù)訓(xùn)練數(shù)據(jù)集的某些特征執(zhí)行掩蔽去噪。掩蔽去噪基于評(píng)價(jià)人類語(yǔ)言學(xué)習(xí)者的熟練度的模糊任務(wù),其中人類被給予具有缺失詞的外語(yǔ),并且被要求正確地選擇缺失詞。在預(yù)訓(xùn)練中的掩蔽去噪的好處是模型以無(wú)監(jiān)督方式學(xué)習(xí)期望的編輯或代碼審查語(yǔ)言,但是在其學(xué)習(xí)編輯和代碼審查中的單詞在其出現(xiàn)之前和之后兩者[0079]針對(duì)差異標(biāo)簽預(yù)測(cè)預(yù)訓(xùn)練數(shù)據(jù)集124,預(yù)訓(xùn)練數(shù)據(jù)集生成器108接收代碼差異塊并且通過(guò)掩蔽標(biāo)簽[MASK]隨機(jī)地掩蔽某些標(biāo)簽(例如[DEL]、[ADD]、[KEEP])。針對(duì)去噪代碼差異預(yù)訓(xùn)練數(shù)據(jù)集120,預(yù)訓(xùn)練數(shù)據(jù)集生成器108接收代碼差異塊并且隨機(jī)地掩蔽被相應(yīng)標(biāo)簽(例如,[TAGO])替換的源代碼行。針對(duì)去噪審查評(píng)論預(yù)訓(xùn)練數(shù)據(jù)集122,預(yù)訓(xùn)練數(shù)據(jù)集生成器108接收代碼審查評(píng)論并且利用相應(yīng)標(biāo)簽(例如,[TAG1])隨機(jī)地掩蔽審查內(nèi)的不同標(biāo)記。[0080]在完成預(yù)訓(xùn)練數(shù)據(jù)集的生成時(shí),利用預(yù)訓(xùn)練數(shù)據(jù)集的樣本中的每個(gè)樣本來(lái)訓(xùn)練神經(jīng)編碼器112。預(yù)訓(xùn)練數(shù)據(jù)集的預(yù)訓(xùn)練樣本中的每個(gè)預(yù)訓(xùn)練樣本是被變換為輸入嵌入的序列的輸入序列。輸入序列被標(biāo)記化并且每個(gè)標(biāo)記被相應(yīng)的嵌入所代替,將輸入序列變換為輸入嵌入序列。嵌入是針對(duì)基于文本的標(biāo)記的學(xué)習(xí)表示,其中具有共同含義的標(biāo)記具有共同表示。嵌入是離散分類變量到連續(xù)數(shù)字向量的映射。針對(duì)在預(yù)訓(xùn)練數(shù)據(jù)集中使用的源代碼的每個(gè)標(biāo)記和代碼審查的自然語(yǔ)言文本,存在嵌入。每個(gè)標(biāo)記嵌入具有相應(yīng)位置嵌入。神經(jīng)變換器模型不按順序地讀取每個(gè)標(biāo)記,并且如此,在沒(méi)有附加位置信息的情況下,不知道標(biāo)記在序列中的位置。位置嵌入被使用于將序列中關(guān)于標(biāo)記位置的位置信息編碼到神經(jīng)變[0081]迭代地訓(xùn)練神經(jīng)變換器模型,在收斂到最小值之前在訓(xùn)練數(shù)據(jù)集上做出多次傳遞。歷元表示前向和反向通過(guò)神經(jīng)編碼器變換器塊一次的整個(gè)預(yù)訓(xùn)練數(shù)據(jù)集。由于訓(xùn)練數(shù)據(jù)集非常大,因此將其劃分為更小的批次。訓(xùn)練是迭代的并且整個(gè)訓(xùn)練數(shù)據(jù)集在多次迭代中被關(guān)注地傳遞通過(guò)神經(jīng)變換器。每個(gè)訓(xùn)練迭代包括前向傳播、損失計(jì)算、反向傳播步驟跟隨有更新權(quán)重。訓(xùn)練數(shù)據(jù)集被劃分為批次,序列的每個(gè)批次貫穿預(yù)訓(xùn)練過(guò)程。(統(tǒng)稱為,框[0082]針對(duì)每個(gè)歷元中的每個(gè)批次的每個(gè)輸入序列,標(biāo)記的T排序序列然后被映射到數(shù)字向量中并且然后被映射到相應(yīng)標(biāo)記嵌入和位置嵌入中。生成針對(duì)每個(gè)輸入序列的標(biāo)記嵌入和位置嵌入的初始值,然后將其使用于形成上下文張量。此后,神經(jīng)變換器模型通過(guò)反向[0083]在訓(xùn)練階段完成時(shí),針對(duì)每個(gè)標(biāo)記的嵌入和位置嵌入被保存到相應(yīng)矩陣中用于以后使用。存在標(biāo)記嵌入矩陣We,其包含針對(duì)特定編程語(yǔ)言的每個(gè)標(biāo)記t;,i=0…V的嵌入向量,以及位置嵌入矩陣Wp,其包含針對(duì)每個(gè)位置的嵌入向量P,,j=0…T,其中V是模型詞匯[0084]在每個(gè)批次完成時(shí),以表示為Naccum的預(yù)先配置的頻率更新神經(jīng)編碼器的參數(shù)。Naccum是梯度累積頻率并且在一個(gè)方面具有值8。參數(shù)包括標(biāo)記嵌入和存儲(chǔ)在相應(yīng)嵌入矩[0085]接著,驗(yàn)證神經(jīng)編碼器模型112。在訓(xùn)練神經(jīng)編碼器模型112之前,隨機(jī)選擇超參數(shù)集合并且然后調(diào)整以實(shí)現(xiàn)期望的性能。使用驗(yàn)證數(shù)據(jù)集來(lái)測(cè)試神經(jīng)編碼器模型112以確定合適的超參數(shù)設(shè)置從而實(shí)現(xiàn)期望的目的。當(dāng)未實(shí)現(xiàn)期望的目的時(shí),調(diào)整一個(gè)或多個(gè)超參數(shù)并且重復(fù)訓(xùn)練直到實(shí)現(xiàn)目標(biāo)的目的。計(jì)算對(duì)驗(yàn)證集的困擾以驗(yàn)證模型關(guān)于學(xué)習(xí)被掩蔽的原[0086]轉(zhuǎn)向圖2和圖5,代碼審查取回?cái)?shù)據(jù)庫(kù)222是根據(jù)歷史代碼審查評(píng)論構(gòu)建的。從版本控制源代碼儲(chǔ)存庫(kù)202中提取歷史代碼審查評(píng)論。提取由于代碼審查評(píng)論而已經(jīng)改變的源代碼文件并且將所改變的代碼變換為代碼差異塊。(統(tǒng)稱為,框506)。[0087]將每個(gè)代碼差異塊分段為多個(gè)塊并且使用神經(jīng)編碼器216對(duì)代碼差異塊的每個(gè)塊進(jìn)行編碼(框508)。[0088]代碼審查取回?cái)?shù)據(jù)庫(kù)222由編碼塊以及其對(duì)應(yīng)的代碼審查評(píng)論構(gòu)建。代碼審查取回?cái)?shù)據(jù)庫(kù)222包括索引結(jié)構(gòu)224和代碼審查結(jié)構(gòu)226。索引結(jié)構(gòu)224存儲(chǔ)索引和指向存儲(chǔ)在代碼審查結(jié)構(gòu)226中的對(duì)應(yīng)的代碼審查評(píng)論的指針。索引是經(jīng)編碼的代碼差異塊并且指針指[0089]生成具有塊交叉注意力的針對(duì)神經(jīng)變換器模型的訓(xùn)練數(shù)據(jù)集。訓(xùn)練數(shù)據(jù)集包括代碼差異塊以及其相關(guān)聯(lián)的代碼審查評(píng)論。然后將訓(xùn)練數(shù)據(jù)集應(yīng)用于具有塊交叉注意力的神[0090]參考圖4和圖5,每個(gè)代碼差異塊420被變換為第一輸入序列并且其相關(guān)的代碼審查評(píng)論被變換為第二輸入序列。這些輸入序列中的每個(gè)輸入序列被變換為輸入嵌入序列。每個(gè)輸入序列被標(biāo)記化并且每個(gè)標(biāo)記被相應(yīng)嵌入所代替,從而將每個(gè)相應(yīng)輸入序列變換為[0091]類似于上文所描述的神經(jīng)編碼器的訓(xùn)練,迭代地訓(xùn)練具有塊交叉注意力的神經(jīng)變換器模型,在收斂到最小值之前在訓(xùn)練數(shù)據(jù)集上做出多次傳遞。訓(xùn)練是迭代的并且整個(gè)訓(xùn)練數(shù)據(jù)集在多次迭代中被關(guān)注地傳遞通過(guò)神經(jīng)變換器。每個(gè)訓(xùn)練迭代包括前向傳播、損失計(jì)算、反向傳播步驟跟隨有更新權(quán)重。訓(xùn)練數(shù)據(jù)集被劃分為批次,序列的每個(gè)批次貫穿訓(xùn)練[0092]針對(duì)每個(gè)歷元中的每個(gè)批次的每個(gè)輸入序列,標(biāo)記的T排序序列然后被映射到數(shù)字向量中并且然后被映射到相應(yīng)標(biāo)記嵌入和位置嵌入中。生成針對(duì)每個(gè)輸入序列的標(biāo)記嵌入和位置嵌入的初始值,然后將其使用于形成相應(yīng)上下文張量。此后,神經(jīng)變換器模型通過(guò)[0093]神經(jīng)變換器模型的第一編碼器塊將上下文張量424作為輸入并且將其傳遞通過(guò)多層多頭自注意力412、多頭交叉注意力414和前饋神經(jīng)網(wǎng)絡(luò)416以最終產(chǎn)生隱藏表示集合。針對(duì)多頭交叉注意力層414,所取回的代碼審查嵌入426的線性投影用作查詢并且從輸入嵌入418生成鍵和值對(duì)。如果存在附加的編碼器塊,則每個(gè)編碼器塊的輸出被傳遞到下一編碼器塊,其中最后的編碼器塊402B的輸出產(chǎn)生隱藏表示集合420。該隱藏表示集合被傳遞到每個(gè)[0094]初始地,第一解碼器塊406接收<START>標(biāo)記并且此后解碼器塊將輸出嵌入的移位序列作為輸入426。移位了一個(gè)位置的輸出嵌入確保了對(duì)位置T的預(yù)測(cè)僅依賴于在小于T的位置處的已知輸出。從輸出序列的第一標(biāo)記開(kāi)始,標(biāo)記在歸一化層之前傳遞通過(guò)自注意力并且進(jìn)入塊交叉注意力層。為了執(zhí)行塊交叉注意力,塊交叉注意力的輸入被劃分為參與塊xNxD和編碼器的輸出H+之間計(jì)算交叉注意力,形狀張量(BxK)xNxD用作針對(duì)塊交叉注意力層的查詢,形狀張量(BxK)x(RxN)xD用作針對(duì)注意力的鍵和值對(duì),其中B是批[0095]編碼器塊和解碼器塊中的前饋神經(jīng)網(wǎng)絡(luò)被迭代地訓(xùn)練,在收斂到最小值之前在訓(xùn)練數(shù)據(jù)集上做出多次傳遞通過(guò)。每個(gè)訓(xùn)練迭代包括前向傳播、損失計(jì)算、反向傳播步驟跟隨有計(jì)算權(quán)重梯度來(lái)更新權(quán)重。損失函數(shù)估計(jì)被使用于比較預(yù)測(cè)結(jié)果好或壞的損失或誤差。在一個(gè)方面,使用分類交叉熵?fù)p失函數(shù)。一旦損失被計(jì)算,將其反向傳播到直接貢獻(xiàn)于輸出的隱藏層。在反向傳播中,確定損失函數(shù)相對(duì)于可訓(xùn)練參數(shù)的偏導(dǎo)數(shù)。權(quán)重梯度被計(jì)算為權(quán)重的舊的值和新的值之間的差。使用梯度下降技術(shù)來(lái)調(diào)節(jié)權(quán)重以使損失盡可能小。在一個(gè)方面,隨機(jī)梯度下降(SGD)方法是被使用于找到最小化損失函數(shù)的函數(shù)的參數(shù)值的優(yōu)化算法??梢允褂脮r(shí)間反向傳播(BPTT)算法來(lái)更新權(quán)重。[0097]在完成對(duì)具有塊交叉注意力的神經(jīng)變換器模型的訓(xùn)練和驗(yàn)證時(shí),將代碼審查生成引擎、神經(jīng)編碼器、數(shù)據(jù)庫(kù)和具有塊交叉注意力的神經(jīng)變換器模型的組件部署到目標(biāo)系統(tǒng)中(框516)。[0098]現(xiàn)在將注意力轉(zhuǎn)向使用代碼審查生成引擎生成代碼審查的更詳細(xì)的討論。圖6圖示了代碼審查生成引擎的推理過(guò)程的示例性方法。[0099]自動(dòng)代碼審查系統(tǒng)的推理階段是使用具有塊交叉注意力的取回增強(qiáng)神經(jīng)變換器模型生成代碼審查評(píng)論候選的過(guò)程。推理階段使用波束搜索來(lái)搜索代碼審查評(píng)論候選。這是因?yàn)樯窠?jīng)變換器模型的解碼器一次一個(gè)地生成每個(gè)標(biāo)記。神經(jīng)變換器模型使用以下公式將輸入序列中的目標(biāo)標(biāo)記的概率因式分解為針對(duì)每個(gè)標(biāo)記的條件概率的乘積:p(t1,…tm|s)=I=1P(t;|t1,…t;-1,S),其中t;表示在時(shí)間步長(zhǎng)i處的標(biāo)記,并且s表示輸入序列。在推理期間,argmaxtp(t|s)的計(jì)算是復(fù)雜的并且非常耗時(shí)的,使得該模型難以用于實(shí)時(shí)應(yīng)用。波束搜索是執(zhí)行得更快的近似算法。[0100]波束搜索使用由具有塊交叉注意力的神經(jīng)變換器模型生成的概率分布來(lái)標(biāo)識(shí)可能是候選代碼審查評(píng)論中的下一標(biāo)記的前k個(gè)標(biāo)記。波束搜索通過(guò)使用由神經(jīng)變換器模型的概率分布標(biāo)識(shí)的所選擇的標(biāo)記中的每個(gè)標(biāo)記來(lái)實(shí)例化新的部分序列來(lái)擴(kuò)展搜索。搜索繼續(xù)從由來(lái)自神經(jīng)變換器模型的輸出分布標(biāo)識(shí)的前k個(gè)標(biāo)記生成新的部分序列,直到搜索結(jié)[0101]波束搜索使用廣度優(yōu)先搜索來(lái)構(gòu)建搜索樹(shù)。搜索樹(shù)由一個(gè)或多個(gè)推理級(jí)的節(jié)點(diǎn)組成。每個(gè)節(jié)點(diǎn)表示由神經(jīng)變換器模型生成針對(duì)模型詞匯中的標(biāo)記的概率分布。在每個(gè)等級(jí)處,只有來(lái)自由神經(jīng)變換器模型所生成的輸出分布的具有最高概率的前k個(gè)標(biāo)記被擴(kuò)展到下一推理級(jí)。變量k被預(yù)先配置并且被稱為波束寬度。然后將k個(gè)標(biāo)記中的每個(gè)標(biāo)記擴(kuò)展到搜索中,該搜索利用所選擇的標(biāo)記來(lái)更新當(dāng)前上下文序列以輸入到神經(jīng)變換器模型中,從而針對(duì)序列中的下一標(biāo)記生成附加概率分布。重復(fù)該過(guò)程,直到序列結(jié)束標(biāo)記被預(yù)測(cè)為下一可能的標(biāo)記候選。[0102]轉(zhuǎn)向圖3和圖6,代碼審查生成引擎300通過(guò)代碼審查請(qǐng)求組件302來(lái)接收針對(duì)給予代碼差異塊304的自動(dòng)代碼審查評(píng)論的請(qǐng)求(框602)。塊生成器306將代碼差異塊劃分為多個(gè)塊(框604)。神經(jīng)編碼器310生成針對(duì)代碼差異塊的每個(gè)塊的編碼(框606)。[0103]數(shù)據(jù)庫(kù)引擎316使用針對(duì)每個(gè)塊的編碼來(lái)在代碼審查取回?cái)?shù)據(jù)庫(kù)318中搜索針對(duì)一個(gè)或多個(gè)所取回的代碼審查評(píng)論。由于塊表示代碼差異塊的部分,因此經(jīng)常存在與塊相關(guān)聯(lián)的數(shù)個(gè)代碼審查評(píng)論。數(shù)據(jù)庫(kù)引擎在代碼審查取回?cái)?shù)據(jù)庫(kù)318的代碼差異塊索引中搜索與代碼差異塊的編碼類似的編碼。在一個(gè)方面,基于L2得分來(lái)計(jì)算相似性,L2得分是塊的編碼與索引的編碼之間的差的絕對(duì)值??紤]具有最小得分的那些索引并且取回其的相關(guān)聯(lián)的代碼審查評(píng)論。從那些所取回的代碼審查評(píng)論中,選擇具有前k個(gè)最小得分的那些作為針[0104]針對(duì)塊的每個(gè)所取回的代碼審查評(píng)論被聚集到第一輸入嵌入序列中并且代碼差異塊被表示為第二輸入嵌入序列。將第一輸入嵌入和第二輸入嵌入輸入到具有塊交叉注意力的神經(jīng)變換器模型中。第一輸入嵌入被輸入到每個(gè)編碼器塊的塊交叉注意力層并且第二輸入嵌入被輸入到第一編碼器塊的多頭自注意力組件。[0105]給予兩個(gè)輸入嵌入序列,波束搜索引擎328使用具有塊交叉注意力的神經(jīng)變換器模型來(lái)執(zhí)行波束搜索以生成代碼審查評(píng)論候選332(框610)。這可以生成多于一個(gè)的候選代碼審查評(píng)論。選擇前k個(gè)塊審查評(píng)論候選并且將其返回到代碼審查請(qǐng)求組件302和目標(biāo)系統(tǒng)[0106]現(xiàn)在注意力轉(zhuǎn)向?qū)Σ捎么a審查生成引擎的示例性系統(tǒng)的實(shí)施方式。轉(zhuǎn)到圖7,其示出了用于軟件開(kāi)發(fā)和版本控制700的托管服務(wù)。托管服務(wù)700可以是通過(guò)諸如互聯(lián)網(wǎng)的網(wǎng)絡(luò)訪問(wèn)的web服務(wù)。托管服務(wù)700包括一個(gè)或多個(gè)源代碼儲(chǔ)存庫(kù)702、版本控制管理器704和代碼審查生成引擎300.源代碼儲(chǔ)存庫(kù)702A至702N(“702”)存儲(chǔ)源代碼文件、文檔和其它數(shù)據(jù)。版本控制管理器704跟蹤并且管理對(duì)源代碼儲(chǔ)存庫(kù)702的文件做出的改變。[0107]托管服務(wù)700與具有存儲(chǔ)在源代碼儲(chǔ)存庫(kù)中的一個(gè)源代碼儲(chǔ)存庫(kù)中的源代碼文件的副本的開(kāi)發(fā)方706進(jìn)行交互。開(kāi)發(fā)方706可以發(fā)起拉取請(qǐng)求708以將改變提交回存儲(chǔ)在托管服務(wù)中的源代碼文件的版本。版本控制管理器704向代碼審查生成引擎300發(fā)起針對(duì)拉取請(qǐng)求的所改變的代碼的代碼審查評(píng)論的請(qǐng)求。版本控制管理器704生成代碼差異塊712,該代碼差異塊712被發(fā)送到代碼審查生成引擎300。代碼審查生成引擎300生成被發(fā)送到開(kāi)發(fā)方706的一個(gè)或多個(gè)代碼審查評(píng)論候選714。開(kāi)發(fā)方706可以提交包括附加改變的附加拉取請(qǐng)求并且最終這些改變被合并到托管服務(wù)的源代碼文件中。[0108]示例性操作環(huán)境[0109]現(xiàn)在將注意力轉(zhuǎn)向?qū)κ纠圆僮鳝h(huán)境800的討論。圖8圖示了其中使用一個(gè)或多個(gè)計(jì)算設(shè)備802的示例性操作環(huán)境800。然而,應(yīng)當(dāng)注意的是,本文所公開(kāi)的方面不限于計(jì)算設(shè)備的任何特定配置。在另一方面,一個(gè)或多個(gè)計(jì)算設(shè)備可以被配置為開(kāi)發(fā)代碼審查生成引擎的組件并且一個(gè)或多個(gè)其它計(jì)算設(shè)備可以被配置為將代碼審查生成引擎部署到目標(biāo)系統(tǒng)中。[0110]計(jì)算設(shè)備802可以是任何類型的電子設(shè)備,諸如但不限于移動(dòng)設(shè)備、個(gè)人數(shù)字助置在網(wǎng)絡(luò)環(huán)境、分布式環(huán)境、多處理器環(huán)境或可訪問(wèn)遠(yuǎn)程或本地存儲(chǔ)設(shè)備的獨(dú)立計(jì)算設(shè)備個(gè)存儲(chǔ)設(shè)備808、一個(gè)或多個(gè)存儲(chǔ)設(shè)備或存儲(chǔ)器810、以及一個(gè)或多個(gè)輸入/輸出設(shè)備812.處理器804可以是任何市售的或定制的處理器并且可以包括雙微處理器和多處理器架構(gòu)。通信接口806促進(jìn)計(jì)算設(shè)備802和其它設(shè)備之間的有線或無(wú)線通信。存儲(chǔ)設(shè)備808可以是計(jì)算機(jī)可讀介質(zhì),其不包含傳播信號(hào),諸如通過(guò)載波傳輸?shù)恼{(diào)制數(shù)據(jù)信號(hào)。存儲(chǔ)設(shè)備808的示例制數(shù)據(jù)信號(hào)。在計(jì)算設(shè)備802中可以有多個(gè)存儲(chǔ)設(shè)備808.輸入/輸出設(shè)備812可以包括鍵盤、[0112]存儲(chǔ)器設(shè)備或存儲(chǔ)器810可以是可以存儲(chǔ)可執(zhí)行程序、應(yīng)用和數(shù)據(jù)的任何非暫態(tài)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)不涉及傳播信號(hào),諸如通過(guò)載波傳輸?shù)恼{(diào)制數(shù)據(jù)信號(hào)。其可以是任何類型的非暫態(tài)存儲(chǔ)器設(shè)備(例如,隨機(jī)存取存儲(chǔ)器、只讀存儲(chǔ)器等)、傳播信號(hào),諸如通過(guò)載波傳輸?shù)恼{(diào)制數(shù)據(jù)信號(hào)。存儲(chǔ)器810還可以包括一個(gè)或多個(gè)外部存儲(chǔ)設(shè)備或遠(yuǎn)程定位的存儲(chǔ)設(shè)備,其不涉及傳播信號(hào),諸如通過(guò)載波傳輸?shù)恼{(diào)制數(shù)據(jù)信號(hào)。[0113]存儲(chǔ)器設(shè)備810可以包含指令、組件和數(shù)據(jù)。組件是執(zhí)行特定功能的軟件程序并且也被稱為模塊、程序和/或應(yīng)用。存儲(chǔ)器設(shè)備810可以包括操作系統(tǒng)814、一個(gè)或多個(gè)源代碼儲(chǔ)存庫(kù)816、數(shù)據(jù)挖掘引擎818、代碼差異塊生成器820、預(yù)訓(xùn)練數(shù)據(jù)集生成器822、預(yù)訓(xùn)練引擎824、塊生成器826、神經(jīng)編碼器828、數(shù)據(jù)庫(kù)引擎830、代碼審查取回生成引擎834、波束搜索引擎836、具有塊交叉注意的神經(jīng)變換器模型838、預(yù)訓(xùn)練數(shù)據(jù)集[0114]計(jì)算設(shè)備802可以經(jīng)由網(wǎng)絡(luò)846通信地耦合。網(wǎng)絡(luò)846可以被配置為自組織網(wǎng)絡(luò)、內(nèi) [0115]網(wǎng)絡(luò)846可以采用各種有線和/或無(wú)線通信協(xié)議和/或技術(shù)??梢杂删W(wǎng)絡(luò)采用的不同通信協(xié)議和/或技術(shù)的各種世代可以包括但不限于全球移動(dòng)通信系統(tǒng)(GSM)、通用分組無(wú)分多址2000(CDMA-2000)、高速下行鏈路分組接入(HSDPA)、長(zhǎng)期演進(jìn)(LTE)、通用移動(dòng)電信議/互聯(lián)網(wǎng)協(xié)議(TCP/IP)、開(kāi)放系統(tǒng)互連(OSI)模型協(xié)議的任何部分,會(huì)話發(fā)起協(xié)議/實(shí)時(shí)傳輸協(xié)議(SIP/RTP)、短消息服務(wù)(SMS)、多媒體消息業(yè)務(wù)(M術(shù)。[0117]本文所公開(kāi)的主題的方面涉及使用深度學(xué)習(xí)模型使針對(duì)源代碼程序做出的所提議的代碼改變的代碼審查評(píng)論自動(dòng)化的技術(shù)問(wèn)題。與解決該問(wèn)題相關(guān)聯(lián)的技術(shù)特征是取回在語(yǔ)義上類似于對(duì)所提及的源代碼程序的源代碼改變所做出的代碼編輯的代碼審查評(píng)論。所取回的代碼審查評(píng)論是對(duì)模型的附加輸入,其幫助模型預(yù)測(cè)所提議的代碼改變的更相關(guān)代碼審查評(píng)論。[0118]通過(guò)使用塊而不是整個(gè)代碼差異塊來(lái)獲取所取回的代碼審查評(píng)論。由于代碼差異塊可以由代碼的多個(gè)語(yǔ)義上不同的部分組成,所以針對(duì)語(yǔ)義上相似的代碼審查評(píng)論的搜索是以塊的較小粒度進(jìn)行的。因此,使用塊作為用于取回的查詢更準(zhǔn)確,特別是針對(duì)更長(zhǎng)的代碼差異塊。該模型可以一次注意一個(gè)塊,并且某些塊可能比其它塊更相關(guān)于預(yù)測(cè)輸出。這就是為什么模型針對(duì)代碼差異塊的所有塊采取取回的代碼審查的聚集的原因。[0119]所實(shí)現(xiàn)的技術(shù)效果是深度學(xué)習(xí)模型的存儲(chǔ)器大小的減小以及部署模型所需要的計(jì)算資源量的減小,而沒(méi)有損失預(yù)測(cè)結(jié)果的準(zhǔn)確性。[0121]公開(kāi)了一種系統(tǒng),包括:一個(gè)或多個(gè)處理器;以及存儲(chǔ)器,存被配置為由一個(gè)或多個(gè)處理器執(zhí)行的一個(gè)或多個(gè)程序,一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指令:以代碼差異格式獲取源代碼程序的所提議的源代碼改變,其中代碼差異格式包括對(duì)源代碼程序做出的代碼編輯;訪問(wèn)代碼審查評(píng)論的數(shù)據(jù)庫(kù),其中數(shù)據(jù)庫(kù)的每個(gè)代碼審查評(píng)論與代碼編輯相關(guān)聯(lián);從代碼審查評(píng)論的數(shù)據(jù)庫(kù)取回針對(duì)源代碼程序的所提議的源代碼改變的代碼審查評(píng)論,其中所取回的代碼審查評(píng)論與類似于所提議的源代碼改變的代碼編輯的代碼編輯相關(guān)聯(lián);以及從深度學(xué)習(xí)模型生成針對(duì)所提議的源代碼改變的候選代碼審查評(píng)論,深度學(xué)習(xí)模型給予所取回的代碼審查評(píng)論和所提議的源代碼改變。[0122]在一方面,一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指令:生成與數(shù)據(jù)庫(kù)的代碼審查評(píng)論相關(guān)聯(lián)的、針對(duì)每個(gè)代碼編輯的編碼和所提議的源代碼改變的編碼。在一方面,一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指令:通過(guò)將與所取回的代碼審查評(píng)論相關(guān)聯(lián)的代碼編輯的編碼與所提議的源代碼改變的編碼進(jìn)行比較來(lái)確定所取回的代碼審查評(píng)論與類似于所提議的源代碼改變的代碼編輯的代碼編輯相關(guān)聯(lián)。[0123]在一方面,與所取回的代碼審查評(píng)論相關(guān)聯(lián)的代碼編輯的編碼最接近于所提議的源代碼改變的編碼。在一方面,一個(gè)或多個(gè)程序包括用以執(zhí)行以下動(dòng)作的指令:將所提議的源代碼改變劃分為多個(gè)塊;以及基于與類似于相應(yīng)塊的代碼編輯的代碼編輯相關(guān)聯(lián)的每個(gè)所取回的代碼審查評(píng)論來(lái)取回針對(duì)每個(gè)塊的代碼審查評(píng)論。[0124]在一方面,每個(gè)塊與關(guān)聯(lián)于相應(yīng)塊的代碼編輯的編碼相關(guān)聯(lián),數(shù)據(jù)庫(kù)的每個(gè)代碼審查評(píng)論與編碼相關(guān)聯(lián),并且針對(duì)每個(gè)塊的代碼審查評(píng)論的取回基于塊編碼和與每個(gè)代碼審查評(píng)論相關(guān)聯(lián)的編碼之間的差異。[0125]在一方面,每個(gè)塊編碼和與每個(gè)代碼審查評(píng)論相關(guān)聯(lián)的每個(gè)編碼從相同的神經(jīng)編碼器被生成。在一方面,深度學(xué)習(xí)模型包括具有自注意力和交叉注意力的神經(jīng)變換器模型。[0126]公開(kāi)了一種計(jì)算機(jī)實(shí)施的方法,包括:獲取表示對(duì)源代碼程序進(jìn)行代碼編輯的代碼差異塊;訪問(wèn)多個(gè)代碼審查評(píng)論,每個(gè)代碼審查評(píng)論與相關(guān)聯(lián)的代碼編輯的編碼相關(guān)聯(lián);將代碼差異塊劃分為多個(gè)塊;對(duì)多個(gè)塊中的每個(gè)塊進(jìn)行編碼;從多個(gè)代碼審查評(píng)論取回針對(duì)每個(gè)塊的一個(gè)或多個(gè)代碼審查評(píng)論,其中所取回的代碼審查評(píng)論與類似于相應(yīng)塊編碼的編碼相關(guān)聯(lián);以及從深度學(xué)習(xí)模型生成針對(duì)代碼差異塊的預(yù)測(cè)的代碼審查,其中深度學(xué)習(xí)模型被給予多個(gè)塊中的每個(gè)塊的一個(gè)或多個(gè)所取回的代碼審查評(píng)論和代碼差異塊。[0127]在一方面,根據(jù)聲明9的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:訪問(wèn)神經(jīng)編碼器以生成每個(gè)塊編碼以及與多個(gè)代碼審查評(píng)論中的每個(gè)代碼審查評(píng)論相關(guān)聯(lián)的編碼。[0128]在一方面,神經(jīng)編碼器是具有注意力的神經(jīng)編碼器變換器模型。在一方面,計(jì)算機(jī)實(shí)現(xiàn)的方法還包括:基于距離得分來(lái)確定一個(gè)或多個(gè)所取回的代碼審查評(píng)論與每個(gè)塊之間的相似性,其中距離得分基于塊編碼和與所取回的代碼審查評(píng)論相關(guān)聯(lián)的編碼之間的差異。[0129]在一方面,計(jì)算機(jī)實(shí)現(xiàn)的方法還包括:基于相應(yīng)距離得分來(lái)排序針對(duì)代碼差異塊的每個(gè)塊的所取回的代碼審查評(píng)論;以及選擇從經(jīng)排序的所取回的代碼審查評(píng)論,基于距離得分來(lái)選擇經(jīng)排序的所取回的代碼審查評(píng)論中的一個(gè)經(jīng)排序的所取回的代碼審查評(píng)論。[0130]在一方面,根據(jù)聲明13的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:聚集選擇所取回的代碼審查評(píng)論中的一個(gè)所取回的代碼審查評(píng)論;以及將所聚集的所取回的代碼審查評(píng)論輸入到深度學(xué)習(xí)模型。在一方面,深度學(xué)習(xí)模型是具有注意力的神經(jīng)變換器模型。[0131]公開(kāi)了一種計(jì)算機(jī)實(shí)現(xiàn)的方法,包括:獲取多個(gè)所改變的代碼的訓(xùn)練數(shù)據(jù)集,多個(gè)所改變的代碼中的每個(gè)所改變的代碼具有相關(guān)聯(lián)的代碼審查評(píng)論;配置具有耦合到至少一個(gè)解碼器塊的至少一個(gè)編碼器塊的深度學(xué)習(xí)模型,其中至少一個(gè)編碼器塊包括自注意力層和交叉注意力層;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論