色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

新的深度神經網絡模型命名為CODEnn

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

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

例如,下面這段代碼讀取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)一詞,因此現存的方法可能無法成功返回這一代碼片段。

有鑒于此,HKUST和微軟研究院的研究人員顧小東、Hongyu Zhang、Sunghun Kim最近發表論文,使用深度神經網絡,學習源代碼和自然語言查詢的統一向量表示,以支持代碼語義搜索。

CODEnn

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

聯合嵌入

首先讓我們簡單溫習一下聯合嵌入的概念。

聯合嵌入(joint embedding),又稱多模態嵌入(multi-modal embedding),可以將異構數據嵌入統一的向量空間,使得模態不同而語義相似的概念在空間中占據相近區域。形式化地表述為:

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

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

具體架構

具體而言,CODEnn的嵌入網絡主要使用了循環神經網絡(RNN)和最大池化,架構如下:

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

相似度模塊

DeNN

CoNN

相似度模塊

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

DeNN

DeNN將自然語言描述嵌入為向量。DeNN使用循環神經網絡(tanh激活)和最大池化完成嵌入:

CoNN

由于代碼不是簡單的純文本,包含多種結構性信息。因此,CoNN的架構要比DeNN復雜。

CoNN考慮代碼的三個方面:

方法名

API調用序列

代碼中包含的token

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

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

方法名的嵌入和DeNN類似,同樣使用循環神經網絡(tanh激活)和最大池化:

API調用序列的嵌入同理:

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

模型訓練

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

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

下面是一些實現的細節:

循環神經網絡選用的是雙向LSTM,每個雙向LSTM在每個方向上有200個隱藏單元。

詞嵌入維度為100.

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

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

優化算法為mini-batch Adam,batch大小為128.

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

模型基于Keras構建。

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

收集訓練語料

CODEnn模型需要大規模的訓練語料,語料包括代碼元素和相應的描述,即(方法名, API調用序列, token, 描述)元組。

研究人員利用GitHub上的開源項目準備語料:

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

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

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

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

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

API調用序列的提取要復雜一點。研究人員使用Eclipse JDT編譯器解析了AST,并根據如下規則生成API調用序列:

new C()->C.new

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

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

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

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

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

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

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

一個提取的例子

DeepCS

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

離線訓練

離線代碼嵌入

在線代碼搜索

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

試驗

試驗設置

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

研究人員從Stack Overflow問答網站中選取了得票最高的Java編程問題,并手工檢查了這些問題,確保其符合標準:

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

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

不與之前的問題重復。

評估指標

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

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

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

Precision at k衡量k個返回結果中相關結果所占的比例。

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

另外兩個指標衡量一組查詢的表現:

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

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

MRR是一組查詢中FRank倒數的平均數。MRR越高,代碼搜索的總體表現就越好。

評測對比

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

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

從上表我們可以看到,一般來說,相比Lucene和CodeHow,DeepCS能返回更相關的結果。統計數據也證實了這一點。

例子

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

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

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

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

當然,DeepCS有時可能會返回不夠精確的結果。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4777

    瀏覽量

    100995
  • 源代碼
    +關注

    關注

    96

    文章

    2946

    瀏覽量

    66840
  • 自然語言
    +關注

    關注

    1

    文章

    289

    瀏覽量

    13376

原文標題:ICSE 2018:港科大、微軟研究院提出深度學習代碼搜索模型

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

收藏 人收藏

    評論

    相關推薦

    從AlexNet到MobileNet,帶你入門深度神經網絡

    摘要: 在2018年3月13日云棲社區,來自哈爾濱工業大學的沈俊楠分享了典型模式-深度神經網絡入門。本文詳細介紹了關于深度神經網絡的發展歷程,并詳細介紹了各個階段
    發表于 05-08 15:57

    深度神經網絡是什么

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

    如何構建神經網絡

    原文鏈接:http://tecdat.cn/?p=5725 神經網絡是一種基于現有數據創建預測的計算系統。如何構建神經網絡神經網絡包括:輸入層:根據現有數據獲取輸入的層隱藏層:使用反向傳播優化輸入變量權重的層,以提高
    發表于 07-12 08:02

    基于深度神經網絡的激光雷達物體識別系統

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

    卷積神經網絡模型發展及應用

    卷積神經網絡模型發展及應用轉載****地址:http://fcst.ceaj.org/CN/abstract/abstract2521.shtml深度學習是機器學習和人工智能研究的最新趨勢,作為一個
    發表于 08-02 10:39

    深度神經決策樹:深度神經網絡和樹模型結合的新模型

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

    深度神經網絡模型的壓縮和優化綜述

    近年來,隨著深度學習的飛速發展,深度神經網絡受到了越來越多的關注,在許多應用領域取得了顯著效果。通常,在較高的計算量下,深度神經網絡的學習能
    發表于 04-12 10:26 ?20次下載
    <b class='flag-5'>深度</b><b class='flag-5'>神經網絡</b><b class='flag-5'>模型</b>的壓縮和優化綜述

    卷積神經網絡原理:卷積神經網絡模型和卷積神經網絡算法

    卷積神經網絡原理:卷積神經網絡模型和卷積神經網絡算法 卷積神經網絡(Convolutional Neural Network,CNN)是一種
    的頭像 發表于 08-17 16:30 ?1523次閱讀

    卷積神經網絡模型原理 卷積神經網絡模型結構

    卷積神經網絡模型原理 卷積神經網絡模型結構? 卷積神經網絡是一種深度學習
    的頭像 發表于 08-21 16:41 ?1055次閱讀

    卷積神經網絡深度神經網絡的優缺點 卷積神經網絡深度神經網絡的區別

    深度神經網絡是一種基于神經網絡的機器學習算法,其主要特點是由多層神經元構成,可以根據數據自動調整神經元之間的權重,從而實現對大規模數據進行預
    發表于 08-21 17:07 ?4203次閱讀

    常見的卷積神經網絡模型 典型的卷積神經網絡模型

    常見的卷積神經網絡模型 典型的卷積神經網絡模型 卷積神經網絡(Convolutional Neural Network, CNN)是
    的頭像 發表于 08-21 17:11 ?2941次閱讀

    cnn卷積神經網絡模型 卷積神經網絡預測模型 生成卷積神經網絡模型

    cnn卷積神經網絡模型 卷積神經網絡預測模型 生成卷積神經網絡模型? 卷積
    的頭像 發表于 08-21 17:11 ?1275次閱讀

    卷積神經網絡模型搭建

    卷積神經網絡模型搭建 卷積神經網絡模型是一種深度學習算法。它已經成為了計算機視覺和自然語言處理等各種領域的主流算法,具有很大的應用前景。本篇
    的頭像 發表于 08-21 17:11 ?991次閱讀

    深度神經網絡模型有哪些

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

    深度神經網絡模型cnn的基本概念、結構及原理

    深度神經網絡模型CNN(Convolutional Neural Network)是一種廣泛應用于圖像識別、視頻分析和自然語言處理等領域的深度學習
    的頭像 發表于 07-02 10:11 ?9876次閱讀
    主站蜘蛛池模板: 天天久久狠狠色综合| 亚洲男人在线观看| 曰本熟妇乱妇色A片在线| 国产国拍亚洲精品永久软件| 极品少妇高潮啪啪无码吴梦| 欧美激情一区二区三区视频| 亚洲mv在线观看| yellow视频免费观看| 亚洲AV怡红院AV男人的天堂| 国产精品97久久AV色婷婷综合| 熟妇少妇任你躁在线无码| 国产成人精品男人免费| 忘忧草研究所 麻豆| 国产精品久久久久久久A片冻果 | 国产精品永久在线| 午夜快车神马影视| 国产综合自拍 偷拍在线| 亚洲成年男人的天堂网| 精品 在线 视频 亚洲| 欲插爽乱浪伦骨| 男人插曲女人的叫声| 边吃胸边膜下床震免费版视频 | 男gv纯肉免费视频| V8成品人视频| 睡觉被偷偷进入magnet| 国产偷国产偷亚州清高APP| 亚洲精品天堂自在久久77| 久久88综合| 88福利视频| 秋霞电影伦网理最新在线看片 | 久久99re6国产在线播放| 69精品国产人妻蜜桃国产毛片| 欧美亚洲精品一区二三区8V| 国产成人aaa在线视频免费观看| 性欧美xxxxporn| 快插我我好湿啊公交车上做| 99免费在线观看| 午夜男人免费福利视频| 久草青青在线| 成人免费毛片观看| 亚洲精品第一页|