在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

新的深度神經(jīng)網(wǎng)絡(luò)模型命名為CODEnn

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-07-13 09:16 ? 次閱讀

在軟件開發(fā)過程中,經(jīng)常需要進行代碼搜索。然而,現(xiàn)有的代碼搜索方法大都將代碼視作文本,依賴源代碼和自然語言查詢的文本相似性。由于缺乏對查詢和源代碼的語義的理解,在某些場景下,無法返回期望的結(jié)果。

例如,下面這段代碼讀取xml文檔:

publicstatic < S > S deserialize(Class c, File xml) {

try {

JAXBContext context = JAXBContext.newInstance(c);

Unmarshaller unmarshaller = context.createUnmarshaller();

S deserialized = (S) unmarshaller.unmarshal(xml);

return deserialized;

} catch (JAXBException ex) {

log.error("Error-deserializing-object-from-XML", ex);

returnnull;

}

}

然而,由于代碼中并不包含“讀取”(read)一詞,因此現(xiàn)存的方法可能無法成功返回這一代碼片段。

有鑒于此,HKUST和微軟研究院的研究人員顧小東、Hongyu Zhang、Sunghun Kim最近發(fā)表論文,使用深度神經(jīng)網(wǎng)絡(luò),學(xué)習(xí)源代碼和自然語言查詢的統(tǒng)一向量表示,以支持代碼語義搜索。

CODEnn

研究人員將其新提出的深度神經(jīng)網(wǎng)絡(luò)模型命名為CODEnn(Code-Description Embedding Neural Network,代碼-描述嵌入神經(jīng)網(wǎng)絡(luò))。CODEnn的主要思路是將代碼片段和自然語言查詢聯(lián)合嵌入一個統(tǒng)一的向量空間,使查詢嵌入和相應(yīng)的代碼片段嵌入為相近的向量(可以通過向量相似度匹配)。

聯(lián)合嵌入

首先讓我們簡單溫習(xí)一下聯(lián)合嵌入的概念。

聯(lián)合嵌入(joint embedding),又稱多模態(tài)嵌入(multi-modal embedding),可以將異構(gòu)數(shù)據(jù)嵌入統(tǒng)一的向量空間,使得模態(tài)不同而語義相似的概念在空間中占據(jù)相近區(qū)域。形式化地表述為:

其中,φ、ψ為嵌入函數(shù),J衡量相似度。

在CODEnn中,φ為源代碼嵌入網(wǎng)絡(luò)(CoNN),ψ為自然語言描述嵌入網(wǎng)絡(luò)(DeNN),J為余弦相似度。

具體架構(gòu)

具體而言,CODEnn的嵌入網(wǎng)絡(luò)主要使用了循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)和最大池化,架構(gòu)如下:

從上圖我們可以看到,正如我們之前提到的那樣,網(wǎng)絡(luò)架構(gòu)分為三個模塊。下面我們將從上往下,從右向左地依次說明這三個模塊:

相似度模塊

DeNN

CoNN

相似度模塊

這是最簡單的模塊,將代碼和相應(yīng)描述轉(zhuǎn)換為向量后,通過這一模塊衡量兩者的相似度。具體而言,使用的是余弦相似度:

DeNN

DeNN將自然語言描述嵌入為向量。DeNN使用循環(huán)神經(jīng)網(wǎng)絡(luò)(tanh激活)和最大池化完成嵌入:

CoNN

由于代碼不是簡單的純文本,包含多種結(jié)構(gòu)性信息。因此,CoNN的架構(gòu)要比DeNN復(fù)雜。

CoNN考慮代碼的三個方面:

方法名

API調(diào)用序列

代碼中包含的token

從每個代碼片段中提取以上三方面的信息后,分別嵌入,然后融合成單個向量表示。

上式中,c為整個代碼片段的向量表示,m、a、t分別為方法名、API調(diào)用序列、token的嵌入向量表示。

方法名的嵌入和DeNN類似,同樣使用循環(huán)神經(jīng)網(wǎng)絡(luò)(tanh激活)和最大池化:

API調(diào)用序列的嵌入同理:

token的嵌入有所不同。因為并不在意token的順序,也就是說,不把token作為序列數(shù)據(jù),所以就不使用循環(huán)神經(jīng)網(wǎng)絡(luò)了。使用的是多層感知器(MLP),也就是普通的全連接層。不過仍然搭配了tanh激活和最大池化:

模型訓(xùn)練

CODEnn接受代碼、描述作為輸入,預(yù)測其嵌入表示的余弦相似度。具體而言,每個訓(xùn)練樣本為一個三元組(C, D+, D-),其中C為代碼片段,D+為正面樣本(C的正確描述),D-為負(fù)面樣本(隨機選取的不正確描述)。訓(xùn)練時,CODEnn預(yù)測(C, D+)和(C, D-)的余弦相似度,并最小化以下?lián)p失:

上式中,θ為模型參數(shù),P為訓(xùn)練數(shù)據(jù)集,c、d+、d-為C、D+、D-的嵌入向量,ε為邊緣常數(shù),在研究人員的試驗中,ε的值定為0.05. 從直覺上說,最小化以上損失,將鼓勵代碼片段和正確描述的余弦相似度提高,代碼片段和錯誤描述的余弦相似度下降。

下面是一些實現(xiàn)的細(xì)節(jié):

循環(huán)神經(jīng)網(wǎng)絡(luò)選用的是雙向LSTM,每個雙向LSTM在每個方向上有200個隱藏單元。

詞嵌入維度為100.

嵌入token的MLP有100個隱藏單元。

融合代碼片段不同方面的MLP有400個隱藏單元。

優(yōu)化算法為mini-batch Adam,batch大小為128.

詞匯量限制為10000(10000個訓(xùn)練集中最常用的單詞)。

模型基于Keras構(gòu)建。

在單塊Nvidia K40 GPU上,訓(xùn)練耗時約50小時(500個epoch)。

收集訓(xùn)練語料

CODEnn模型需要大規(guī)模的訓(xùn)練語料,語料包括代碼元素和相應(yīng)的描述,即(方法名, API調(diào)用序列, token, 描述)元組。

研究人員利用GitHub上的開源項目準(zhǔn)備語料:

下載了GitHub上所有創(chuàng)建于2008年8月至2016年6月的Java項目。

排除所有未加星的項目,以移除玩具項目和試驗性項目。

選取帶有文檔注釋的Java方法(Java中的文檔注釋以/**開始,以*/收尾)。

最終收集到了18233872個Java方法。

Java方法名的提取很簡單,根據(jù)駝峰原則解析即可,例如,listFiles將被解析為list和files。

API調(diào)用序列的提取要復(fù)雜一點。研究人員使用Eclipse JDT編譯器解析了AST,并根據(jù)如下規(guī)則生成API調(diào)用序列:

new C()->C.new

o.m()->C.m(o為類C的實例)

方法調(diào)用作為參數(shù)傳入時,傳入的方法調(diào)用在前:o1.m1(o2.m2(), o3.m3())->C2.m2-C3.m3-C1.m1

提取語句序列s1;s2;...;sN中每個語句si的方法調(diào)用序列ai,并連接:a1-a2-...-aN

條件語句的調(diào)用序列包括所有分支:if (s1) {s2;} else {s3}->a1-a2-a3

循環(huán)語句:while (s1) {s2;}->a1-a2

token提取,同樣根據(jù)駝峰原則解析方法主體,并移除重復(fù)token。同時也移除了一些停止詞(例如the、in)和Java關(guān)鍵字,因為這些詞在源代碼中頻繁出現(xiàn),區(qū)分性不好。

描述提取,也用到了Eclipse JDT編譯器,從AST提取JavaDoc注釋。根據(jù)Javadoc指導(dǎo)原則,JavaDoc注釋的第一句話通常是方法的概述,因此研究人員將JavaDoc注釋的第一句話作為描述。

一個提取的例子

DeepCS

研究人員基于CODEnn模型創(chuàng)建了一個代碼搜索工具DeepCS。給定自然語言查詢,DeepCS會建議最相關(guān)的K個代碼片段。DeepCS系統(tǒng)包含三個主要階段:

離線訓(xùn)練

離線代碼嵌入

在線代碼搜索

DeepCS事先將代碼庫中的所有代碼片段嵌入為向量(使用訓(xùn)練好的CODEnn模型的CoNN模塊)。在線搜索時,當(dāng)開發(fā)者輸入自然語言查詢時,DeepCS首先使用訓(xùn)練好的CODEnn模型的DeNN模塊將查詢嵌入為向量,然后估計查詢向量和所有代碼向量的余弦相似度,并返回相似度最高的K個(比如,10個)代碼片段作為搜索結(jié)果。

試驗

試驗設(shè)置

為了更好地評估模型的表現(xiàn),研究人員使用了不同于訓(xùn)練語料的獨立代碼庫。研究人員選取了GitHub上至少有20星的Java項目。和訓(xùn)練語料不同,測試數(shù)據(jù)集包含所有代碼(包括那些沒有Javadoc注釋的代碼)??偣彩占?950個項目,從中得到了16262602個方法。

研究人員從Stack Overflow問答網(wǎng)站中選取了得票最高的Java編程問題,并手工檢查了這些問題,確保其符合標(biāo)準(zhǔn):

這個問題關(guān)于一項具體的Java編程任務(wù)。研究人員剔除了描述含糊抽象的問題,比如“加載JNI庫失敗”,“StringBuilder和StringBuffer的區(qū)別是什么?”,“為什么Java有transient域?”

接受的答案包含Java代碼片段。

不與之前的問題重復(fù)。

評估指標(biāo)

兩個開發(fā)者獨立地查看搜索結(jié)果,并標(biāo)注其相關(guān)性。接著互相討論不一致的標(biāo)簽,并重新標(biāo)注。重復(fù)這一過程,直到達成共識。

研究人員使用了4個常用的指標(biāo)衡量代碼搜索的有效性。其中2個指標(biāo)衡量單次代碼搜索查詢的有效性:

FRank首個命中結(jié)果在結(jié)果列表中的位置。由于用戶從上往下查看結(jié)果,因此較小的FRank值意味著找到所需結(jié)果需要花費的精力較少。

Precision at k衡量k個返回結(jié)果中相關(guān)結(jié)果所占的比例。

Precision at k很重要,因為開發(fā)者經(jīng)常會查看多個結(jié)果,良好的帶嗎搜索引擎應(yīng)該避免給開發(fā)者過多的噪聲。Precision at k越高,代碼搜索的表現(xiàn)就越好。研究人員評估了k值為1、5、10時的Precision at k.

另外兩個指標(biāo)衡量一組查詢的表現(xiàn):

SuccessRate at k衡量在前k個結(jié)果中命中結(jié)果的比例。

其中,Q為查詢集合,δ函數(shù)在輸入為真時返回1,否則返回0. SuccessRate at k越高,代碼搜索的總體表現(xiàn)就越好。和Precision at k一樣,研究人員評估了k值為1、5、10時的SuccessRate at k.

MRR是一組查詢中FRank倒數(shù)的平均數(shù)。MRR越高,代碼搜索的總體表現(xiàn)就越好。

評測對比

研究人員對比了CodeHow(當(dāng)前最先進的代碼搜索引擎)和Lucene(許多代碼搜索工具使用的流行文本搜索引擎)的表現(xiàn):

上表中,NF表示未找到,LC表示Lucene,CH表示CodeHow,DCS表示DeepCS。

從上表我們可以看到,一般來說,相比Lucene和CodeHow,DeepCS能返回更相關(guān)的結(jié)果。統(tǒng)計數(shù)據(jù)也證實了這一點。

例子

為了演示DeepCS的優(yōu)勢,研究人員提供了一些具體的例子。

上面的兩個查詢中,第一個queue是動詞(加入隊列),第二個queue是名詞(隊列)。普通的文本搜索引擎很難區(qū)分兩者,而DeepCS成功理解了兩者的不同。

上面這個例子展示了DeepCS的魯棒性。CodeHow返回了很多與查詢中不太重要的單詞(比如specified和character)相關(guān)的結(jié)果,而DeepCS可以成功識別不同關(guān)鍵詞的重要性,理解查詢的關(guān)鍵點。

這個例子展示了DeepCS能夠理解查詢的語義。盡管代碼片段中不包含查詢中的關(guān)鍵詞“read”(讀取)和“song”(歌曲),DeepCS仍然找到了語義相關(guān)的結(jié)果,“deserialize”(反序列化)和“voice”(聲音)。

當(dāng)然,DeepCS有時可能會返回不夠精確的結(jié)果。

上圖中的查詢語句為“生成md5”,精確結(jié)果在返回結(jié)果列表中排在第7,而部分相關(guān)的結(jié)果(生成校驗值)卻排在結(jié)果列表的前面。研究人員打算以后在模型中加入更多代碼特征(例如上下文環(huán)境),以進一步提升表現(xiàn)。

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

    關(guān)注

    42

    文章

    4785

    瀏覽量

    101275
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2947

    瀏覽量

    67013
  • 自然語言
    +關(guān)注

    關(guān)注

    1

    文章

    291

    瀏覽量

    13410

原文標(biāo)題:ICSE 2018:港科大、微軟研究院提出深度學(xué)習(xí)代碼搜索模型

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

收藏 人收藏

    評論

    相關(guān)推薦

    從AlexNet到MobileNet,帶你入門深度神經(jīng)網(wǎng)絡(luò)

    摘要: 在2018年3月13日云棲社區(qū),來自哈爾濱工業(yè)大學(xué)的沈俊楠分享了典型模式-深度神經(jīng)網(wǎng)絡(luò)入門。本文詳細(xì)介紹了關(guān)于深度神經(jīng)網(wǎng)絡(luò)的發(fā)展歷程,并詳細(xì)介紹了各個階段
    發(fā)表于 05-08 15:57

    深度神經(jīng)網(wǎng)絡(luò)是什么

    多層感知機 深度神經(jīng)網(wǎng)絡(luò)in collaboration with Hsu Chung Chuan, Lin Min Htoo, and Quah Jia Yong. 與許忠傳,林敏濤和華佳勇合作
    發(fā)表于 07-12 06:35

    如何構(gòu)建神經(jīng)網(wǎng)絡(luò)

    原文鏈接:http://tecdat.cn/?p=5725 神經(jīng)網(wǎng)絡(luò)是一種基于現(xiàn)有數(shù)據(jù)創(chuàng)建預(yù)測的計算系統(tǒng)。如何構(gòu)建神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)包括:輸入層:根據(jù)現(xiàn)有數(shù)據(jù)獲取輸入的層隱藏層:使用反向傳播優(yōu)化輸入變量權(quán)重的層,以提高
    發(fā)表于 07-12 08:02

    基于深度神經(jīng)網(wǎng)絡(luò)的激光雷達物體識別系統(tǒng)

    的激光雷達物體識別技術(shù)一直難以在嵌入式平臺上實時運行。經(jīng)緯恒潤經(jīng)過潛心研發(fā),攻克了深度神經(jīng)網(wǎng)絡(luò)在嵌入式平臺部署所面臨的算子定制與加速、量化策略、模型壓縮等難題,率先實現(xiàn)了高性能激光檢測神經(jīng)網(wǎng)絡(luò)
    發(fā)表于 12-21 07:59

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用

    卷積神經(jīng)網(wǎng)絡(luò)模型發(fā)展及應(yīng)用轉(zhuǎn)載****地址:http://fcst.ceaj.org/CN/abstract/abstract2521.shtml深度學(xué)習(xí)是機器學(xué)習(xí)和人工智能研究的最新趨勢,作為一個
    發(fā)表于 08-02 10:39

    深度神經(jīng)決策樹:深度神經(jīng)網(wǎng)絡(luò)和樹模型結(jié)合的新模型

    近日,來自愛丁堡大學(xué)的研究人員提出了一種結(jié)合深度神經(jīng)網(wǎng)絡(luò)和樹模型的新型模型——深度神經(jīng)決策樹(D
    的頭像 發(fā)表于 08-19 09:14 ?1.3w次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型的壓縮和優(yōu)化綜述

    近年來,隨著深度學(xué)習(xí)的飛速發(fā)展,深度神經(jīng)網(wǎng)絡(luò)受到了越來越多的關(guān)注,在許多應(yīng)用領(lǐng)域取得了顯著效果。通常,在較高的計算量下,深度神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能
    發(fā)表于 04-12 10:26 ?20次下載
    <b class='flag-5'>深度</b><b class='flag-5'>神經(jīng)網(wǎng)絡(luò)</b><b class='flag-5'>模型</b>的壓縮和優(yōu)化綜述

    卷積神經(jīng)網(wǎng)絡(luò)原理:卷積神經(jīng)網(wǎng)絡(luò)模型和卷積神經(jīng)網(wǎng)絡(luò)算法

    卷積神經(jīng)網(wǎng)絡(luò)原理:卷積神經(jīng)網(wǎng)絡(luò)模型和卷積神經(jīng)網(wǎng)絡(luò)算法 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種
    的頭像 發(fā)表于 08-17 16:30 ?1573次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)模型原理 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)

    卷積神經(jīng)網(wǎng)絡(luò)模型原理 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)? 卷積神經(jīng)網(wǎng)絡(luò)是一種深度學(xué)習(xí)
    的頭像 發(fā)表于 08-21 16:41 ?1097次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的優(yōu)缺點 卷積神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)的區(qū)別

    深度神經(jīng)網(wǎng)絡(luò)是一種基于神經(jīng)網(wǎng)絡(luò)的機器學(xué)習(xí)算法,其主要特點是由多層神經(jīng)元構(gòu)成,可以根據(jù)數(shù)據(jù)自動調(diào)整神經(jīng)元之間的權(quán)重,從而實現(xiàn)對大規(guī)模數(shù)據(jù)進行預(yù)
    發(fā)表于 08-21 17:07 ?4276次閱讀

    常見的卷積神經(jīng)網(wǎng)絡(luò)模型 典型的卷積神經(jīng)網(wǎng)絡(luò)模型

    常見的卷積神經(jīng)網(wǎng)絡(luò)模型 典型的卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)是
    的頭像 發(fā)表于 08-21 17:11 ?3110次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)預(yù)測模型 生成卷積神經(jīng)網(wǎng)絡(luò)模型

    cnn卷積神經(jīng)網(wǎng)絡(luò)模型 卷積神經(jīng)網(wǎng)絡(luò)預(yù)測模型 生成卷積神經(jīng)網(wǎng)絡(luò)模型? 卷積
    的頭像 發(fā)表于 08-21 17:11 ?1326次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)模型搭建

    卷積神經(jīng)網(wǎng)絡(luò)模型搭建 卷積神經(jīng)網(wǎng)絡(luò)模型是一種深度學(xué)習(xí)算法。它已經(jīng)成為了計算機視覺和自然語言處理等各種領(lǐng)域的主流算法,具有很大的應(yīng)用前景。本篇
    的頭像 發(fā)表于 08-21 17:11 ?1023次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型有哪些

    模型: 多層感知器(Multilayer Perceptron,MLP): 多層感知器是最基本的深度神經(jīng)網(wǎng)絡(luò)模型,由多個全連接層組成。每個隱藏層的
    的頭像 發(fā)表于 07-02 10:00 ?1681次閱讀

    深度神經(jīng)網(wǎng)絡(luò)模型cnn的基本概念、結(jié)構(gòu)及原理

    深度神經(jīng)網(wǎng)絡(luò)模型CNN(Convolutional Neural Network)是一種廣泛應(yīng)用于圖像識別、視頻分析和自然語言處理等領(lǐng)域的深度學(xué)習(xí)
    的頭像 發(fā)表于 07-02 10:11 ?9984次閱讀
    主站蜘蛛池模板: 狠狠色综合久久婷婷 | 亚洲狠狠婷婷综合久久久图片 | 色天使久久综合给合久久97色 | 天天躁日日躁成人字幕aⅴ 天天躁夜夜躁 | 四虎海外在线永久免费看 | 国内精品视频在线 | 4hc44四虎www在线影院男同 | 色多多高清在线观看视频www | 在线亚洲精品中文字幕美乳 | 真实国产伦子系 | 亚洲天天在线 | 国产一区二区三区在线观看影院 | 久久精品国产亚洲5555 | 天堂中文在线网 | 亚洲精品久久久久久婷婷 | 久操视频免费观看 | 狠狠色噜噜狠狠狠狠999米奇 | 国产精品一久久香蕉产线看 | 日韩毛片高清免费 | 国产精品嫩草影院一二三区 | 国产情侣出租屋露脸实拍 | 国产18到20岁美女毛片 | 天天摸天天碰天天碰 | 久久天天躁狠狠躁夜夜躁 | 看视频免费| 欧美色婷婷天堂网站 | 68日本xxxxxxx18| 欧美一区二区三区成人看不卡 | 婷婷开心激情网 | 欧美黑人巨大xxxx猛交 | 亚洲夂夂婷婷色拍ww47 | 免费在线观看黄色 | 免费福利午夜影视网 | 中文字幕一区二区三区四区 | 91啦中文在线观看 | 日日爱视频 | 性感美女逼 | 亚洲精品一卡2卡3卡三卡四卡 | 国产美女主播在线 | 日韩亚色 | 一本大道一卡二卡四卡 |