一行一行地敲代碼就像是徒手搬磚,聰明的程序猿們表示:我們要解放生產(chǎn)力!
比如像這樣:
在機(jī)器學(xué)習(xí)的時(shí)代,AI智能補(bǔ)全代碼早已不是夢(mèng)想,各種IDE和插件都在努力幫助程序猿減少擊鍵次數(shù),延長(zhǎng)鍵盤壽命(霧。
有位來自斯里蘭卡的程序猿也加入了關(guān)愛鍵盤協(xié)會(huì),他嘗試用簡(jiǎn)單的深度學(xué)習(xí)模型來實(shí)現(xiàn)自動(dòng)補(bǔ)全Python代碼這個(gè)目標(biāo),效果意外的不錯(cuò)。該項(xiàng)目現(xiàn)已開源!
抱著實(shí)驗(yàn)的心態(tài),在這個(gè)項(xiàng)目中,斯里蘭卡小哥用到的只是一個(gè)簡(jiǎn)單的LSTM(Long Short-Term Memory)模型。
用來進(jìn)行預(yù)測(cè)的算法是集束搜索(beam search),這是一種啟發(fā)式圖搜索算法。在進(jìn)行每一步深度擴(kuò)展時(shí),集束搜索僅保留一些質(zhì)量較高的節(jié)點(diǎn),減少空間消耗,提高時(shí)間效率。采用集束搜索算法最多可以實(shí)現(xiàn)10個(gè)字符的預(yù)測(cè)。
而投喂給模型的數(shù)據(jù)是標(biāo)記化的Python代碼,這些代碼里的注釋、字符串和空行事先清理掉了。
訓(xùn)練效果是這樣的:
綠色的字母就是自動(dòng)補(bǔ)全開始的位置,按下TAB鍵選擇補(bǔ)全,高亮標(biāo)注為灰色的部分就是AI補(bǔ)充的代碼。
小哥表示,如此簡(jiǎn)單的模型下,使用深度學(xué)習(xí)來自動(dòng)補(bǔ)全Python代碼,仍可以減少30-50%的擊鍵次數(shù),真的是surprise!
在GitHub上,小哥提供了一個(gè)Python的解析器,而只要寫一個(gè)其他語言的解析器,這個(gè)方案完全可以推廣到其他語言上,實(shí)現(xiàn)Java自動(dòng)補(bǔ)全,C自動(dòng)補(bǔ)全等等。
想要親測(cè)一下效果?
沒問題,只需五步,你就可以訓(xùn)練自己的自動(dòng)補(bǔ)全模型。
1、安裝進(jìn)行機(jī)器學(xué)習(xí)的實(shí)驗(yàn)環(huán)境(lab,地址見文末)。
2、將數(shù)據(jù)復(fù)制到 ./data/source。
3、運(yùn)行 extract_code.py 來收集所有的python文件,編碼并將其合并到 all.py。
4、運(yùn)行 evaluate.py 對(duì)模型進(jìn)行評(píng)估。
5、運(yùn)行 train.py 訓(xùn)練模型。
方法簡(jiǎn)單,效果還挺好,聽上去這個(gè)項(xiàng)目很有潛力啊。不過理想很豐滿,現(xiàn)實(shí)還是有點(diǎn)骨感的。這個(gè)新生的AI還是面臨著許多成長(zhǎng)挑戰(zhàn)的。
挑戰(zhàn)一:效率太低
首先是它的性能尚未能滿足實(shí)際使用的需要。由于編輯集成器的限制,集束搜索算法效率低下,有等它補(bǔ)全代碼的時(shí)間,手動(dòng)都可以敲好幾行代碼了。
對(duì)此斯里蘭卡小哥表示,下一步他們會(huì)嘗試用不同的架構(gòu)來提高推理性能,也歡迎大家向他們分享想法和建議。
挑戰(zhàn)二:前輩強(qiáng)大
Reddit網(wǎng)友們還指出,用機(jī)器學(xué)習(xí)來補(bǔ)全代碼這個(gè)想法早已有比較成功的實(shí)現(xiàn)方案,比如獲得了Trith Ventures投資的Kite。
全球有超過3萬名Python開發(fā)人員使用Kite,它被譽(yù)為當(dāng)前最好用的Python自動(dòng)補(bǔ)全工具。不僅能補(bǔ)全代碼,Kite還能幫你跳過文檔了解到別人是如何實(shí)時(shí)使用函數(shù)的,同時(shí),它也能提供你的自定義代碼庫里的定義和用法。
連Python之父都忍不住為Kite點(diǎn)贊:這可真夠酷的。
比起Kite這位前輩,小哥的這個(gè)項(xiàng)目還是非常稚嫩的,不過Kite并沒有開源,其作為補(bǔ)充使用的云引擎也引起了有關(guān)安全性的質(zhì)疑,有網(wǎng)友表示:
要是在工作上用了Kite,貴公司的法務(wù)部門怕不是要瘋。
此外,還有網(wǎng)友好奇AI跟Pycharm比起來又如何?畢竟Pycharm的自動(dòng)補(bǔ)全就已經(jīng)挺好用了。
Github:https://github.com/vpj/python_autocomplete
Lab:https://github.com/vpj/lab
— 完 —
聯(lián)系客服