日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

都All in AI啦,應(yīng)該自己學(xué)會補全 Python 代碼了!

 黃爸爸好 2019-07-31

轉(zhuǎn)自:機器之心

在項目開發(fā)中,優(yōu)秀的代碼自動補全工具可以提升工作效率。然而,近來的 IDE 基本都使用搜索方法進行補全,在一些場景下效果不佳。近日,有開源項目用深度學(xué)習(xí)模型進行代碼補全,顯示出非常有潛力的效果。

根據(jù)介紹,該項目基于 LSTM 模型,訓(xùn)練后,負責(zé)對代碼的缺失部分進行補全。評價模型的方法是判斷節(jié)省了多少的按鍵信息——即模型給出長度為 L 的代碼建議,如果和真實的代碼匹配,則節(jié)省 L - 1 個鍵入操作。實驗結(jié)果說明,大約有 30%-50% 的鍵入成本可以節(jié)省下來。

作者在帖子中表示,他們接下來會嘗試不同的架構(gòu),并提高推斷的表現(xiàn)。而現(xiàn)在的模型推斷很慢,不能實際使用。作者已在 GitHub 開源了項目代碼:

鏈接地址: https://github.com/vpj/python_autocomplete

和 IDE 的自動補全有什么區(qū)別

該項目對 Python 代碼的自動補全與傳統(tǒng) IDE(如 PyCharm)等不同。IDE 補全基于檢索方法,需要從已有代碼中進行搜索。

以 PyCharm 中的基本補全(Basic Completion)方法為例。基本補全可幫助補全可見區(qū)域的類、方法、關(guān)鍵詞代碼。使用時,PyCharm 會分析補全使用情況,并提供當(dāng)前位置可能的選擇。如果是對空間、參數(shù)或變量聲明進行補全,則 PyCharm 會基于類別提供一系列可能的命名。

當(dāng)出現(xiàn)已定義的類、函數(shù)、模塊和變量時,基本補全就會啟動。

此外,PyCharm 也提供智能補全等其他補全功能,但基本上都需要對已有文本進行搜索,根據(jù)位置和類型判斷補全的方法。這些方法都沒有配置機器學(xué)習(xí)模型。

Pycharm 的自動補全介紹:https://www./help/pycharm/auto-completing-code.html

深度學(xué)習(xí)怎樣腦補缺失 TF 代碼

最常用的 PyCharm 自動補全也能省很多功夫,但它需要 IDE 能檢索到你的代碼文件或庫,而且補全會提供多個可能的選項。但是在本項目實驗的工具中,LSTM 會根據(jù)上下文語義確定最可能調(diào)用的函數(shù),因此它能節(jié)省更多的成本。作者表示如果使用束搜索,那么一次能預(yù)測 10 多個字符,不過這樣對于實際使用還是有點低效。

在訓(xùn)練深度補全模型前,我們需要先建立訓(xùn)練集。開發(fā)者會在清洗評論、標(biāo)注和空行后,構(gòu)建比較干凈的 Python 代碼。然后,模型會在這些數(shù)據(jù)上進行訓(xùn)練與預(yù)測。在數(shù)據(jù)預(yù)處理上,開發(fā)者發(fā)現(xiàn)通過 tokenizing Python 代碼,模型效果比通過 BPE 編碼的字符級預(yù)測效果還要好。作者提供了一個簡單的預(yù)訓(xùn)練模型,它是在整個 TensorFlow 項目的 models 代碼中訓(xùn)練的。

下圖就是作者在驗證集中測試的驗證樣本。綠色的字符表示自動補全的起始位置,用戶需要按下 Tab 鍵選擇開始補全。綠色及后面高亮的灰色字符是自動補全的結(jié)果。

如上所示為驗證樣本中的自動補全效果。與代碼生成類似,粗略看起來,似乎效果非常不錯,但實際上會有很多不合理的地方。不過有意思的是,自動補全中所有字符串都只有一個占位操作,這也是非常合理的處理方法。

樣本中自動補全的起始和結(jié)束位置都是隨機的,也就是說代碼可能補全到「tensorfl」就結(jié)束了,并不會補全完整的標(biāo)識符「tensorflow」。這在實際場景中用處非常有限,因此作者將生成結(jié)束位置限制為終止 token 而修復(fù)問題。目前自動補全能完成多種 operator,且當(dāng)我們增加束搜索的長度時,它完成的代碼長度會更多。

整個模型的主體都是 LSTM,它在 TensorFlow 模型代碼庫訓(xùn)練后能捕捉非常豐富的 TensorFlow API。如下所示為自動補全模型的主體代碼,基本上簡單的一個 LSTM 就能搞定:

網(wǎng)友評價

項目開源后,有些網(wǎng)友對作者提出了質(zhì)疑:

「我們已經(jīng)有很多很好用的自動補全工具了,比如 kite(一個可以在 IDE 上使用的插件),為什么還要費心搞個機器學(xué)習(xí)模型?」

在討論中,有人提出,一些無良的自動補全工具會悄悄上傳代碼到他們的服務(wù)器中,(而自行訓(xùn)練的深度學(xué)習(xí)模型不存在這個問題)。

也有人提出,其實不一定要用 LSTM 模型,隱馬爾科夫模型在處理序列數(shù)據(jù)上效果也很好。

此外,也有網(wǎng)友建議使用 CuDNN 加速 LSTM 的推斷過程。這樣能大大提升推斷速度,集成到 IDE 中也就有了可能。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多