近日,滑鐵盧大學學生研發了一款名爲DeepTabNine的代碼自動補全器。該軟件可經過機器學習算法,在無需解析大量已有代碼的狀況下,爲程序員提供高質量的編程建議。程序員經常使用的編程方法就像‘用手機鍵盤打字’,而使用Deep TabNine就像轉換到‘電腦鍵盤同樣。程序員
近年來,人工智能技術已經被大規模用以生成文本內容。經過掃描大量的文本集,許多機器學習應用能夠生成歌詞、詩句、短篇小說、新聞稿等邏輯嚴明的文本,已十分接近真人撰稿的水平。算法
如今,滑鐵盧大學學生將AI應用到計算機編程領域。其研發的DeepTabNine代碼自動補全器,利用GPT-2模型,通過200多萬份文件的訓練,能夠爲20多種語言的編程工做提供高質量建議。Deep TabNine已能夠在相關網站上付費下載,目前沒有進一步商業化的計劃。編程
▲使用Python編程時提供建議的Deep TabNine機器學習
1、利用機器學習模型,提高代碼補全效果編程語言
程序員能夠將Deep TabNine插件安裝到他們的代碼編輯器中,當他們開始編程時,該插件會建議下一行代碼寫什麼,每次會提供一小塊建議。編輯器
「這類代碼補全器插件並很多見,可是經過機器學習技術這款插件的補全效果得到了大大的提高。」Deep TabNine的締造者Jacob Jackson表示。函數
去年2月,Jackson開始開發TabNine軟件的原始版本,並於同年11月發佈。但本月,他發佈了一個更新版本,使用了OpenAI的實驗室設計的名爲GPT-2的深度學習模型生成算法,以提升其算力。OpenAI是由馬斯克等諸多硅谷大亨聯合創建的人工智能非營利組織。工具
2、程序員:TabNine的代碼建議更準確學習
這一更新使許多程序員給予了DeepTabNine正面反饋,他們在Twitter上稱其是「驚人的」、「絕對使人興奮的」。網站
一位名叫Franck Nijhof的用戶是一名IT經理,他在業餘時間經常本身研究家庭自動化軟件。Nijhof向The Verge寫郵件稱:「在使用DeepTabNine的第一個小時,我並無獲得什麼幫助,由於我簡直爲它着迷了。我不停地問本身,它是怎麼知道的?」
像這樣的自動補全工具並不新鮮,可是Nijhof說DeepTabNine的建議更加準確。他說:「我過去試過一些不錯的通用軟件,它們把事情變複雜了,而且也怎麼不實用。TabNine無疑是遊戲規則的改變者。」
3、學習200多萬份文件,無需解析已有代碼
Jackson說,市面上大多數自動補全器都必須解析用戶已經編寫的代碼,以便提出建議,就像處理數學公式中的步驟同樣處理代碼。相比之下,DeepTabNine則依賴於機器學習在數據中發現統計模式,進而作出預測。
就像文本生成算法須要用大量的圖書、文章及電影腳本的大型數據集來訓練同樣,DeepTabNine也須要用編碼庫GitHub中的200多萬份文件進行訓練。
Deep TabNine利用由這些數據訓練出的模型,來提示程序員接下來可能出現的在任何給定代碼行中的內容,不管是變量名仍是函數。
4、支持約22種編程語言,建議質量高
Jackson說,使用深度學習來建立代碼補全軟件有幾個優勢。
首先,它支持添加新語言,並且操做簡易。據稱,你只須要把更多的訓練數據放入TabNine中,它就會導出相關模型。Deep TabNine支持大約22種不一樣的編碼語言,而大多數其餘的代碼補全器都只支持一種語言。
▲使用C++編寫代碼時提供建議的Deep TabNine
(Deep TabNine支持的語言的完整列表以下:Python、JavaScript、Java、C++、C、PHP、Go、C#、Ruby、Objective-C、Rust、Swift、TypeScript、Haskell、OCaml、Scala、Kotlin、Perl、SQL、HTML、CSS和Bash)
同時,依託深度學習分析能力,DeepTabNine提出的建議綜合質量很高。因爲該軟件不會查看用戶本身的代碼來提出建議,因此它能夠從一開始就幫助程序員推動工做,而不是等着從程序員編寫的代碼中得到提示。
5、不適合開創性的編程工做,有時會出錯
固然,這個軟件也有缺陷。它在建議中有時候會出錯,且並非對全部類型的代碼都有用。黑客新聞等編程網站及論壇上有許多專業人士對該軟件展開了討論,其中有許多正面評論,也有一些指出了問題。
其中有一條差評是Deep TabNine的締造者Jackson也表示贊同的,即DeepTabNine更適合一部分特定類型的編程指令。當自動完成相對死記硬背的代碼時,Deep TabNine的工做效率最高,由於這類代碼用的頻率很高,且每每變化很小。當用戶須要解決新問題時,面對開創性的編碼需求,它就有些「壓力山大」了。據稱,這個問題的存在也是合理的,主要是因爲該軟件的智能來自對存檔數據的學習。
那麼它對程序員到底有多大用處呢?這將取決於不少因素,好比他們使用什麼編程語言以及他們想要實現什麼。可是Jackson說,它更像是一種更快的輸入方法,而不是程序員編碼夥伴,不是一種常見的結隊編程應用。
Jackson說:「打個比方,程序員經常使用的編程方法就像‘用手機鍵盤打字’,而使用DeepTabNine就像轉換到‘電腦鍵盤同樣’。」軟件提升了你輸入信息的速度,這讓你更有效率,「所以你能夠花更多的時間思考高層次的東西,而不是細節。」但它不會爲你編寫代碼,你也須要檢查驗證,不能過於依賴它。
7、未肯定是否商業化,但花49美圓可買到
目前,Jackson正在考慮下一步如何使用該軟件,以及是否值得將其商業化。他說:「我在一家大型科技公司作全職工做,我不想放棄這份工做。不少來自各行各業的人找到我,表示對Deep TabNine感興趣。但我尚未想好下一步怎麼作。」
TabNine的我的使用許可價格爲49美圓,商業使用許可價格爲99美圓,用戶必須註冊DeepTabNine beta版才能使用新的深度學習功能。在相關網站上,Jackson這樣解釋該價格:「TabNine每分鐘將爲你節省至少1秒鐘時間。若是你把時間的價值定在每小時1.40美圓以上,不到一年就能收回成本。」
「個人夢想是將來能建成一個程序,它能根據程序員的需求直接生成代碼。目前咱們離這個目標還很遠,但我認爲Deep TabNine可讓你更快捷地表達想法。」Jackson表示。