• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    一種基于字符的代碼補(bǔ)全方法及系統(tǒng)技術(shù)方案

    技術(shù)編號(hào):20840786 閱讀:27 留言:0更新日期:2019-04-13 08:33
    本發(fā)明專利技術(shù)提供了一種基于字符的代碼補(bǔ)全方法及系統(tǒng),包括:源代碼處理步驟,使用抽象語法樹和標(biāo)識(shí)符化工具解析源代碼;模型訓(xùn)練步驟,使用LSTM模型訓(xùn)練語言模型;預(yù)測(cè)補(bǔ)全步驟,根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。本發(fā)明專利技術(shù)利用深度學(xué)習(xí)模型中的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來構(gòu)建大規(guī)模代碼語料庫(kù)上的語言模型以預(yù)測(cè)后續(xù)的代碼。本發(fā)明專利技術(shù)提出了一個(gè)受限制的字符級(jí)循環(huán)神經(jīng)網(wǎng)絡(luò)并將其用于在Java語言中補(bǔ)全方法調(diào)用。本發(fā)明專利技術(shù)實(shí)現(xiàn)了在編程過程中,不僅可以對(duì)程序句子進(jìn)行補(bǔ)全,也可以對(duì)單個(gè)關(guān)鍵詞進(jìn)行補(bǔ)全。本發(fā)明專利技術(shù)的技術(shù)方案具有簡(jiǎn)單、快速的特點(diǎn),能夠較好地提高代碼推薦的準(zhǔn)確率和推薦效率。

    【技術(shù)實(shí)現(xiàn)步驟摘要】
    一種基于字符的代碼補(bǔ)全方法及系統(tǒng)
    本專利技術(shù)涉及計(jì)算機(jī)軟件工程
    ,尤其是涉及一種基于字符的代碼補(bǔ)全方法及系統(tǒng)。
    技術(shù)介紹
    計(jì)算機(jī)自動(dòng)生成代碼是近年來軟件工程的研究熱點(diǎn)之一。代碼自動(dòng)生成極大的減少了程序員的工作量,提高了開發(fā)效率。隨著開源社區(qū)的發(fā)展,可以通過分析大量的代碼從而進(jìn)行代碼生成。代碼自動(dòng)生成的一大困難在于源代碼本身具有諸多的約束和限制。近年來,在原有的基于組合優(yōu)化方法進(jìn)行程序綜合研究的基礎(chǔ)上,產(chǎn)生了一些新的基于機(jī)器學(xué)習(xí)技術(shù)進(jìn)行程序生成的方法。按照所采取的技術(shù)及應(yīng)用場(chǎng)景的不同,可將當(dāng)前的程序生成方法分成兩類:一類為基于程序輸入輸出結(jié)果的程序生成,一類為基于程序代碼語言特性的代碼生成。基于輸入輸出結(jié)果的程序綜合主要基于機(jī)器學(xué)習(xí)模型,利用程序輸入輸出結(jié)果之間的對(duì)應(yīng)關(guān)系構(gòu)造訓(xùn)練數(shù)據(jù)集,并利用該數(shù)據(jù)集對(duì)機(jī)器學(xué)習(xí)模型進(jìn)行訓(xùn)練,以達(dá)到在輸入輸出效果上模擬程序行為的目的。該類方法尤以基于深度神經(jīng)網(wǎng)絡(luò)的方法為代表。基于程序設(shè)計(jì)語言模型的程序生成主要利用程序設(shè)計(jì)語言自身所具有的的統(tǒng)計(jì)特性,通過對(duì)已有大量程序代碼的學(xué)習(xí)建立相應(yīng)程序設(shè)計(jì)語言的機(jī)器學(xué)習(xí)模型,并基于該模型在已有程序代碼的基礎(chǔ)上通過自動(dòng)補(bǔ)全的方式生成新的代碼。LSTM(LongShort-TermMemory)是長(zhǎng)短期記憶網(wǎng)絡(luò),是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò),適合于處理和預(yù)測(cè)時(shí)間序列中間隔和延遲相對(duì)較長(zhǎng)的重要事件。LSTM已經(jīng)在科技領(lǐng)域有了多種應(yīng)用。基于LSTM的系統(tǒng)可以學(xué)習(xí)翻譯語言、控制機(jī)器人、圖像分析、文檔摘要、語音識(shí)別圖像識(shí)別、手寫識(shí)別、控制聊天機(jī)器人、預(yù)測(cè)疾病、點(diǎn)擊率和股票、合成音樂等等任務(wù)。中國(guó)專利技術(shù)專利申請(qǐng)?zhí)?01710687197.4,涉及一種基于長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)的代碼推薦方法,針對(duì)現(xiàn)有代碼推薦技術(shù)普遍存在推薦準(zhǔn)確率低、推薦效率低等問題,該專利技術(shù)先將源代碼提取成API序列,利用長(zhǎng)短期記憶網(wǎng)絡(luò)構(gòu)建一個(gè)代碼推薦模型,學(xué)習(xí)API調(diào)用之間的關(guān)系,然后進(jìn)行代碼推薦。并使用了dropout技術(shù)防止模型過擬合。同時(shí)提出運(yùn)用ReLu函數(shù)代替?zhèn)鹘y(tǒng)飽和函數(shù),解決梯度消失問題加快模型收斂速度,提高模型性能,充分發(fā)揮神經(jīng)網(wǎng)絡(luò)的優(yōu)勢(shì)。然而,上述專利實(shí)際上進(jìn)行的是API推薦,與代碼級(jí)推薦或者自動(dòng)補(bǔ)全的目標(biāo)仍有較大差距。不能實(shí)現(xiàn)在任意地點(diǎn)對(duì)任意代碼的推薦。絕大多數(shù)的程序員在進(jìn)行軟件開發(fā)的過程中會(huì)使用框架或庫(kù)API來復(fù)用代碼。但程序員幾乎不可能記住所有的API,因?yàn)楝F(xiàn)有的API數(shù)量已經(jīng)很龐大。因此,代碼自動(dòng)補(bǔ)全機(jī)制已經(jīng)成為現(xiàn)代集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)中的不可或缺的組成部分。據(jù)統(tǒng)計(jì),代碼補(bǔ)全是開發(fā)者最常使用的十個(gè)指令之一。代碼補(bǔ)全機(jī)制在程序員輸入代碼時(shí)會(huì)嘗試補(bǔ)全程序的剩余部分。智能的代碼補(bǔ)全可以通過消除編程時(shí)的輸入錯(cuò)誤和推薦合適的API來加快軟件開發(fā)過程。
    技術(shù)實(shí)現(xiàn)思路
    為解決以上問題,本專利技術(shù)利用深度學(xué)習(xí)模型中的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來構(gòu)建大規(guī)模代碼語料庫(kù)上的語言模型以預(yù)測(cè)后續(xù)的代碼。本專利技術(shù)提出了一個(gè)受限制的字符級(jí)循環(huán)神經(jīng)網(wǎng)絡(luò)并將其用于在Java語言中補(bǔ)全方法調(diào)用。具體的,本專利技術(shù)提供了一種基于字符的代碼補(bǔ)全方法,包括:源代碼處理步驟,使用抽象語法樹和標(biāo)識(shí)符化工具解析源代碼;模型訓(xùn)練步驟,使用LSTM模型訓(xùn)練語言模型;預(yù)測(cè)補(bǔ)全步驟,根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。優(yōu)選的,在源代碼處理步驟中,所述源代碼被解析為不同形式,以獲得代碼的類、方法列表、代碼標(biāo)識(shí)符。優(yōu)選的,所述LSTM模型為串聯(lián)的LSTM模型,所述LSTM模型位于RNN模型的隱藏層。優(yōu)選的,在預(yù)測(cè)補(bǔ)全步驟中,將部分代碼片段輸入已經(jīng)訓(xùn)練過的語言模型,從而根據(jù)上下文輸出推薦的代碼元素。優(yōu)選的,所述方法進(jìn)一步包括:通過遍歷部分程序的抽象語法樹提取進(jìn)行方法調(diào)用的對(duì)象以及其所屬的類。優(yōu)選的,所述方法進(jìn)一步包括:依靠靜態(tài)分析獲取所述類的所有成員方法。根據(jù)本專利技術(shù)的另一個(gè)方面,還提供了一種基于字符的代碼補(bǔ)全系統(tǒng),包括順序連接的如下模塊:源代碼處理模塊,使用抽象語法樹和標(biāo)識(shí)符化工具解析源代碼;模型訓(xùn)練模塊,使用LSTM模型訓(xùn)練語言模型;預(yù)測(cè)補(bǔ)全模塊,用于根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。優(yōu)選的,所述源代碼處理模塊將所述源代碼解析為不同形式,以獲得代碼的類、方法列表、代碼標(biāo)識(shí)符。本專利技術(shù)實(shí)現(xiàn)了在編程過程中,不僅可以對(duì)程序句子進(jìn)行補(bǔ)全,也可以對(duì)單個(gè)關(guān)鍵詞進(jìn)行補(bǔ)全。本專利技術(shù)的技術(shù)方案具有簡(jiǎn)單、快速的特點(diǎn),能夠較好地提高代碼推薦的準(zhǔn)確率和推薦效率。附圖說明通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本專利技術(shù)的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:圖1為本專利技術(shù)基于字符的代碼補(bǔ)全方法流程圖。圖2為本專利技術(shù)基于字符的代碼補(bǔ)全系統(tǒng)結(jié)構(gòu)圖。具體實(shí)施方式下面將參照附圖更詳細(xì)地描述本專利技術(shù)的示例性實(shí)施方式。雖然附圖中顯示了本專利技術(shù)的示例性實(shí)施方式,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本專利技術(shù)而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了能夠更透徹地理解本專利技術(shù),并且能夠?qū)⒈緦@夹g(shù)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。本專利技術(shù)利用深度學(xué)習(xí)模型中的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)來構(gòu)建大規(guī)模代碼語料庫(kù)上的語言模型以預(yù)測(cè)后續(xù)的代碼。通常,基于神經(jīng)網(wǎng)絡(luò)的語言模型接受一個(gè)固定大小的詞匯表中的單詞作為輸入,并在輸入時(shí)將這些單詞映射為一個(gè)固定維度空間內(nèi)的向量表示,即通常所說的詞向量。詞向量通常會(huì)作為神經(jīng)網(wǎng)絡(luò)第一層的參數(shù),而詞匯表越大則意味著神經(jīng)網(wǎng)絡(luò)需要的參數(shù)越多。不同于自然語言,程序語言中存在大量的用戶自定義標(biāo)識(shí)符。這些標(biāo)識(shí)符可能由若干個(gè)有意義的單詞拼接而成,也可能只是單個(gè)無語義的字母。因此,降低語料庫(kù)的詞匯表規(guī)模可能會(huì)給模型的性能帶來提升。基于這一點(diǎn),本專利技術(shù)提出了一個(gè)受限制的字符級(jí)循環(huán)神經(jīng)網(wǎng)絡(luò)并將其用于在Java語言中補(bǔ)全方法調(diào)用。圖1為本專利技術(shù)基于字符的代碼補(bǔ)全方法流程圖,包括如下步驟:S1、源代碼處理步驟,使用抽象語法樹和token化工具來解析源代碼。在這個(gè)步驟中,所述源代碼被解析為不同形式,以獲得代碼的類、方法列表、代碼標(biāo)識(shí)符等。抽象語法樹(abstractsyntaxtree或者縮寫為AST),或者語法樹(syntaxtree),是源代碼的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式,這里特指編程語言的源代碼。和抽象語法樹相對(duì)的是具體語法樹(concretesyntaxtree),通常稱作分析樹(parsetree)。一般的,在源代碼的翻譯和編譯過程中,語法分析器創(chuàng)建出分析樹。一旦AST被創(chuàng)建出來,在后續(xù)的處理過程中,比如語義分析階段,會(huì)添加一些信息。S2、模型訓(xùn)練步驟,使用LSTM模型訓(xùn)練語言模型。步驟S1解析后得到的訓(xùn)練語料將被用于基于長(zhǎng)短時(shí)記憶(LongShortTermMemory,LSTM)的循環(huán)神經(jīng)網(wǎng)絡(luò)語言模型。所述LSTM模型為串聯(lián)的LSTM模型,所述LSTM模型位于RNN模型的隱藏層。S3、預(yù)測(cè)補(bǔ)全步驟,根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。在這個(gè)步驟中,將部分代碼片段輸入已經(jīng)訓(xùn)練過的語言模型,從而根據(jù)上下文輸出推薦的代碼元素。如圖2所示,根據(jù)本專利技術(shù)的另一個(gè)方面,還提供了一種基于字符的代碼補(bǔ)全系統(tǒng)100,本文檔來自技高網(wǎng)
    ...

    【技術(shù)保護(hù)點(diǎn)】
    1.一種基于字符的代碼補(bǔ)全方法,其特征在于,包括:源代碼處理步驟,使用抽象語法樹和標(biāo)識(shí)符化工具解析源代碼;模型訓(xùn)練步驟,使用LSTM模型訓(xùn)練語言模型;預(yù)測(cè)補(bǔ)全步驟,根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。

    【技術(shù)特征摘要】
    1.一種基于字符的代碼補(bǔ)全方法,其特征在于,包括:源代碼處理步驟,使用抽象語法樹和標(biāo)識(shí)符化工具解析源代碼;模型訓(xùn)練步驟,使用LSTM模型訓(xùn)練語言模型;預(yù)測(cè)補(bǔ)全步驟,根據(jù)訓(xùn)練過的語言模型補(bǔ)全代碼。2.根據(jù)權(quán)利要求1所述的基于字符的代碼補(bǔ)全方法,其特征在于:在源代碼處理步驟中,所述源代碼被解析為不同形式,以獲得代碼的類、方法列表、代碼標(biāo)識(shí)符。3.根據(jù)權(quán)利要求1或2所述的基于字符的代碼補(bǔ)全方法,其特征在于:所述LSTM模型為串聯(lián)的LSTM模型,所述LSTM模型位于RNN模型的隱藏層。4.根據(jù)權(quán)利要求1所述的基于字符的代碼補(bǔ)全方法,其特征在于:在預(yù)測(cè)補(bǔ)全步驟中,將部分代碼片段輸入已經(jīng)訓(xùn)練過的語言模型,從而根據(jù)上下文輸出推薦的代碼...

    【專利技術(shù)屬性】
    技術(shù)研發(fā)人員:李戈郝逸洋劉洋
    申請(qǐng)(專利權(quán))人:北京硅心科技有限公司
    類型:發(fā)明
    國(guó)別省市:北京,11

    網(wǎng)友詢問留言 已有0條評(píng)論
    • 還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。

    1
    主站蜘蛛池模板: 国产成人无码AV一区二区| 久久精品无码专区免费东京热| 97人妻无码一区二区精品免费| 精品久久久久久无码专区| 久久久久久精品无码人妻| 国产裸模视频免费区无码| 国产精品无码无卡在线播放 | 亚洲毛片无码专区亚洲乱| 无码精品一区二区三区| 亚洲爆乳精品无码一区二区三区 | 亚洲国产精品无码久久久久久曰| 无码免费一区二区三区免费播放| 国产成人无码精品一区不卡 | 亚洲AV无码专区国产乱码不卡| 亚洲VA中文字幕不卡无码| 精品韩国亚洲av无码不卡区| 亚洲av无码电影网| 久久精品无码一区二区三区| 激情射精爆插热吻无码视频| 伊人天堂av无码av日韩av| 国产AV无码专区亚洲Av| 国产成人无码一二三区视频 | 韩国精品一区二区三区无码视频| 无码人妻黑人中文字幕| 国产丝袜无码一区二区三区视频 | 亚洲人片在线观看天堂无码| 国产网红无码精品视频| 久久久无码精品亚洲日韩软件| 白嫩无码人妻丰满熟妇啪啪区百度| 亚洲精品无码你懂的| 67194成l人在线观看线路无码| 无码AV片在线观看免费| 欧洲精品久久久av无码电影 | 97免费人妻无码视频| 久久久久无码精品国产| 精品国精品无码自拍自在线| 精品久久无码中文字幕| 日韩精品无码一区二区视频| 精品久久久无码人妻中文字幕豆芽 | 亚洲国产成人精品无码区二本 | 亚洲av无码偷拍在线观看|