自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

人工智能 深度學(xué)習(xí)
在本文中,我們提出了一種基于語法的結(jié)構(gòu) CNN 用于代碼生成。我們的模型利用了抽象程序的語法樹(AST),并通過規(guī)定語法規(guī)則。我們解決了基于 RNN 的傳統(tǒng)方法可能不適合于克生成,可能是由于大量的程序中的 kens/nodes。

摘要

代碼生成將程序描述映射到可執(zhí)行文件編程語言的源代碼?,F(xiàn)有方法主要依靠遞歸神經(jīng)網(wǎng)絡(luò)(RNN)編碼器。但是,我們發(fā)現(xiàn)一個(gè)程序包含比自然語言句子更多的標(biāo)記,因此它可能不適合 RNN 捕獲如此長(zhǎng)的序列。在本文提出了一種基于語法的結(jié)構(gòu)卷積用于代碼生成的傳統(tǒng)神經(jīng)網(wǎng)絡(luò)(CNN)。我們的模型通過預(yù)測(cè)語法規(guī)則來生成程序編程語言;我們?cè)O(shè)計(jì)了多個(gè) CNN 模塊,包括基于樹的卷積和預(yù)卷積,其信息將由專門的參與者進(jìn)一步匯總-活動(dòng)池層?!稜t石傳說》的實(shí)驗(yàn)結(jié)果基準(zhǔn)數(shù)據(jù)集顯示,我們的 CNN 代碼生成器明顯比以前的最新方法高 5 個(gè)百分比;在幾個(gè)語義解析任務(wù)上的其他實(shí)驗(yàn)證明了我們模型的魯棒性。我們還進(jìn)行深入的消融測(cè)試,以更好地了解每個(gè)模型的組成部分。

介紹

根據(jù)自然語言描述生成代碼是一種人工智能中艱巨而艱巨的任務(wù)。對(duì) var-應(yīng)用程序。例如,程序員想在 Python 中“打開文件,F(xiàn)1”,但不知道如何用編程語言來實(shí)現(xiàn),他可以獲得目標(biāo)代碼“f=open('F1','r')”通過代碼生成。隨著深度學(xué)習(xí)的繁榮,編解碼器框架成為流行的序列生成方法聯(lián)盟。特別是遞歸神經(jīng)網(wǎng)絡(luò)(RNN)通常用作編碼器和解碼器;這樣的建筑師也稱為序列到序列(Seq2Seq)模型。當(dāng)應(yīng)用于代碼生成,它將程序描述作為輸入放置序列并生成所需的代碼作為輸出序列。

在深度學(xué)習(xí)社區(qū)中,研究人員正在展示對(duì)使用卷積神經(jīng)網(wǎng)絡(luò)的興趣日益濃厚(CNN)作為解碼器,因?yàn)樗男矢咔胰菀子?xùn)練的精神。我們進(jìn)一步觀察到,一個(gè)程序大于自然語言的句子,而 RNN 則是即使有很長(zhǎng)的短期記憶。相反,CNN 能夠有效地捕獲不同位置的特征通過滑動(dòng)窗口區(qū)域。

為此,我們提出了一種基于語法的結(jié)構(gòu) CNN 用于代碼生成。我們的模型通過 AST 中的語法構(gòu)造規(guī)則,例如 If→exprstmtstmt,遵循我們之前的框架工作。由于子節(jié)點(diǎn)的順序是通過一個(gè)預(yù)測(cè)步驟生成的,它可以使更多的契約預(yù)測(cè)比逐 token 生成。其他換句話說,我們的模型會(huì)預(yù)測(cè)語法規(guī)則的順序,最終形成一個(gè)完整的程序。

在我們的方法中,語法規(guī)則的預(yù)測(cè)是主要基于三種類型的信息:指定要生成的程序的頻率先前預(yù)測(cè)的語法規(guī)則,以及部分 AST 已生成。在這里,前一個(gè)是編碼器。后兩者使模型能夠自回歸解碼器,并且像往常一樣,解碼器還取決于編碼器。我們?yōu)榻Y(jié)構(gòu)設(shè)計(jì)了幾個(gè)不同的組件適用于程序生成的 CNN:(1)我們首先采用應(yīng)用滑動(dòng)窗口的基于樹的卷積思想在 AST 結(jié)構(gòu)上。然后我們?cè)O(shè)計(jì)另一個(gè) CNN 模塊,用于對(duì)節(jié)點(diǎn)中的節(jié)點(diǎn)進(jìn)行遍歷部分 AST。這兩種 CNN 捕獲鄰居-不僅在序列中而且在樹中獲取信息結(jié)構(gòu)體。(2)為了增強(qiáng)“自回歸”,我們應(yīng)用了-其他 CNN 模塊到要生成的節(jié)點(diǎn)的祖先安裝,因此網(wǎng)絡(luò)知道在哪里生成在某個(gè)步驟。(3)我們?cè)O(shè)計(jì)了一個(gè)專心的集中池聚合與 CNN 互動(dòng)的機(jī)制不同的神經(jīng)模塊。特別是,我們發(fā)現(xiàn)它對(duì)考慮范圍名稱(例如,函數(shù)和方法名稱)在代碼生成過程中,請(qǐng)使用諸如幾個(gè)細(xì)心的池化層的 troller。

我們根據(jù)既定基準(zhǔn)進(jìn)行了實(shí)驗(yàn)數(shù)據(jù)集《爐石傳說》,用于 python 代碼生成。實(shí)驗(yàn)結(jié)果表明,我們基于 CNN 代碼生成器的性能優(yōu)于以前的 RNN 方法很大程度上。我們?cè)趦蓚€(gè)方面進(jìn)一步評(píng)估了我們的方法 Mantic 解析任務(wù),其中目標(biāo)程序較短比《爐石傳說》;我們的方法也取得了可比性結(jié)果與先前的最新方法一致,表明我們方法的魯棒性。我們進(jìn)行了廣泛的消融測(cè)試,表明我們基于語法的結(jié)構(gòu)設(shè)計(jì) CNN 比單純使用 CNN 更好。

模型

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

圖 2 顯示了我們網(wǎng)絡(luò)的整體結(jié)構(gòu)。我們會(huì)首先描述基于語法的代碼生成過程,然后詳細(xì)介紹每個(gè)模塊。

基于語法的代碼生成

對(duì)于程序說明的輸入,我們的任務(wù)是生成一個(gè)符合描述的一段可執(zhí)行代碼。在傳統(tǒng)的 Seq2Seq 模型中,可以表示一個(gè)程序作為 token 序列 x1,x2,···,xT,這些 token 是按順序生成。

另外,有效的程序可以用抽象語法樹(AST)。葉節(jié)點(diǎn)是表示為 x 終端的符號(hào),x1,x2,···,xT。非葉節(jié)點(diǎn)是非終端符號(hào) n1,···,nN,每個(gè)表示程序的抽象組件(例如,If 塊)。此外,子節(jié)點(diǎn) n1,···,nk 源自它們的父節(jié)點(diǎn) p 是通過應(yīng)用一些語法規(guī)則 r 獲得的,表示為 p→n1···nk。在我們的工作中,不同的葉子節(jié)點(diǎn)用戶定義的變量被視為單獨(dú)的語法通過檢查訓(xùn)練集來確定規(guī)則。我們以深度優(yōu)先的順序遍歷樹,對(duì)于首先遇到非終結(jié)符,我們預(yù)測(cè)什么規(guī)則應(yīng)該用來擴(kuò)展它。換句話說,概率程序的分解為

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

盡管典型的編程語言包含更多內(nèi)容語法規(guī)則比不同的 AST 節(jié)點(diǎn)多,基于語法生成更加緊湊,因?yàn)樽庸?jié)點(diǎn) c1,···,ck 通過對(duì)規(guī)則的單個(gè)預(yù)測(cè)而就位 p→c1···ck。而且,生成的程序保證在語法上正確。在本節(jié)的其余部分,我們將介紹 CNN 編碼器-解碼器模型,用于預(yù)測(cè)語法規(guī)則。

輸入的 CNN

我們模型的輸入是一段描述,它指定要生成的程序。用于卡片的代碼生成在《爐石傳說》中,輸入是半結(jié)構(gòu)化數(shù)據(jù),包含圖示卡片的名稱,屬性和說明在圖 4 中。對(duì)于其他任務(wù),例如語義解析,則輸入可能是自然的量詞句。

形式上,提取的特征可以被計(jì)算

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

其中,W(enc,l)是編碼器的卷積權(quán)重 CNN,s 由 s=(k−1)/2 計(jì)算,k 是窗口大小(在我們的實(shí)驗(yàn)中設(shè)置為 2),并且 l=1,···,L 表示 CNN 的深層。特別是 y(enc,0)是輸入嵌入 x(enc)。c(enc,l)=1 表示偶數(shù)層,0 表示奇數(shù)層層,指示是否存在以下快捷方式連接這一層。對(duì)于第一個(gè)和最后幾個(gè)詞,我們執(zhí)行零填充。

預(yù)測(cè)規(guī)則的 CNN

我們跟蹤所有之前的規(guī)則,并建立一個(gè)深度神經(jīng)網(wǎng)絡(luò)來提取此類信息信息。

令 r1,...,rn-1 為先前預(yù)測(cè)的規(guī)則。我們將它們嵌入為實(shí)值向量 r1,···,rn-1,其中嵌入是隨機(jī)初始化的,可以通過反向?qū)W習(xí)傳播。我們應(yīng)用帶有快捷方式連接的深層 CNN 模塊規(guī)則嵌入 r1,···,rn-1 的注釋,提取特征 y。

預(yù)測(cè)的語法規(guī)則完全指定生成的(部分)程序以緊湊的方式,這是有益的用于精確的代碼生成。

但是,僅向解碼器提供預(yù)規(guī)定的自回歸規(guī)則,因?yàn)樗鼈儧]有提供該程序的具體/圖片視圖。為了減輕這個(gè)問題,我們?cè)鰪?qiáng)了解碼器部分 AST,如下所述。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

部分 AST 的 CNN

我們?cè)O(shè)計(jì)了一個(gè)深層的 CNN 模塊來捕獲 AST 的結(jié)構(gòu),文化信息。它包含基于樹的卷積層,預(yù)遍歷遍歷卷積層以及樹狀路徑 CNN 子模塊,通知網(wǎng)絡(luò)何處下一個(gè)語法規(guī)則被應(yīng)用。

基于樹的 CNN。我們首先將基于樹的 CNN 應(yīng)用于部分 AST。主要是設(shè)計(jì)一個(gè)固定深度的局部特征檢測(cè)器,在樹上滑動(dòng)以提取結(jié)構(gòu)特征?;跇涞?CNN 的輸入是具有以下內(nèi)容的部分 AST:生成后,每個(gè)節(jié)點(diǎn)都由嵌入表示。我們也把一個(gè)占位符的節(jié)點(diǎn)至指示在哪里應(yīng)用下一個(gè)語法規(guī)則。

假設(shè)節(jié)點(diǎn) n 有一個(gè)父節(jié)點(diǎn) p 和一個(gè)祖先節(jié)點(diǎn) g。然后基于樹的 CNN 提取特征可以被計(jì)算為

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

其中 W(ast)是基于樹的卷積 ker-內(nèi)爾。我們?yōu)榍皟蓚€(gè)節(jié)點(diǎn)填充特殊 token 沒有父母和/或祖父母的圖層。

基于樹的卷積,因?yàn)槲覀冇幸粋€(gè)更深的窗口,但沒有考慮同級(jí)信息。這是因?yàn)槲覀兊恼Z法-基于世代的人通過申請(qǐng)一次獲得所有兄弟姐妹-遵循一定的規(guī)則,因此,兄弟姐妹的重要性降低-比祖先更坦誠。不幸的是,深度會(huì)成倍增長(zhǎng),而深度會(huì)變小易處理,而我們的基于樹的 CNN 變體會(huì)線性增長(zhǎng)早。在卷積計(jì)算方面,我們采用類似感知器的互動(dòng)方式?;谏疃葮涞木矸e和快捷方式連接,如 ResNet 可以作為未來的工作來探索。

前序遍歷 CNN。獲得一組通過基于樹的 CNN 提取的向量,我們應(yīng)用了預(yù)輸入 y(ast)進(jìn)行遍歷卷積。也就是說,AST 節(jié)點(diǎn)是按照預(yù)先遍歷順序。

可以證明,簡(jiǎn)單的預(yù)遍歷不是可以反轉(zhuǎn)為樹結(jié)構(gòu),即不同的樹結(jié)構(gòu)可能產(chǎn)生相同的序列。為了解決這個(gè)問題,我們?cè)陬A(yù)購遍歷期間跟蹤回溯跟蹤。T 是節(jié)點(diǎn)中的節(jié)點(diǎn)數(shù) AST 和帶回溯的預(yù)遍歷可產(chǎn)生 2S 輸入單位。

請(qǐng)注意,基于樹的 CNN 和順序遍歷 CNN 捕獲不同的信息。預(yù)購遍歷產(chǎn)生的順序可解決順序鄰居生成期間 AST 節(jié)點(diǎn)的引擎蓋,而基于樹卷積可為以下節(jié)點(diǎn)提供信息融合在結(jié)構(gòu)上相鄰。在圖 3 中,例如,節(jié)點(diǎn) n4 是 n2 的子節(jié)點(diǎn)。但是,生成后有些程序的其他部分(即 n3 和 n6),節(jié)點(diǎn) n2 和 n4 不再彼此靠近?;跇涞木矸e直接為節(jié)點(diǎn)及其節(jié)點(diǎn)構(gòu)建特征提取器祖先實(shí)現(xiàn)他們的互動(dòng)。因此,我們相信這兩類 CNN 互為補(bǔ)充。

樹路徑 CNN。我們應(yīng)該只考慮以上 CNN,該模型很難說出位置應(yīng)用下一個(gè)語法規(guī)則的位置。例如,基于樹的 CNN 和預(yù)先遍歷的 CNN 如果我們將圖 3 中的 n4 或 n5 展開,將產(chǎn)生非常相似的特征,盡管有占位符,但我們還是為預(yù)購 CNN 引入了占位符。從技術(shù)上講,如果我們遵循最左邊的推導(dǎo),那么應(yīng)用下一條規(guī)則的位置將是明確的。但是這樣線索太隱含,應(yīng)該更明確地建模。因此,我們提取了從根到節(jié)點(diǎn)的路徑,以 d 例如,如果我們要擴(kuò)展 n4,則路徑應(yīng)該是 n1,n2,n4。我們稱這種樹路徑卷積。

集合和注意機(jī)制

CNN 提取與尺寸或形狀相同的一組特征輸入。為了促進(jìn)用于代碼生成的 softmax 預(yù)測(cè),我們需要將信息匯總到一個(gè)或幾個(gè)固定的大小向量,與輸入大小無關(guān)。

傳統(tǒng)上,人使用最高匯集對(duì)于 CNN 以及基于樹的 CNN。但是,這使得潛在的 CNN 模塊分離且無法通信在信息聚合過程中。因此,我們納入了 CNN 的關(guān)注機(jī)制池。本質(zhì)上,注意機(jī)制計(jì)算候選集的加權(quán)和功能(由 CNN 提取),其中權(quán)重由由控制向量放置(例如,最大池另一個(gè) CNN 模塊的向量)。形式上,給定一個(gè)控制向量 c 和一組候選卷積特征 y1,···,yD 通過一個(gè) CNN 模塊(D 是特征向量的數(shù)量)。

將這樣一個(gè)細(xì)心的池化層應(yīng)用于我們的底層 CNN,我們將一些關(guān)鍵信息視為控制權(quán)-向量。(1)輸入描述指定程序生成,然后用它來控制語法規(guī)則 CNN 和樹路徑 CNN。特別是,我們應(yīng)用最大池層將輸入的 CNN 功能匯總為固定大小控制向量,用于計(jì)算注意力樹路徑 CNN 的權(quán)重和預(yù)測(cè)語法規(guī)則。(2)我們注意到作用域名稱(即函數(shù)名稱或方法名稱)提供照明信息關(guān)于它的后代。此類信息未被捕獲 AST 節(jié)點(diǎn)類型,因此我們將范圍名稱嵌入為向量并使用它來控制預(yù)遍歷 CNN 和輸入的 CNN。應(yīng)該注意的是,如果當(dāng)前程序段位于兩個(gè)或多個(gè)范圍內(nèi)(一個(gè)函數(shù)和一個(gè)方法),我們僅將最接近的范圍視為曳向量。如果代碼段不屬于任何函數(shù)或類,然后將范圍嵌入設(shè)置為零向量。除了針對(duì)基于樹的層級(jí),將另一個(gè)最大池化層應(yīng)用于預(yù)訂遍歷 CNN 功能。我們的經(jīng)驗(yàn)發(fā)現(xiàn)這是因?yàn)榭刂品秶鷥?nèi)的嵌入使相應(yīng)的 AST 節(jié)點(diǎn)的注意力也達(dá)到最高峰,匯總信息不足。盡管控制向量,另一個(gè)最大池-信息層也可以保留更多信息。

我們還要指出的是,注意機(jī)制設(shè)計(jì)的選擇及其含義在具有多個(gè)神經(jīng)網(wǎng)絡(luò)的深層神經(jīng)網(wǎng)絡(luò)中拖曳連接模塊。例如,我們最好將 CNN 用于遵循以下控制原則把所有其他模塊的輸入在編碼器-解碼器框架。但是,我們的初步實(shí)驗(yàn)表明,這樣的設(shè)計(jì)產(chǎn)生了更低的性能,因此我們采用了當(dāng)前的體系結(jié)構(gòu)。

訓(xùn)練和推論

我們將所有最大池化層和激活池化層連接在一起。它們被輸入到兩層感知器,最后一個(gè)層具有 softmax 激活函數(shù),可預(yù)測(cè)下一個(gè)語法規(guī)則。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

我們的模型是通過針對(duì)地面程序。由于我們的整個(gè)模型是不同的可靠,所有參數(shù)都是通過基于梯度的更新來學(xué)習(xí)的。

為了進(jìn)行推斷,我們尋求一系列的語法規(guī)則,最大化以輸入為條件的概率。遞歸如果規(guī)則中的每個(gè)葉子節(jié)點(diǎn)都終止了對(duì)規(guī)則的密集預(yù)測(cè)(部分)樹是終端符號(hào)。我們使用光束搜索近似于全局推斷,并且波束大小為 5in 我們的實(shí)驗(yàn)。特定節(jié)點(diǎn)類型的無效規(guī)則是推理期間不考慮。例如,p2→c1c2,如果 p1 不等于 p2,則不能應(yīng)用于節(jié)點(diǎn) p1。

評(píng)估

在本部分中,我們介紹了 CNN 的實(shí)驗(yàn)結(jié)果基于代碼的生成。我們?cè)趦蓚€(gè)方面評(píng)估了我們的方法任務(wù):(1)用 Python 代碼生成《爐石傳說》游戲,以及(2)用于生成可執(zhí)行邏輯表單語義解析。

實(shí)驗(yàn)一《爐石傳說》代碼生成

數(shù)據(jù)集。我們的第一個(gè)實(shí)驗(yàn)基于建立基準(zhǔn)數(shù)據(jù)集《爐石傳說》。數(shù)據(jù)集包含 665 個(gè)不同的《爐石傳說》游戲;每個(gè)數(shù)據(jù)點(diǎn)的輸入都是半字段的結(jié)構(gòu)化描述,例如卡名,費(fèi)用,攻擊,描述和其他屬性;輸出是可實(shí)現(xiàn)以下功能的 Python 代碼段。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

指標(biāo)。表 2 中的《爐石傳說》列列出了相關(guān)的數(shù)據(jù)集的統(tǒng)計(jì)信息。指標(biāo)。我們通過準(zhǔn)確性評(píng)估了我們的方法,BLEU 得分。理想情況下,精度應(yīng)計(jì)入分?jǐn)?shù)功能上正確的程序的位置,不幸的是不是圖靈可計(jì)算的。我們還發(fā)現(xiàn),幾個(gè)生成的程序使用不同的變量名稱,但實(shí)現(xiàn)了正確的功能,并且有時(shí)函數(shù)調(diào)用中的參數(shù)名稱是或未指定。雖然與參考程序不同,但經(jīng)過人工檢查,它們顯然是正確的程序,我們用 Acc 表示人為調(diào)整的精度。在這里,我們沒有執(zhí)行非 ob 檢查算法的 Vious 替代實(shí)現(xiàn),因此 Acc 仍然是功能精度的下界。

生成的代碼的質(zhì)量由 BLEU 評(píng)分作為輔助度量進(jìn)一步評(píng)估,該度量計(jì)算生成的代碼與地面真相代碼的接近程度。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

總體結(jié)果。表 3 列出了我們的 CNN-基于代碼的生成,與之前的狀態(tài)相比最先進(jìn)的模型:(1)潛在預(yù)測(cè)網(wǎng)絡(luò),一種增強(qiáng)的序列到序列模型,具有多個(gè) token 級(jí)別的預(yù)測(cè)器;(2)SEQ2TREE,基于 AST 的序列到序列模型;(3)句法神經(jīng)模型,基于 AST 結(jié)構(gòu)的 LSTM 解碼器;和(4)Abstract 語法網(wǎng)絡(luò),另一個(gè)基于 AST 的序列到序列模型,它建立了兩個(gè) LSTM 水平預(yù)測(cè)規(guī)則和垂直方向。如圖所示,我們的模型優(yōu)于之前的所有結(jié)果準(zhǔn)確性和 BLEU 分?jǐn)?shù)。特別是,我們的準(zhǔn)確性大大高于以前的狀態(tài)弦樂方面的最新成果大約降低了 5 個(gè)百分點(diǎn)。生成的代碼示例。

準(zhǔn)確性。對(duì)于人工調(diào)整的精度(Acc+),報(bào)告顯示,在我們的場(chǎng)景中觀察到類似的現(xiàn)象,并且我們的 Acc+得分達(dá)到了 30.3%,表明我們的方法具有有效性。我們發(fā)現(xiàn)一個(gè)有趣的事實(shí),即先前的幾種方法可以達(dá)到與我們的方法類似的 BLEU 分?jǐn)?shù),但是精度要低得多。例如,ASN 模型 BLEU 分?jǐn)?shù)為 79.2,與我們的 79.6 分相當(dāng)模型。但是,ASN 只能達(dá)到 22.7%的字符串精度,而我們的是 27.3%。這是因?yàn)?BLEU 指標(biāo)僅測(cè)量程序的相似度。預(yù)先以前的方法(例如 ASN)似乎可以生成合理的代碼,實(shí)際上在細(xì)節(jié)上是不正確的。因此,我們僅考慮 BLEU 得分(在之前的作品)作為次要指標(biāo)。主要指標(biāo)即準(zhǔn)確性,表明我們的方法產(chǎn)生了更多的交流策劃程序比以前的模型。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

消融測(cè)試。我們進(jìn)行了廣泛的消融測(cè)試分析每個(gè)組成部分的貢獻(xiàn)。雖然我們網(wǎng)絡(luò)的發(fā)展從簡(jiǎn)單的基準(zhǔn)開始然后我們逐步添加了有用的組件,相對(duì)測(cè)試是以相反的方式進(jìn)行的:它從完整的模型,我們要么刪除了一個(gè)組件或用一些合理的替代品。我們?cè)诒? 4 中報(bào)告了消融測(cè)試的結(jié)果。

我們首先通過替代 CNN 來分析 CNN 的效果基于 LSTM 的 RNN 的組件。自從主要信息在于部分 AST 中顯示的年齡,而不是預(yù)測(cè)語法規(guī)則中,我們僅將預(yù)遍歷 CNN 替換為 LSTM 在此對(duì)照實(shí)驗(yàn)中。RNN 應(yīng)用于如此長(zhǎng)的序列可能很難訓(xùn)練,實(shí)現(xiàn)顯著惡化性能。

我們還分析了模型的其他組成部分,包括為 CNN 預(yù)測(cè)規(guī)則,基于樹的卷積常規(guī)層,樹路徑卷積,池化層機(jī)制,以及合并的范圍控制器。我們看到上述每個(gè)組件都包含以自己的方式為整個(gè)模型做出貢獻(xiàn),準(zhǔn)確度提高了 3–6%。這些結(jié)果表明我們有設(shè)計(jì)了神經(jīng)體系結(jié)構(gòu)的合理組成部分,適合于代碼生成任務(wù)。

實(shí)驗(yàn)二

數(shù)據(jù)集和設(shè)置。語義解析旨在生成邏輯形式給出自然語言描述。它可以被認(rèn)為是針對(duì)特定領(lǐng)域的代碼生成,因?yàn)檫壿嬓问绞强蓤?zhí)行文件,所以一種正式語言。但是,語義解析的樣式與 python 代碼生成明顯不同。自從我們模型主要是在《爐石傳說》數(shù)據(jù)集上開發(fā)的,該實(shí)驗(yàn)用作對(duì)泛化性的附加評(píng)估我們的模型。

我們?cè)趦蓚€(gè)語義解析數(shù)據(jù)集上評(píng)估了我們的模型,其中輸入的是自然語言句子。ATIS 的輸出是 λ 微積分形式,而對(duì)于 JOBS,它采用 Prolog 樣式。從表 2 的統(tǒng)計(jì)數(shù)據(jù)可以看出語義解析的邏輯形式包含節(jié)點(diǎn)少于《爐石傳說》Python 代碼。

我們采用了與《爐石傳說》基本相同的網(wǎng)絡(luò)層進(jìn)行語義解析。網(wǎng)絡(luò)層數(shù)是 7。我們沒有建立一個(gè)單獨(dú)的不同的節(jié)點(diǎn)類型的網(wǎng)絡(luò),因?yàn)槲覀兊木W(wǎng)絡(luò)容易對(duì)于如此小的數(shù)據(jù)集過擬合。此外,我們介紹了指針網(wǎng)絡(luò)進(jìn)行復(fù)制變量名稱。

結(jié)果。我們通過準(zhǔn)確性來評(píng)估我們的方法。它計(jì)算精確匹配的分?jǐn)?shù),除了我們調(diào)整連接和分離子句的順序以避免虛假錯(cuò)誤,就像以前的所有工作一樣。我們沒有測(cè)量 BLEU,因?yàn)樗鼪]有用于現(xiàn)有的研究。

 

用于代碼生成的基于語法的結(jié)構(gòu) CNN 解碼器

表 5 顯示了我們模型的性能。我們還看到我們基于語法的結(jié)構(gòu) CNN 編碼器可達(dá)到與最新的神經(jīng)網(wǎng)絡(luò)相似的結(jié)果拉爾模型。還應(yīng)該指出,在語義上解析,我們無法像《爐石傳說》代碼生成。這可能是因?yàn)檎Z義解析的邏輯形式通常很短,包含像《爐石傳說》中一樣只處理 1/4–1/3 個(gè) token,因此 RNN 和 CNN 適合生成邏輯表格。這個(gè)實(shí)驗(yàn)提供了泛化的其他證據(jù),自從我們創(chuàng)建 CNN 代碼以來,我們的能力和靈活性模型基本上是為長(zhǎng)程序設(shè)計(jì)的(例如《爐石傳說》)但也可以與語義解析一起很好地工作。

結(jié)論

在本文中,我們提出了一種基于語法的結(jié)構(gòu) CNN 用于代碼生成。我們的模型利用了抽象程序的語法樹(AST),并通過規(guī)定語法規(guī)則。我們解決了基于 RNN 的傳統(tǒng)方法可能不適合于克生成,可能是由于大量的程序中的 kens/nodes。因此,我們?cè)O(shè)計(jì)了 CNN 編碼器-基于 AST 結(jié)構(gòu)的解碼器模型。我們?cè)凇稜t石傳說》數(shù)據(jù)集上的主要實(shí)驗(yàn)顯示我們?nèi)〉昧吮纫郧暗幕?RNN 的方法。的其他實(shí)驗(yàn)兩個(gè)語義解析任務(wù)證明了魯棒性我們的方法。我們還進(jìn)行了深度消融測(cè)試,以驗(yàn)證模型中每個(gè)組件的有效性。

致謝

本文由南京大學(xué)軟件學(xué)院 iSE 實(shí)驗(yàn)室 2020 級(jí)碩士研究生張晶翻譯轉(zhuǎn)述。

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2020-11-12 18:53:34

代碼Transformer編程

2009-12-14 13:37:52

linuxFedora播放器

2009-12-15 15:00:00

Fedora Linu

2021-08-03 08:38:21

Netty解碼器使用

2017-03-21 07:54:43

解碼器軟件程序

2020-12-22 07:58:46

Netty編碼器解碼器

2009-05-15 09:02:03

Windows 7微軟操作系統(tǒng)

2022-10-10 10:38:22

FedoraopenSUSE視頻編解碼

2012-01-05 16:20:22

愛普生大幅面打印機(jī)

2024-07-05 08:27:07

2009-06-01 09:09:09

2022-05-12 10:26:57

解碼器Linux

2020-09-17 12:40:54

神經(jīng)網(wǎng)絡(luò)CNN機(jī)器學(xué)習(xí)

2020-02-19 19:15:27

UbuntuLinux媒體編解碼器

2021-07-13 09:27:20

AI 解碼視頻

2023-06-25 10:01:29

2022-10-14 16:44:48

新詞發(fā)現(xiàn)全卷積網(wǎng)絡(luò)模型算法

2025-04-15 08:21:08

2022-02-15 21:42:23

嵌入式系統(tǒng)音頻編解碼器開發(fā)

2021-04-22 11:21:03

Windows 10Windows微軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)