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