AI 會替代程式設計師?超好用的自動補全代碼工具 Deep TabNine!

2020-12-12 CSDN

作者 | James Vincent等

編譯 | 夕顏

【CSDN 編者按】在過去的一年中,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/

相關焦點

  • 搶程式設計師飯碗?自動寫代碼的Deep TabNine真如此神奇?
    這個程序一經F推出便好評如潮,大有搶了程式設計師飯碗的架勢。這個程序是否真有這麼好用?我們來一探究竟。什麼是Deep TabNine?據外媒 The Verge 報導,Deep TabNine 是由滑鐵盧大學的計算機科學本科生 Jacob Jackson 創建的編碼自動完成器,程式設計師可以將它作為附件安裝在他們選擇的編輯器中,程式設計師寫代碼時,這個程序會給出下一行代碼建議,每次提供一小段代碼。你可以將它理解為 Gmail 的智能撰寫功能用到了代碼上。
  • 新版Kite:實時補全代碼,Python 之父都發聲力挺!
    這不僅大大提高了代碼敲寫效率,同時也讓開發者能更輕鬆地完成更複雜、更多字符的代碼語句。Python 之父 Guido van Rossum 用後,也發出了「really love」感嘆,向大家牆裂推薦了這一高效工具。那麼,這一工具到底效果如何?雷鋒網 AI 開發者帶大家一探究竟~新版 Kite 好在哪兒?
  • 效率工具 | 一款基於深度學習的代碼自動補全神器
    Kite與TabNine都是優秀的、基於人工智慧的代碼自動補全工具,相對於大多數自動補全插件,它都能讓人感到非常驚豔,但是二者都有各自的側重點,下面就來說一下Kite與TabNine各自的優點和缺點。舉個例子,我們要導入numpy模塊,對於大多數補全工具,我們輸入numpy的幾個字母後,它會聯想出完整的numpy,但是對於Kite,當輸入import num,它會根據知識庫中大多數使用者的習慣直接補全import numpy as np。
  • 你是一個成熟的AI了,應該自己學會補全Python代碼了
    機器之心整理參與:思源、一鳴在項目開發中,優秀的代碼自動補全工具可以提升工作效率。然而,近來的 IDE 基本都使用搜索方法進行補全,在一些場景下效果不佳。近日,有開源項目用深度學習模型進行代碼補全,顯示出非常有潛力的效果。
  • AI加持,Kite增加智能代碼補全功能:減少一半操作,實時補全
    機器之心報導機器之心編輯部代碼補全工具 Kite 近日更新了最新的版本,增加了名為「Intelligent Snippets」的新功能。這一功能可以幫助開發者更為智能和高效的補全 Python 代碼中的函數命令了。Kite 是一個著名的 Python 代碼補全工具,支持在一些 IDE 上作為插件,幫助開發者提升代碼效率。近日,Kite 官方宣布將會增加「Intelligent Snippets」功能。據官方表示,這一工具可以幫助開發者補全複雜的、多字符的代碼,而且代碼的生成幾乎是實時的。
  • 程式設計師必備6款工具
    都說程式設計師的電腦上有各種各樣的軟體工具、編輯器、插件等等,不同崗位的程式設計師使用的工具也不同,今天小編就給大家分享6款程式設計師必備的工具軟體,看看是不是你們常用的!一、Visual Studio CodeVisual Studio Code是一個運行於Mac OS X、Windows和 Linux之上的,針對於編寫現代 Web 和雲應用的跨平臺原始碼編輯器,擁有所有主流的開發語言的語法高亮、智能代碼補全
  • AI輔助寫代碼,Python之父都愛不釋手的工具
    我剛看到這個工具的時候,也是一臉懵x,AI?機器學習?輔助?如果能全自動寫出代碼得多好,不過真要是這樣,在座各位的就業危機就徹底來了。 行了,既然提到」代碼完成「,各位肯定會想到IDE不都有這個功能嗎?這工具是不是有點多此一舉?
  • 11個代碼質量審核和管理工具,程式設計師收藏
    11個代碼質量審核和管理工具,程式設計師收藏 如今,代碼質量分析和審核已成為每個企業的基本流程。隨著開原始碼庫使用的增加,安全性和代碼質量對於構建高質量軟體至關重要。不良的代碼不僅會影響代碼的可維護性,而且還會在某些情況下影響其性能。
  • 看看函數名和注釋,AI自動生成代碼,程式設計師:這不真實,我要失業
    這就是 OpenAI CEO Sam Altman 剛剛介紹的最新研究成果——根據函數籤名和注釋,利用語言模型自動生成 Python 代碼。這個語言模型用到了和 OpenAI 的 GPT 模型相同的無監督技術。為了讓模型學會「寫代碼」,研究人員在微軟的超級計算機上,藉助數千個開源 GitHub 庫裡的代碼對該模型進行了微調。
  • 吳恩達Deeplearning.ai課程學習全體驗:深度學習必備課程
    對於深度學習背後的數學和編程概念,吳恩達也會進行循序漸進的耐心講解,保證學生可以對數學與代碼保持興趣。 課程資料與工具 作業具有非常好的引導順序結構,你在每個空格中只需寫兩到三行代碼。如果你了解向量化等概念,你也可以用一行的長度完成大多數編程題!
  • 吳恩達Deeplearning.ai課程學習全體驗:深度學習必備課程(已獲證書)
    吳恩達最近推出的 deeplearning.ai 課程就是這樣的存在。該課程一在 coursera 上發布,我立即註冊並花了四個晚上觀看其中的講座、參加考試、完成編程作業並通過了課程。深度學習從業者和機器學習工程師通常會把大量時間花費在 Keras 與 TensorFlow 這樣的抽象工作中。
  • 推薦你幾款編程軟體讓你迅速成為程式設計師
    作為程式設計師,好的編程軟體可以讓你快速提高工作效率,作為新入門的準程式設計師,想要從哪款軟體入手比較好呢?今天小編就來向大家推薦幾款比好好用的編程軟體進qun:667918001,免費領取Javaziliao1.Visual studio是一款由美國微軟公司開發的開發工具集,簡稱VS,它包括了整個軟體的生命周期所需要的大部分工具,比如UML工具,代碼管控工具
  • Facebook AI 用深度學習實現程式語言轉換,代碼庫遷移不再困難!
    【新智元導讀】從舊式程式語言(例如COBOL)到現代替代語言(例如Java或C ++)的代碼庫遷移是一項艱巨的任務,Facebook AI開發了Transcoder,這是一個完全自監督的神經轉編譯器系統,可以使代碼遷移變得更加輕鬆和高效。
  • 程式設計師們,請你們不要排斥零代碼
    但這不是重點,我們想要達成的目標,是讓現役程式設計師做點真正有價值的活,而把那些重複性的開發工作完全削減。稱為「零代碼」,的確包含一些市場宣言的意圖成分。零代碼平臺替代哪些軟體開發工作?概括來說,以明道云為代表的零代碼平臺主要用於企業中後臺應用領域,尤其是圍繞數據管理和工作流相關的應用類別,他們一般都用於企業內部,有時候也會延伸到外部客戶和合作夥伴。
  • 機器人也會編程了 AI完爆初級程式設計師
    那麼有沒有什麼行業是不能替代的呢?之前有人說:程式設計師。如今看來,程式設計師已經能夠編一段代碼幫自己寫程序了。真不知道是改恭喜程式設計師,還是為他們默哀……  當然,根據最新消息顯示,這款會編程的AI還處於初級階段。能夠打敗初級程式設計師,但是對於中高段位程式設計師,AI還是不行的。
  • 吳恩達重磅回歸,成立創業公司Deeplearning.ai
    有趣的是,吳恩達選擇創業公司的地址是在百度 Synnyvale 人工智慧產業園裡——和他在百度時的辦公室是同一個位置Deeplearning.ai 官網連結:https://www.deeplearning.ai/目前依然不清楚吳恩達是否在百度任職期間就開始了其項目 Deeplearning.ai。
  • 淺淡代碼開發編輯器Sublime,Atom,Brackets區別及使用體驗
    有時作為開發人員很糾結哪個編輯器更好用選擇哪款軟體來開發。作為程序開發10年的老程序猿,經歷了前端開發和後端開的經驗,在使用編輯工具了給大家介紹一下有哪些工具和使用感受,如何根據自己的情況選擇合適的開發編輯器工具?代碼編輯器有哪些?
  • AI從其他程序偷代碼,來編寫自己的程序
    這樣一來就方便多了,人類無需熟知代碼也可以完成簡單的程序。麻省理工學院的Armando Solar-Lezama(並非開發者)說道:「一瞬間,人們的生產效率會直線上升,他們可以搭建出以前無法搭建的系統。」
  • 程式設計師吐槽女博士:一個搞算法的,竟然問tab和空格混用怎麼解決
    程式設計師吐槽女博士:一個搞算法的,竟然問tab和空格混用怎麼解決!隨著現在網際網路公司的要求越來越高,很多公司在面試的時候都會要求程式設計師會一點算法知識。一個好的算法不僅是編寫程序的模型,更是能保障程序正確執行又能提高效率不可或缺的一部分,同時學習算法的還能提高自己的編程能力。近日,一位程式設計師吐糟同組搞算法的女博士,一直問一些弱智的問題,比如,怎麼知道我用的是python2還是python3?tab和空格混用怎麼解決?print家括號是python2的要求?c++怎麼釋放new申請的動態數組?