GPT-2,一個(gè)來自 OpenAI 的逆天語言模型,現(xiàn)在能用來補(bǔ)全代碼了。
一位來自加拿大的大四學(xué)霸,開發(fā)了一款”Deep TabNine“代碼補(bǔ)全工具,實(shí)現(xiàn)了這一大膽的想法。
它支持23種編程語言、5種編輯器,使用簡(jiǎn)單,效果驚艷。
不少使用過的網(wǎng)友說:TabNine是他們用過的最好的代碼補(bǔ)全工具,這是屬于程序員的殺手級(jí)應(yīng)用。
在 VS Code 的擴(kuò)展商店里,TabNine 已經(jīng)被下載 1.3 萬次,獲得全 5 星好
支持 23 種編程語言
Deep TabNine 支持 Java:
C++:
Haskell:
不同于各種其他代碼補(bǔ)全插件,Deep TabNine 是根據(jù)程序員過去的習(xí)慣自動(dòng)補(bǔ)全,并在后面給出幾種選項(xiàng)的概率。
如果有類似代碼出現(xiàn)在之前的項(xiàng)目里,TabNine還會(huì)在補(bǔ)全候選框中直接給出地址,方便用戶點(diǎn)擊進(jìn)去查閱。
除以上幾種語言之外,Deep TabNine還支持JavaScript、C、PHP、Go、C#、Ruby、Objective-C、Rust、Swift、TypeScript、OCaml、Scala、Kotlin、Perl、SQL、HTML、CSS和Bash。
主流編程語言幾乎都囊括在內(nèi)。
支持 5 種編輯器
TabNine 支持 VS Code、Sublime Text、Atom、Emacs、Vim 五種代碼編輯器。
對(duì)于使用 VS Code 和 Sublime 來說,安裝 TabNine 非常方便,用自帶的擴(kuò)展包管理工具即可。
VS Code
VS Code 用戶按下 Ctrl+P(Mac 用戶按下?+P),粘貼以下命令,然后按回車鍵完成安裝。
extinstallTabNine.tabnine-vscode
Sublime
Sublime 用戶安裝分為兩步:
1、按下Ctrl+Shift+P(Mac用戶:?+Shift+P),選擇Install Package Control;
2、再次按下Ctrl+Shift+P(Mac用戶:?+Shift+P),選擇Package Control:Install Package,然后選擇TabNine來安裝。
Vim
Vim 使用 Vundle 插件管理器進(jìn)行安裝:
1、添加Plugin ‘zxqfl/tabnine-vim’到.vimrc;
2、輸入:PluginInstall,按下回車完成安裝。
其他編輯器的安裝方法就不一一贅述了,有需要的用戶可以參照文末的鏈接進(jìn)行安裝。
項(xiàng)目超過400kb需要購買許可證:個(gè)人用戶49美元,商業(yè)用戶99美元。
由于 Deep TabNine 用到機(jī)器學(xué)習(xí)補(bǔ)全代碼,因此需要大量的算力(超過100億次浮點(diǎn)運(yùn)算),在筆記本上運(yùn)行模型,無法獲得低延遲的體驗(yàn)。
因此,軟件開發(fā)者推出了 TabNine Cloud 云服務(wù)器,用云端 GPU 加速。付費(fèi)用戶不需要再加錢即可使用。
所以聽起來很劃算吧?
軟件開發(fā)者自己就說,這個(gè)價(jià)格其實(shí)不貴,有了 TabNine,一分鐘就里能幫你節(jié)省一秒,咱們?cè)偎闼愠绦騿T的時(shí)薪,每個(gè)小時(shí)能節(jié)約1.4美元,不到一年時(shí)間就能回本了。
如果你對(duì)效果不滿意,TabNine 開發(fā)者還提供 30 天退款保證。
怎么做到的?
TabNine 是在 GPT-2 的基礎(chǔ)上構(gòu)建的,這是一種 Transformer 架構(gòu),原產(chǎn)自 OpenAI,是個(gè)“逆天”語言模型。
GPT-2 的參數(shù)高達(dá) 15 億個(gè),數(shù)據(jù)量比一代擴(kuò)大了 10 倍,使用了包含 800 萬個(gè)網(wǎng)頁的數(shù)據(jù)集,共有 40GB。
逆天之處就在于,GPT-2 寫起文章來毫無違和感,無需針對(duì)性訓(xùn)練就能橫掃各種特定領(lǐng)域的語言建模任務(wù),還具備閱讀理解、問答、生成文章摘要、翻譯等等能力。
就 GPT-2 而言,它的訓(xùn)練目標(biāo)很簡(jiǎn)單:根據(jù)所有給定文本中前面的單詞,預(yù)測(cè)下一個(gè)單詞。雖然本來是解決 NLP 問題,看似與寫代碼沒什么關(guān)聯(lián),但建模代碼也算是用一種獨(dú)有的方式在理解英文。
比如,可以讓模型用 if/else 語句否定單詞:
項(xiàng)目主頁顯示,在大約經(jīng)過 GitHub 中 200 萬個(gè)文件訓(xùn)練后, TabNine 具備了自動(dòng)補(bǔ)全代碼的能力。
在訓(xùn)練這個(gè)模型期間,模型學(xué)習(xí)了例如動(dòng)態(tài)類型語言中的類型推斷等復(fù)雜行為,用這樣的訓(xùn)練方式預(yù)測(cè) token。
作者表示,TabNine 可以很好利用傳統(tǒng)代碼補(bǔ)全工具難以獲取的瑣碎細(xì)節(jié)。
例如,假設(shè) app.get_user()的返回類型是一個(gè)帶有 setter 方法的對(duì)象,而 app.get_users()的返回類型是一個(gè)列表,兩個(gè)名稱之間只有細(xì)微的差別:
這個(gè)模型還能以自然語言編寫的文檔來推斷函數(shù)名稱、參數(shù)和返回類型:
Deep TabNine 加入了之前用戶強(qiáng)烈要求加入的功能:用預(yù)先存在的知識(shí),解決在創(chuàng)建新項(xiàng)目時(shí)的代碼補(bǔ)全問題。
例如,它知道當(dāng)一個(gè)類擴(kuò)展 React.Component 時(shí),它的構(gòu)造函數(shù)通常會(huì)調(diào)用一個(gè)名為 props 的參數(shù),并且通常在其內(nèi)部用 this.state 賦值:
Deep TabNine 甚至可以做不可能的事情,并記住 C++ 可變參數(shù)轉(zhuǎn)發(fā)語法:
“殺手級(jí)應(yīng)用”
TabNine 問世后,不斷收獲好評(píng),甚至還有程序員激動(dòng)得爆粗口:
臥槽,這種軟件多來點(diǎn)就好了。(Fuck yeah. This is the sort of software I want to see more often: TabNine )
有網(wǎng)友表示, 沒有它都不知道該怎么面對(duì)寫代碼這件事了。
還有人稱之為開發(fā)者應(yīng)用中的第一個(gè)“殺手級(jí)應(yīng)用程序”:
“令人印象深刻”、“感到神奇”“太酷了”……推特上的評(píng)價(jià),頗有電視廣告上“用了都說好”的畫風(fēng)。
在各大科技論壇上,也有網(wǎng)友提出了建議和改進(jìn)的方向。
有用戶反映,也有美中不足的地方,比如這個(gè)工具會(huì)干擾自動(dòng)括號(hào)完成。
作者表示,TabNine 還在不斷更新完善中,正在改進(jìn)這些bug。
大四學(xué)霸的第一桶金
想不到吧,這款好評(píng)如潮的代碼工具,出自一名大四學(xué)生之手。
Jacob Jackson,加拿大人,目前在滑鐵盧大學(xué)主修計(jì)算機(jī)科學(xué)與組合優(yōu)化專業(yè),輔修數(shù)學(xué)。大四在讀,今年8月份畢業(yè)。
Jackson此前在Reddit上發(fā)帖稱,這是自己在大學(xué)階段開發(fā)的第一款商業(yè)軟件產(chǎn)品。
別人的大學(xué),別人的第一桶金~
但Jackson并非無名之輩,年少有為,曾在2014和2015連續(xù)兩年獲得IOI金牌。
因此,大學(xué)一入學(xué),便成為加拿大Michael and Ophelia Lazaridis Olympiad Scholarship獎(jiǎng)學(xué)金的獲得者,免除了8個(gè)學(xué)期學(xué)費(fèi)書費(fèi)和生活費(fèi)。
除了自動(dòng)補(bǔ)全代碼的TabNine,Jackson還開發(fā)了很多有意思的應(yīng)用,比如一個(gè)名為jellies的益智游戲,和使用蒙特卡羅樹搜索的國際象棋引擎Sashimi等。
本文素材來源
TabNine網(wǎng)站:https://tabnine.com/blog/deep
Jackson GitHub主頁:https://github.com/zxqfl
Jackson簡(jiǎn)歷:http://jacobj.ca/resume.html
-
編程
+關(guān)注
關(guān)注
88文章
3616瀏覽量
93763 -
代碼
+關(guān)注
關(guān)注
30文章
4790瀏覽量
68654
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論