搶程式設計師飯碗?自動寫代碼的Deep TabNine真如此神奇?

2021-02-13 Python大本營

作者 |  James Vincent等

編譯 | 夕顏

出品 | AI科技大本營(ID:rgznai100)

 

導讀:在過去的一年中,AI 生成書面文字的能力大大提高。通過掃描龐大的文本數據集,機器學習軟體可以生成從短篇小說到歌詞的各種令人信服的樣本。現在,一個名為 Deep TabNine 的新程序,可以將相同的技術應用於編碼世界。這個程序一經F推出便好評如潮,大有搶了程式設計師飯碗的架勢。這個程序是否真有這麼好用?我們來一探究竟。

什麼是Deep TabNine?

據外媒 The Verge 報導,Deep TabNine 是由滑鐵盧大學的計算機科學本科生 Jacob Jackson 創建的編碼自動完成器,程式設計師可以將它作為附件安裝在他們選擇的編輯器中,程式設計師寫代碼時,這個程序會給出下一行代碼建議,每次提供一小段代碼。你可以將它理解為 Gmail 的智能撰寫功能用到了代碼上。

 

據悉,Jacob 於 2018 年 2 月開始研究該軟體的原始版本,在 11 月發布之前它叫做 TabNine。本月早些時候,他發布了一個更新版本,該版本使用由研究實驗室 OpenAI 設計的深度學習文本生成算法模型 GPT-2 來改善能力。該模型使用 Transformer 架構,旨在解決自然語言處理中的問題,Deep TabNine 用這個架構來理解代碼中的英語。例如,模型可以使用 if / else 語句來進行否定。在訓練時,模型的目標是根據前面給定的 token 來預測下一個 token。

 

Deep TabNine 使用 GitHub 的近 200 萬個文件進行了訓練,它具有預先存在的知識,而不是僅僅從用戶當前的項目中學習。此外,這個模型還引用以自然語言編寫的文檔來推斷函數名稱、參數和返回類型。它還能利用傳統工具難以發現的小線索。例如,它可以理解 app.get_user() 的返回類型被假定為具有設置器方法的對象,且 app.get_users()的返回類型被假定為列表。

機器學習極大提高智能編碼能力

Jacob 表示,這種軟體雖然並不新鮮事物,但機器學習已經大大地改善了它的功能。「這對我來說是解決了一個問題。」

 

Deep TabNine 的更新版本讓程式設計師們留下了深刻印象,他們在 Twitter 上稱這個軟體「驚人」、「讓人瘋狂」和「絕對令人興奮」。

              

用戶 Franck Nijhof 是一位在閒暇時間從事開源家庭自動化軟體工作的 IT 經理,他對 Deep TabNine 不僅感到驚訝 ,還覺得既興奮又害怕。「我使用 Deep TabNine 的第一個小時內沒有作用,因為我不停地被它驚訝到,腦子裡一直不停地問它到底是怎麼知道的?怎麼做到的?」 Nijhof 通過電子郵件告訴 The Verge。

 

這樣的自動完成工具之前就有過,但 Nijhof 表示 Deep TabNine 的建議更準確。「我過去曾嘗試過一些'通用'的智能編寫程序,但它們很煩人而且沒有幫助,」他說道,「TabNine 無疑是一個改變遊戲規則的存在。」

 

特斯拉人工智慧總監 Andrej Karpathy 也對這個程序讚不絕口:

              

深度學習自動編碼 https://t.co/WenacHVj7z 非常酷!很久以前我在做 char-rnn(字符級循環神經網絡)時嘗試過相關的想法,但當時它並不是很有用。隨著新工具(GPT-2)的出現和更多的關注,它將會發揮更大的作用。

 -  Andrej Karpathy(@karpathy),2019年7月18日

機器學習預測讓代碼建議更優,支持22種語言

Jackson 表示,該軟體之所以可以提供更好的建議,是因為它可以進行預測。大多數自動填充程序必須解析用戶已編寫的內容來提出建議,就像人使用數學公式中的步驟一樣理順代碼。相比之下,Deep TabNine 依賴於機器學習的能力來查找數據中的統計模式以進行預測。

 

與文本生成算法在大量書籍、文章和電影腳本數據集上進行訓練的方式相同,Deep TabNine 對來自編碼庫 GitHub 的 200 萬個文件進行了訓練。它在這些數據中找到模式,並用其在任意給定代碼行中可能出現的內容給出建議,無論是變量名還是函數。

 

Jackson 說,使用深度學習創建自動編碼軟體有幾個優點。首先,它可以輕鬆添加對新語言的支持。只需要將更多的訓練數據放入 Deep TabNine 中,它就會挖出模式。這意味著,Deep TabNine 支持大約 22 種不同的編碼語言,而大多數同類型產品只支持一種。

 

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

 

最重要的是,由於深度學習的分析能力,Deep TabNine 提出的建議整體上具有很高的質量。而且,因為軟體不會查看用戶自己寫的代碼來提出建議,所以它可以從編碼的那一刻開始就起作用,而不用等著從用戶編寫的代碼中尋找蛛絲馬跡。

TABNINE並不完美:不擅長創造性代碼

當然,這個軟體也並非完美。它在提出建議時會出錯,另外,它也不是對所有類型的編碼都有用。Hacker News 和 r / program subreddit 的用戶已經找到了它的各種優點和編程漏洞(但大多數傾向於正面評論)。

 

用戶1:免費版本 200 KB 的限制對於實際代碼庫來說太低了,有考慮過提高限制嗎?Jacob Jackson 回覆:可以試下付費版 30 天返款。所有版本的 TabNine 仍然適用於大於索引限制的項目。索引中將添加和刪除文件,以確保索引文件與用戶正在編輯的文件儘可能相關。用戶2:可以用,但不是很好用。對於你最喜歡的編輯器不支持或沒有插件的語言來說,這是一個非常酷的技術,但是如果編輯器已經對語言有很好的支持(比如 VSCode for Typescript),它可能不會比連接自動完成的編輯器更好用。

用戶3:添加 IntelliJ Idea 支持,我會買它:)

 

用戶 4:支持 Emacs 後,我會買!

 

對於這個為程式設計師構建的編碼工具的編輯器和工作流程精確度,大家也有很多看法。

 

Jackson 也坦承了 Deep TabNine 的一些缺點,如它更適合某些類型的編碼。它在自動完成相對死記硬背的代碼時效果最好,這種編程已經被做過數千次,只有很小的變化。但是,它並不擅長用戶用於解決新問題的探索性代碼。考慮到軟體的智能來自數據中的模式,這並不奇怪。

               

那麼,它對於普通程式設計師真的有用嗎?這取決於很多因素,比如他們使用的程式語言,他們想要實現的目標等。但 Jackson 表示,與其說是一個人類編碼助手,它更像是一種更快的輸入法(一種常見的被稱為結對編程的做法)。

 

「想像一下,現在所有的程式設計師都在使用相當於手機的鍵盤打字,而使用 Deep TabNine 有點像轉而去使用常規鍵盤,」他說道。這款軟體可以提高用戶輸入信息的速度,並且可以提高工作效率,「因為你可以花更多時間考慮內容而不是細節。」但它不會按照你的方式編寫代碼,而你也確實需要要密切關注它的動向。

如何使用 Deep TabNine?

雖然集成深度學習模型具有多種優勢,但使用它需要大量的算力。Jackson 明確提到,在筆記本電腦上運行無法實現 TabNine 用戶習慣的低延遲。對此,他們提供了一種解決方案——TabNine Cloud(Beta)服務,該服務將使用戶能夠使用 TabNine 的伺服器進行 GPU 加速自動完成。訪問 TabNine Cloud,可以在此處免費註冊:https://tabnine.com/beta_signup

 

但是,有許多人更願意將代碼保存在他們的機器上。為了確保代碼的隱私性和安全性,TabNine 團隊正在研究以下用例:

 

商業化前途未定

目前,Jackson 正在考慮下一步該用這款軟體做些什麼,以及是否值得商業化。他說,他本人目前在一家大型科技公司有一份全職工作,他還不想放棄,但來自各領域的人都對這款軟體表示「非常感興趣」。「我還沒有真正決定我想用它做什麼。」

 

目前,TabNine 的個人許可用費用為 49 美元,商業用途費用為 99 美元,個人必須註冊 Deep TabNine 測試版才能訪問新的深度學習功能。購買許可之後, TabNine 能夠索引更多文件,給出更多相關建議。

 

            

網站上寫道:「TabNine 每分鐘至少可以為你節省 1 秒鐘。如果你認為你的時間價值超過 1.40 美元/小時,它將幫你在不到一年的時間內收回成本。「

 

他說,如果他能夠使用開源軟體創建這樣的程序,那麼 AI 輔助編碼的未來就是一片光明。

 

「這是在這個領域工作的每個人的目標,告訴計算機你想要寫什麼樣的代碼,它就能幫你寫,」他說道。「我們目前距離實現這個目前還很遠,但我認為這種工具可以幫助你更方便地表達自己的想法。」

 

原文連結:

https://www.theverge.com/2019/7/24/20708542/coding-autocompleter-deep-tabnine-ai-deep-learning-smart-compose

https://hub.packtpub.com/introducing-deep-tabnine-a-language-agnostic-autocompleter-based-on-openais-gpt-2/

(*本文為 AI科技大本營編譯文章,轉載請聯繫微信 1092722531)

「只講技術,拒絕空談!」2019 AI開發者大會將於9月6日-7日在北京舉行,這一屆AI開發者大會有哪些亮點?一線公司的大牛們都在關注什麼?AI行業的風向是什麼?2019 AI開發者大會,傾聽大牛分享,聚焦技術實踐,和萬千開發者共成長。目前,大會早鳥票搶購中~掃碼購票,領先一步!


推薦閱讀

相關焦點

  • AI 會替代程式設計師?超好用的自動補全代碼工具 Deep TabNine!
    這個程序一經F推出便好評如潮,大有搶了程式設計師飯碗的架勢。這個程序是否真有這麼好用?我們來一探究竟。什麼是Deep TabNine?據外媒 The Verge 報導,Deep TabNine 是由滑鐵盧大學的計算機科學本科生 Jacob Jackson 創建的編碼自動完成器,程式設計師可以將它作為附件安裝在他們選擇的編輯器中,程式設計師寫代碼時,這個程序會給出下一行代碼建議,每次提供一小段代碼。你可以將它理解為 Gmail 的智能撰寫功能用到了代碼上。
  • 程式設計師飯碗不保了?GPT-3 最強應用發布,動動手指就自動寫代碼的...
    近日有開發者根據GPT-3模型上線了一個能夠自動生成代碼的網站debuid(https://debuild.co/)。在這網站註冊後,用戶只要用英語描述需求,前端代碼會自動生成。
  • 新版Kite:實時補全代碼,Python 之父都發聲力挺!
    這不僅大大提高了代碼敲寫效率,同時也讓開發者能更輕鬆地完成更複雜、更多字符的代碼語句。Python 之父 Guido van Rossum 用後,也發出了「really love」感嘆,向大家牆裂推薦了這一高效工具。那麼,這一工具到底效果如何?雷鋒網 AI 開發者帶大家一探究竟~新版 Kite 好在哪兒?
  • 以後程式設計師可能再也不用寫代碼了!你信嗎?
    一位來自阿里巴巴程式設計師的吐槽,說出了無數程式設計師的心聲。軟體進步靠研發,研發進展靠程式設計師,程式設計師寫代碼主要靠加班。據說,十個程式設計師裡有十一個都曾經歷過996,乃至007的工作節奏。對於程式設計師和老闆來說,唯一的共同願望恐怕就是,希望一覺睡起來,原本1%的代碼就自動寫到了99%。不少人調侃,這真是做夢都能笑醒。而前段時間被無數程式設計師轉發的一段視頻,似乎讓夢想變成了現實。
  • 機器編程會讓程式設計師們丟掉飯碗嗎?
    原標題:機器編程會讓程式設計師們丟掉飯碗嗎?它會讓未來的程式設計師丟掉飯碗嗎?它與目前流行的低代碼開發是不是一回事兒?  那麼機器編程會不會取代程式設計師,未來是不是程式設計師就會失業?答案是否定的,因為編程更難的事情是在程序的邏輯設計上,而不是寫代碼本身。
  • 機器編程,會讓程式設計師丟飯碗嗎?
    它會讓未來的程式設計師丟掉飯碗嗎?它與目前流行的低代碼開發是不是一回事兒?那麼機器編程會不會取代程式設計師,未來是不是程式設計師就會失業?答案是否定的,因為編程更難的事情是在程序的邏輯設計上,而不是寫代碼本身。所以寫代碼的事情可以讓機器來完成,而讓編程人員做更高級的邏輯設計,讓程序更高效。談及機器編程,人們自然會想到目前熱門的低代碼開發。
  • 1024程式設計師節,不寫代碼還能寫啥
    同樣,不要羨慕程式設計師拿錢多,白天磨需求,半夜寫代碼,收入按工時折算,並不是很多。知乎上有組姐妹問題,被自己的代碼美哭是一種什麼樣的體驗?被自己的代碼醜哭又是一種什麼樣的體驗?能讓自己感動到哭的工作,一定是費盡心力的,說嘔心瀝血真不為過。既要勤奮也靠天分。
  • 虛擬機為安卓流暢度背鍋,是因為關係數十萬程式設計師飯碗?
    虛擬機表示:為安卓流暢度背這口鍋,也是為了廣大程式設計師的飯碗著想!解開這個梗,先要搞懂什麼是虛擬機,以及虛擬機有什麼用。簡單說,虛擬機是一種消除計算機硬體差異的機制,它可以提供一種穩定的運行環境,讓相同的應用程式在不同的作業系統和硬體上運行。
  • 程式設計師:停電去網吧寫代碼,被當成黑客報警了,網友:想偷我戒指
    相信很多人對程式設計師這個行業有著很多看法,畢竟作為高薪行業,一直以來也是備受關注,但因為強大的工作壓力,也讓很多人望而卻步。甚至在很多人眼裡,這就是年薪百萬,一夜成名的職業了,也讓程式設計師這個行業增添了幾分神秘感,這也讓很多人好奇,究竟是做什麼能夠讓自己收入這麼多呢,他們為何有如此強大的吸金能力呢?有位網友就在論壇上發表自己作為一位程式設計師曾遇到的尷尬事情。
  • 對程式設計師來說最難的是寫代碼嗎?
    相信看到這個標題的同學們都有自己的想法,可能剛剛進入這個行業的同學們會非常認同寫代碼就是程式設計師的主要工作,然而當你工作一定時間之後,寫代碼將變得不是那麼「重要」了,在悟空問答中眾位大咖為這個問題提供了多種多樣的答案:    答案一:寫代碼是程式設計師最主要工作,但是卻不是最難的工作,最難的是踢皮球和吵架!
  • 程式設計師吐槽女博士:一個搞算法的,竟然問tab和空格混用怎麼解決
    程式設計師吐槽女博士:一個搞算法的,竟然問tab和空格混用怎麼解決!隨著現在網際網路公司的要求越來越高,很多公司在面試的時候都會要求程式設計師會一點算法知識。近日,一位程式設計師吐糟同組搞算法的女博士,一直問一些弱智的問題,比如,怎麼知道我用的是python2還是python3?tab和空格混用怎麼解決?print家括號是python2的要求?c++怎麼釋放new申請的動態數組?此言一出,讓該程式設計師震驚表示,這位女博士肯定有水分,不然這能力怎麼進公司的,實在是讓人覺得難以置信。
  • 為啥國內程式設計師寫的代碼也用英文注釋?
    國內的一些程式設計師寫代碼用英文進行注釋,我覺得是他們編程之路上的一大重要進步。中國編程技術現在需要與國際接軌,而且國內很多程式設計師也喜歡更多了解程式語言的開原始碼,使用英文注釋會讓國內程式設計師在全球技術社區中形成廣泛共識和合作,從而使國內程式設計師能夠實現快速成長。
  • IT行業裡,好的程式設計師一天應該寫多少行代碼?
    今天大概寫了4個函數,昨天寫了5個函數,每個函數大概20行左右吧,都快累死了~~~也不知道和優秀的程式設計師差多少。不知道大家每天都寫多少~~~~1樓曾經有個專家說,每天精華代碼是1行。誇張了。邏輯複雜的代碼,80行,你已經算高效的了。
  • 嫁給程式設計師有什麼好處?程式設計師新郎接親,被要求現場寫代碼告白
    很多人一談到程式設計師,是不是都覺得他們搞開發的,一定是非常聰明,鐵飯碗,工資很高,是不是都覺得程式設計師棒棒的,好崇拜,好羨慕,如果談到結婚,你會選擇嫁給程式設計師嗎?近日程式設計師新郎接親,被要求現場寫代碼告白,你知道嫁給程式設計師有什麼好處嗎?
  • 「機器人記者」是否會搶了人類傳統記者的飯碗?
    如果你無法分辨哪一篇是由人類寫的,那你不是唯一一個。而答案是:上邊是機器寫的,下邊是人寫的。你猜對了嗎?這個「機器人記者」實則是一套新聞自動生成系統,開發設計者是《洛杉磯時報》的一名記者兼程式設計師,按照他的設計,Quakebot能夠在地震發生後,根據美國地質勘探局發出的數據,自動將信息輸入模板並提交至採編系統。  從2014年7月份開始,美聯社與AutomatedInsights籤署了550萬美元的協議,開始啟用該公司開發的程序撰寫有關公司財報的新聞報導。
  • 全民編程時代,程式設計師該如何保住飯碗?
    該公司員工為保住飯碗而學習編程知識,可在中國,教育部已下令對2萬名中小學生信息素養評測了。全民學編程的時代已經來了!在教育部今年公布的《2019年教育信息化和網絡安全工作要點》中指出,推廣編程教育,推動中小學階段設置人工智慧相關的課程,推動大數據、虛擬實境、人工智慧等新技術在教育教學中的深入應用。
  • 公司要求每天做操20分鐘,程式設計師懟:打斷寫代碼思路,誰來負責?
    導讀:現如今職場,很多人都有職業病,而對於程式設計師來說,由於每天坐在工位上寫代碼,頸椎多少都會有點問題,另外還有一點,由於用腦太多,禿頭應該也算是個職業病,雖然其他行業也有,但是程式設計師是比較多的一個群體。
  • 程式設計師:為啥我寫的代碼幾個月後自己也看不懂?
    寫在前面:中國程式設計師就別寫英文注釋了!不要寫「太牛逼」的代碼!"傻瓜式代碼" != "低性能代碼」=========華麗的分界線==========程式設計師同志們大多都會有這樣的經歷,就是要看別人的代碼。
  • 停電後程式設計師網吧寫代碼,被人當成黑客報警,網友:想偷我裝備
    程式設計師作為高新技術的代表性職業,收入也是極為豐富,甚至在許多人眼裡就是年薪百萬的代名詞,讓不少人進入這個行業,成為一名「程序猿」。正好有一位網友分享了他作為程式設計師的一件趣事,讓我們來看看。這位程式設計師分享說因為實驗室突然停電,而他和同事們又不想回家寫代碼,想要在一起寫,這樣方便交流,於是來到一家網吧準備熬夜寫程序。
  • 寫代碼不嚴謹,我就不配當程式設計師?
    作者 | 阿文責編 | 伍杏玲知乎熱榜有個提問:一位準程式設計師學編程有一段時間了,但是經常被人吐槽編程不夠嚴謹,比如寫個計算器沒有考慮用戶輸入特殊字符或者沒有考慮到用戶輸入使用了錯誤的數據類型導致了溢出異常,感覺自己很菜,懷疑自己是否適合當程式設計師了?