Python文檔字符串生成器:基於CodeBERT,支持Google、Numpy等多種...

2020-11-28 澎湃新聞

木易 發自 凹非寺

量子位 報導 | 公眾號 QbitAI

又一款懶人神器問世了:

Visual Studio Code的擴展,基於CodeBERT的Python文檔字符串生成器。

看來現在,這群偷「懶」的程式設計師們連文檔字符串都不想自己寫了。

基於CodeBERT的生成器

跟正常的DocStrings用法一樣,你只需要輸入三引號「「」」」,之後按Enter,便能調用這個工具。就像這樣:

並且,這個生成器還可以在幾種不同類型的文檔字符串格式之間進行選擇。

而這個工具,不僅僅能夠幫助寫代碼的人,還可以方便後來人讀代碼。可以說是非常方便的一個擴展了。

這個工具的本質,就是一個自然語言識別的AI,它能夠識別你所寫代碼的內容,然後輸出對應的字符串。

具體是如何識別的,該AI的作者是這麼介紹的:

參數類型是通過PEP 484類型、默認值和var標籤進行識別的。

識別輸入之後便是推斷,這之間進行訓練的方法,也並不複雜,通過CodeBERT便可以實現。

CodeBERT是一種雙模預訓練模型,它可以捕捉自然語言和程式語言之間的語義連接,是目前已知的第一個大型 NL-PL(自然語言-程式語言)預訓練模型。

在訓練過程中,使用 CodeSearchNet 語料庫作為訓練數據,並使用 CodeBERT 中的 Code2NL微調任務。

之後,進行的推斷基準測試如下:

從上圖也能看出,在不同的推斷基準測試中,所需要的生成時間都很短(2s內),這體現在操作上的話,就是延遲。

目前,這個生成器可以支持識別args、kwargs、decorators和errors等參數類型。

此外,還可以輸出Google、docBlockr、Numpy、Sphinx等Docstring格式,PEP0257類型的格式,也即將上線。

使用方法

1、從容器中運行模型推斷服務

具有GPU的話:在安裝nvidia-docker後,運行docker run-it-d-GPU 0-p 5000:5000 gray kode/ai-docstring。

只有CPU:運行docker run-it-d-p 5000:5000 gray kode/ai-docstring。

2、在VSCode中安裝擴展並使用

光標必須在定義正下方的行上,以生成完全自動填充的文檔字符串。

用三重引號「「」」或『』』」打開文檔字符串後,按Enter鍵;

鍵盤快捷鍵是ctrl+shift+2,Mac為cmd+shift+2。

網友討論

該生成器一經發布,便引起了網友們的討論。

有網友認為這是一項非常便利的技術,非常期待:

不過,也有網友認為這項技術仍具有不小的局限性:

比如這位網友認為:更常見的注釋,是在代碼中沒有立即出現的上下文之間添加內容。

不過,雖然有局限,但是人總是在「懶」的過程中變得更「懶」(狗頭)。

比如jQuery的流行,是因為開發者懶得為DOM編寫跨瀏覽器兼容性代碼;

而之後Angular.js的流行,是因為開發者連DOM都懶得操作。

所以,還是非常期待這個擴展的後續,這些程式設計師能不能針對這些局限性進一步偷懶的。

獲取資源

目前這個擴展已經在Visual Studio Code上免費上線。

進入連結即可獲取資源:

https://marketplace.visualstudio.com/items?itemName=graykode.ai-docstring

也可以通過Github獲取源文件:

https://github.com/graykode/ai-docstring

— 完 —

本文系網易新聞•網易號特色內容激勵計劃籤約帳號【量子位】原創內容,未經帳號授權,禁止隨意轉載。

原標題:《Python文檔字符串生成器:基於CodeBERT,支持Google、Numpy等多種輸出格式》

閱讀原文

相關焦點

  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔
  • 學習筆記,從NumPy到Scrapy,學習Python不能錯過這些庫
    在網絡上看到幾位前輩寫了關於python深度學習庫的文章,對於小小白來說,因為我剛開始學python,我得承認自己看完後依然覺得雲裡霧裡的,不知道這些庫到底對我有什麼用處。所以我到網絡上搜集補充關於這些庫的說明內容,感覺在這個整理資料的過程中,對於這些python程序庫了解了更多,以下是我整理的學習筆記。
  • python數據科學系列:numpy入門詳細教程
    numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快numpy的兩個重要對象是ndarray和ufunc,其中前者是數據結構的基礎,後者是接口方法的基礎ufunc,通函數,其意義是可以像執行標量運算一樣執行數組運算,本質即是通過隱式的循環對各個位置依次進行標量運算
  • 好程式設計師Python培訓分享numpy簡介
    因此,當涉及到數學任務時,它形成了一種基於Python的MATLAB的快速替代。 二、numpy安裝 numpy要求python版本在3.5以上 1.windows下的安裝 · pip安裝 python -m pip install
  • 如果不懂Numpy,請別說自己是Python程式設計師
    幸運的是,後來我遇到了 numpy 這個神器。numpy 是 python 科學計算的基礎軟體包,提供多了維數組對象,多種派生對象(掩碼數組、矩陣等)以及用於快速操作數組的函數及 API,它包括數學、邏輯、數組形狀變換、排序、選擇、I/O 、離散傅立葉變換、基本線性代數、基本統計運算、隨機模擬等等。
  • ...微軟&哈工大最新提出 CodeBERT 模型,支持自然-編程雙語處理
    具體來說,CodeBERT抓住了自然語言和程式語言之間的語義聯繫,能夠支持自然語言代碼搜索等NL-PL理解任務以及一系列像代碼生成這樣的生成任務。 在這部分有兩個數據生成器,分別是NL生成器和PL生成器,這兩個生成器都用於隨機掩碼位置集(randomly masked positions)生成合理的備選方案。另外,還有一個學習生成器用來檢測一個詞是否為原詞,其背後原理是一個二進位分類器,這裡與GAN不同的是,如果生成器碰巧產生正確的Token,則該Token的標籤是「real」而不是「fake」。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    前面兩篇已經講了傳遞數值/指針/字符串參數、傳遞結構體參數的例子,大家可以回看一下,這樣可以更好的理解本次要講的內容。詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    越來越多的基於 Python 的科學和數學軟體包使用 NumPy 數組,雖然這些工具通常都支持 Python 的原生數組作為參數,但它們在處理之前會還是會將輸入的數組轉換為 NumPy 的數組,而且也通常輸出為 NumPy 數組。在 Python 的圈子裡,NumPy 的重要性和普遍性日趨增強。
  • ImagePy——UI界面支持開放插件的Python開源圖像處理框架
    它的 UI 接口、圖像數據結構和表數據結構分別是基於 wxpython、numpy 和 pandas 的。此外,它支持任何基於 numpy 和 pandas 的插件,這些插件可以輕鬆地在 scipy.ndimage、scikit-image、simpleitk、opencv 和其他圖像處理庫之間進行通信。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    基於liunx系統的python教程,課程裡也有liunx操作的詳細教學,不用擔心學習時不會操作liunx系統。Mov 1-2在線編譯工具weblde使用之指南.mov 2-1如何在列表,字典,集合中根據條件.MOV 2-2 3 4命名 統計 字典.mov 2-5公共鍵.mov 2-6 如何讓字典保持有序.mov 2-7歷史記錄.mov 3-1 2迭代器.mov 3-3如何使用生成器函數實現迭代對象
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    尹老師,數據科學家,浙江大學物理學博士,浙江某高校數據科學專業負責人,兼任某網絡科技上市公司大數據總監,受聘擔任多家大數據教學機構主講教師,開發多套python高級編程、機器學習、網絡爬蟲與文本挖掘系列課程,10+年python軟體開發數據產品經驗,熟悉R Java等多種程式語言,具有豐富的python統計建模、數據挖掘、大數據技術教學經驗,先後為中國交通銀行,平安保險公司等數十家知名機構主講
  • Python:一篇文章掌握Numpy的基本用法
    This could mean that an intermediate result is being cached.1000 loops, best of 3: 128 µs per loop從上面的運行結果可以看出,numpy的向量化運算的效率要遠遠高於python的循環遍歷運算(效率相差好幾百倍)。
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • Numpy入門詳細教程
    >numpy入門詳細教程python數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快n
  • 值得收藏的 NumPy 小抄表(含主要語法、代碼)
    axis 0 通常指行axis 1 通常指列操作描述文檔np.array([1,2,3])一維數組https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.arraynp.array([(1,2,3),(4,5,6)])二維數組https://numpy.org
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • 簡約而不簡單|值得收藏的Numpy小抄表(含主要語法、代碼)
    ),(4,5,6)])二維數組https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.arraynp.arange(start,stop,step)等差數組https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html佔位符操作描述文檔
  • 真的了解字符串拼接嗎?用Python拼接字符串的常用方法及性能分析
    本篇開始之前我們先看一下Python之禪中對於編碼的一些建議:Python之禪(import this試試看)中有一句說得很好:「Simple is better than complex」這句話解釋為:簡單優於複雜,編碼過程中我們的代碼應該是簡潔的……「In the face of ambiguity, refuse the temptation to guess.」當存在多種可能
  • Python開發簡單爬蟲【學習資料總結】
    將URL存放在關係型數據中 將URL存儲在緩存資料庫中 三、網頁下載器和urllib2模塊 網頁下載器類似於瀏覽器,會將網際網路對應的網頁以HTML的形式下載到本地,存儲成本地文件或內存字符串,然後進行後續的分析。