RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編程神技來了!谷歌新研究根據(jù)已經(jīng)編輯好的代碼預(yù)測源代碼的 AI

5dy6_dushekeji ? 來源:YXQ ? 2019-04-18 15:47 ? 次閱讀

預(yù)測源代碼,聽著就是一件非常炫酷的事情。最近,谷歌大腦的研究人員就對此高難度任務(wù)發(fā)起了挑戰(zhàn),在構(gòu)建源代碼生成模型上實現(xiàn)了新突破!

編程神技來了!

根據(jù)已經(jīng)編輯好的代碼預(yù)測源代碼的AI,對程序員來說是一個非常寶貴的工具。

最近,谷歌大腦團隊就對這項難度頗高的任務(wù)發(fā)起了挑戰(zhàn)。

論文地址:

https://arxiv.org/pdf/1904.02818.pdf

改代碼是程序員經(jīng)常要做的事,需求一變,甚至可能要重頭再來。然而,編輯模式(edit pattern)是無法僅僅根據(jù)要插入/刪除的內(nèi)容或者寫好內(nèi)容后的代碼狀態(tài)來被理解。

它需要根據(jù)變化與其所處狀態(tài)的關(guān)系來理解,準確地對代碼序列進行建模需要學(xué)習(xí)舊代碼的表示方法,這就允許模型可以概括一種模式且對未來要編寫的代碼內(nèi)容進行預(yù)測。

舉個例子:

有兩個歷史記錄A和B,這兩段代碼序列在經(jīng)過2次編輯后,得到了相同狀態(tài),即“狀態(tài)2”。但是在這個過程當中,歷史記錄A是在向foo函數(shù)添加參數(shù),而歷史記錄B是在從foo函數(shù)中刪除參數(shù)。

這項工作,就是希望根據(jù)“狀態(tài)0”和“編輯 1&2 ”,可以預(yù)測接下來“編輯3”的操作內(nèi)容。

為了達到這個目的,他們首先開發(fā)了兩種表示方法來捕獲意圖信息,這些信息將隨著代碼序列的長度“優(yōu)雅地”擴展:

顯式表示方法:在序列中“實例化”代碼內(nèi)容;

隱式表示方法:用于實例化后續(xù)要編寫的代碼。

然后它們構(gòu)建了一個機器學(xué)習(xí)模型,這個模型可以捕獲原始代碼和預(yù)測代碼之間的上下文關(guān)系。

構(gòu)建源代碼生成模型新突破

近年來,構(gòu)建源代碼的生成模型成為十分受重視的核心任務(wù)。

然而,以前的生成模型總是根據(jù)生成代碼的靜態(tài)快照(static snapshot)來構(gòu)建的。而在這項工作中,研究人員將源代碼視為一個動態(tài)對象(dynamic object),并處理軟件開發(fā)人員對源代碼文件進行編輯的建模問題。

對編輯序列建模的主要挑戰(zhàn)是如何開發(fā)良好的表示,既能捕獲有關(guān)意圖的所需信息,又能優(yōu)雅地對序列的長度進行擴展。

正如上述,這項工作主要考慮編輯的兩種表示方法,一是顯式表示方法,二是隱式表示方法。

顯式表示方法中,將分層循環(huán)指針網(wǎng)絡(luò)模型視為強大但計算成本較高的基線。在隱式表示方法中,考慮一個vanilla序列到序列模型,以及一個基于注意力的雙頭模型。這些模型展示了由不同問題公式產(chǎn)生的權(quán)衡,并為未來的編輯序列模型提供設(shè)計決策。

在精心設(shè)計的合成數(shù)據(jù)和對Python源代碼進行細粒度編輯的大型數(shù)據(jù)集上,研究人員評估了模型的可伸縮性和準確性,以及模型觀察以往編輯序列并預(yù)測未來編輯內(nèi)容的能力。

實驗表明,雙頭注意力模型特別適合實現(xiàn)對真實數(shù)據(jù)的高精度、校準良好的置信度和良好的可擴展性。

總之,這項工作形式化了從編輯序列中學(xué)習(xí)和預(yù)測編輯序列的問題,提供了對模型空間的初步探索,并演示了從開發(fā)人員對源代碼進行的編輯中學(xué)習(xí)的實際問題的適用性。

問題定義:如何表示編輯序列數(shù)據(jù)

隱式和顯式數(shù)據(jù)表示

第一個問題是如何表示編輯序列數(shù)據(jù)。我們定義了兩種具有不同權(quán)衡的數(shù)據(jù)格式。

顯式格式 (圖 2 (a)) 將編輯序列表示為 2D 網(wǎng)格中 tokens 序列的序列。內(nèi)部序列對文件中的 tokens 建立索引,外部序列對時間建立索引。任務(wù)是消耗前 t 行并預(yù)測在時間 t 進行的編輯的位置和內(nèi)容。

隱式格式 (圖 2 (b)) 將初始狀態(tài)表示為 tokens 序列,將編輯表示為 (position, content) 對的序列。

圖 2:將 “BACA” 轉(zhuǎn)換為 “BABBCACC” 的編輯序列的顯式表示 (a) 和隱式表示 (b)。

問題描述

顯式問題的目標是學(xué)習(xí)一個模型,該模型使給定的可能性最大化;隱式問題是學(xué)習(xí)一個模型,該模型使給定所有 t 的的?

基線模型

基線顯式模型 (Baseline Explicit Model)

基線顯式模型是一個兩級長短時記憶 (LSTM) 神經(jīng)網(wǎng)絡(luò),類似于 Serban 等人 (2016) 的分層 RNN 模型。

基線隱式模型 (Baseline Implicit Model)

sequence-to-sequence 框架的自然應(yīng)用是使用編碼器的初始狀態(tài) s (0),并在解碼器中生成 (p (t) i, c (t)) 對的序列。編碼器是一個標準的 LSTM。解碼器不太標準,因為每個動作都是成對的。為了將對作為輸入處理,我們將 p (t) i 的嵌入與 c (t) 的嵌入連接起來。為了產(chǎn)生成對的輸出,我們先預(yù)測位置,然后給出給定位置的內(nèi)容。

隱式注意力模型

我們開發(fā)了一個模型,它對隱式表示進行操作,但是能夠更好地捕獲編輯內(nèi)容與編輯上下文之間關(guān)系的序列。

該模型深受 Vaswani 等人 (2017) 的啟發(fā)。在訓(xùn)練時,編輯的完整序列在單個前向傳遞中被預(yù)測。

有一個編碼器計算初始狀態(tài)和所有編輯的隱藏表示,然后有兩個 decoder heads:第一個解碼每個編輯的位置,第二個解碼給定位置的每個編輯的內(nèi)容。

圖 3 (b, c) 對模型的整體結(jié)構(gòu)進行了概述。

圖 3:(a) 基線顯式模型;(b, c) 隱式注意力模型

實驗和結(jié)果:模型可以解決幾乎所有任務(wù)

實驗的目的是了解上述模型的能力和局限性,并在實際數(shù)據(jù)上進行評估。

實驗有兩個主要因素,一是模型如何準確地學(xué)習(xí)識別編輯序列中的模式,二是模型如何擴展到大數(shù)據(jù)。

在第一組實驗中,我們在一個簡單的環(huán)境中研究了這些問題;在第二組實驗中,我們根據(jù)真實數(shù)據(jù)進行了評估。

本節(jié)中,我們評估了三種方法:顯式模型縮寫為 E,隱式 RNN 模型縮寫為 IR,隱式注意力模型縮寫為 IA。

表 1:在合成數(shù)據(jù)集上的準確性

表 1 報告了產(chǎn)生最佳開發(fā)性能的超參數(shù)設(shè)置和步驟的測試性能。結(jié)果表明,顯式模型和改進的隱式模型可以解決幾乎所有的任務(wù),甚至包括那些涉及元字符和相對較長的替換序列的任務(wù)。

圖 4:(a)-(c) 在訓(xùn)練期間處理序列所需的時間,跨越不同插入數(shù) (10,50,100) 的 n-gram 問題。(d) 當將預(yù)測限制在模型最有信心的上下文中時,實際數(shù)據(jù)集的 token 級精度。

如圖 4 (d) 所示,顯式模型始終比隱式模型成本更高,并且隨著數(shù)據(jù)大小的增加,這種差距也會增大。長度為 100 的插入序列比實際數(shù)據(jù)集中的序列小十倍,但在運行時已經(jīng)存在一個數(shù)量級的差異。注意力模型通常占隱式 RNN 模型的 50% ~ 75% 的時間。

結(jié)論和未來研究

在這項工作中,我們提出了從過去的編輯中學(xué)習(xí),以預(yù)測未來編輯的問題,開發(fā)了具有很強泛化能力的編輯序列模型,并證明了該方案對大規(guī)模源代碼編輯數(shù)據(jù)的適用性。

我們做了一個不切實際的假設(shè),即快照之間的編輯是按從左到右的順序執(zhí)行的。另一種值得探索的方案是,將其視為從弱監(jiān)督中學(xué)習(xí)??梢韵胂筮@樣一個公式,其中快照之間的編輯順序是一個潛在變量,必須在學(xué)習(xí)過程中推斷出來。

該研究有多種可能的應(yīng)用。在開發(fā)人員工具的背景中,我們特別感興趣的是調(diào)整過去的編輯以做出其他類型的預(yù)測。例如,我們還可以設(shè)置光標位置的條件,并研究如何使用編輯歷史來改進忽略編輯歷史的傳統(tǒng)自動完成系統(tǒng)。另一個例子是,根據(jù)開發(fā)人員最近的編輯,預(yù)測他們接下來會發(fā)出哪些代碼搜索查詢。一般來說,我們希望預(yù)測開發(fā)人員接下來要做的事情。我們認為,編輯歷史包含了重要的有用信息,在這項工作中提出的公式和模型是學(xué)習(xí)使用這些信息的良好起點。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6161

    瀏覽量

    105299
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3614

    瀏覽量

    93685

原文標題:程序員再也不怕需求改來改去!谷歌大腦新突破:AI預(yù)測源代碼

文章出處:【微信號:dushekeji,微信公眾號:毒舌科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    騰訊申請注冊“騰訊云AI代碼助手”商標

    致力于提升編程效率的智能工具。其主要功能包括代碼的智能補全和自動生成,旨在幫助開發(fā)者更加高效地進行編程工作。這款工具的出現(xiàn),標志著騰訊在人工智能和云計算領(lǐng)域的技術(shù)實力得到了進一步的提升。 值得注意的是,騰訊云
    的頭像 發(fā)表于 12-13 10:28 ?242次閱讀

    Gmapping源代碼

    Gmapping源代碼.docx
    發(fā)表于 11-16 13:42 ?0次下載

    谷歌發(fā)布安卓15源代碼,為開發(fā)者與Pixel用戶鋪就新路徑

    9月4日最新消息,谷歌公司已在昨日(9月3日)宣布了一項重要舉措,正式將安卓15的源代碼推送至安卓開源項目(AOSP),這一動作標志著安卓操作系統(tǒng)的又一次重要更新即將全面展開。谷歌同時透露,符合升級條件的Pixel設(shè)備將在接下來
    的頭像 發(fā)表于 09-04 15:40 ?658次閱讀

    hex可以轉(zhuǎn)成源代碼

    Hex文件可以轉(zhuǎn)換成源代碼的近似形式,但無法直接還原為原始的、完全相同的源代碼 。這是因為Hex文件是二進制文件,包含了程序編譯后的機器碼,這些機器碼與原始的源代碼在結(jié)構(gòu)和表達上存在顯著的差異。不過
    的頭像 發(fā)表于 09-02 10:41 ?973次閱讀

    探討AI編寫代碼技術(shù),以及提高代碼質(zhì)量的關(guān)鍵:靜態(tài)代碼分析工具Perforce Helix QAC & Klocwork

    令軟件開發(fā)人員夜不能寐的事情比比皆是。如今,他們最關(guān)心的問題不再是如何用自己喜歡的語言(C、C++、Erlang、Java 等)表達最新的算法,而是人工智能(AI)。 本文中,我們將介紹AI編寫代碼
    的頭像 發(fā)表于 06-05 14:10 ?395次閱讀

    企業(yè)如何保護源代碼安全?做好源代碼防泄密工作

    企業(yè)源代碼作為公司的核心資產(chǎn),對于很多初創(chuàng)團隊和中小型企業(yè)來說,具有不可估量的價值。然而,有些團隊在投入大量人力、物力和財力進行產(chǎn)品開發(fā)的過程中,卻發(fā)現(xiàn)自己辛苦研發(fā)的成果在還未上線之前,市面上已經(jīng)
    的頭像 發(fā)表于 05-22 16:01 ?451次閱讀

    【開源鴻蒙】下載OpenHarmony 4.1 Release源代碼

    本文介紹了如何下載開源鴻蒙(OpenHarmony)操作系統(tǒng) 4.1 Release版本的源代碼,該方法同樣可以用于下載OpenHarmony最新開發(fā)版本(master分支)或者4.0 Release、3.2 Release等發(fā)布版本的源代碼。
    的頭像 發(fā)表于 04-27 23:16 ?902次閱讀
    【開源鴻蒙】下載OpenHarmony 4.1 Release<b class='flag-5'>源代碼</b>

    谷歌發(fā)布用于輔助編程代碼大模型CodeGemma

    谷歌發(fā)布了用于輔助編程代碼大模型 CodeGemma。CodeGemma 基于谷歌今年 2 月發(fā)布的輕量級開源大模型 Gemma,針對 Gemma 的兩個不同參數(shù)規(guī)模的版本 Gemm
    的頭像 發(fā)表于 04-17 16:07 ?684次閱讀
    <b class='flag-5'>谷歌</b>發(fā)布用于輔助<b class='flag-5'>編程</b>的<b class='flag-5'>代碼</b>大模型CodeGemma

    AI代碼助手,企業(yè)軟件工程未來主流工具

    AI代碼助手不僅能自動生成和完善代碼,更是一位高效的協(xié)作伙伴,通過激發(fā)創(chuàng)新思維和提升代碼質(zhì)量,助力開發(fā)者提升效率,進一步提升其技術(shù)水平和對各類編程
    的頭像 發(fā)表于 04-12 15:58 ?412次閱讀

    阿里云內(nèi)部全面推行AI代碼

    阿里云正在內(nèi)部全面推行 AI 編程,使用通義靈碼輔助程序員寫代碼、讀代碼、查 BUG、優(yōu)化代碼等。
    的頭像 發(fā)表于 04-07 09:22 ?557次閱讀

    谷歌升級Bard AI聊天機器人為Gemini,新增Python代碼編輯功能

     此外,谷歌表示,接下來數(shù)個月內(nèi),Gemini Advanced 計劃會加入更多新功能,如支持更為詳盡的上下文信息、增強多模態(tài)交互性以及完善編程功能。據(jù)谷歌公開更新,付費用戶可用 Gemini 界面直接
    的頭像 發(fā)表于 02-20 15:47 ?577次閱讀

    數(shù)控編程的g功能代碼是什么

    數(shù)控編程中,G代碼(也稱為指令代碼)是一種用于控制數(shù)控機床運動、輔助功能和工作過程的指令。在數(shù)控編程中,通過一系列的G代碼指令的組合和排列,
    的頭像 發(fā)表于 02-14 15:51 ?3937次閱讀

    【國產(chǎn)FPGA+OMAPL138開發(fā)板體驗】(原創(chuàng))5.FPGA的AI加速源代碼

    在這里逐行詳細解釋。不過,我可以寫一個以卷積神經(jīng)網(wǎng)絡(luò)(CNN)中的卷積層源代碼: -- 喲吼,我們正在為FPGA打造一款“智能像素畫家”! entity AI_Accelerator is Port
    發(fā)表于 02-12 16:18

    源代碼審計怎么做?有哪些常用工具

    源代碼審計是一種通過檢查源代碼來發(fā)現(xiàn)潛在的安全漏洞的方法。 下面是常用的源代碼審計工具: 1、Fortify:通過內(nèi)置的五大主要分析引擎,對源代碼進行靜態(tài)分析,并與特有的軟件安全漏洞規(guī)
    發(fā)表于 01-17 09:35

    智能制造行業(yè)--客戶現(xiàn)場調(diào)試源代碼如何防泄密

    的困難,因為源代碼研發(fā)員工在工作過程中有一個版本管理服務(wù)器,這個不能完全禁止,也不能完全開放。安秉信息源代碼防泄密方案在前幾期已經(jīng)詳細的介紹過,可以很好的幫助企業(yè)做
    的頭像 發(fā)表于 01-11 16:27 ?488次閱讀
    智能制造行業(yè)--客戶現(xiàn)場調(diào)試<b class='flag-5'>源代碼</b>如何防泄密
    RM新时代网站-首页