PapersWithCode發布代碼完整性自查清單:想獲得更多星,你需要注意...

2020-12-17 澎湃新聞

機器之心

選自Medium

機器之心編譯

參與:魔王、小舟

如何恰當地提交代碼,才能既保證研究的可復現性,又能擴大傳播?近日,PapersWithCode 發布了機器學習代碼完整性自查清單。目前,該清單已成為 NeurIPS 2020 代碼提交流程的一部分。

可復現性是科學領域長期關注的話題,近期人工智慧和機器學習社區也對此投入了更多關注。例如 ICML、ICLR 和 NeurIPS 這些頂級學術會議都在努力推進將實驗代碼和數據作為評審材料的一部分提交,並鼓勵作者在評審或出版過程中提交代碼以幫助結果可復現。

加拿大麥吉爾大學副教授、Facebook 蒙特婁 FAIR 實驗室負責人 Joelle Pineau 多次探討該領域的可復現問題,並在去年底發布了可復現性檢查清單。但是這份清單中的大部分內容與論文本身的構成有關,對於代碼開源提供的指導較少。

最近,Papers with Code 聯合創始人 Robert Stojnic 發布了一份機器學習代碼完整性自查清單,或許可以幫助社區部分地解決這一難題。

Papers with Code 網站收集了大量論文實現集合和最佳實踐。該團隊對這些最佳實踐進行了總結,得出一份機器學習代碼完整性自查清單。目前該清單已成為 NeurIPS 2020 代碼提交流程的一部分,並且將會提供給評審人員使用。

清單項目地址:https://github.com/paperswithcode/releasing-research-code

機器學習代碼完整性自查清單

為鼓勵復現性,幫助社區成員基於已發表工作更輕鬆地構建新的項目,Papers with Code 團隊發布了機器學習完整性自查清單。

該清單基於腳本等評估代碼庫的完整性,共包含五大項:

依賴項

訓練腳本

評估腳本

預訓練模型

結果

該團隊對 NeurIPS 2019 論文的官方 repo 進行分析後發現,代碼完整性越高,項目的 GitHub 星數越多。

既然如此,我們趕快來看這五項的具體內容,並實施起來吧。

1. 依賴項

如果你用的語言是 Python,那麼當使用 pip 和 virtualenv 時,你需要提供 requirements.txt 文件;當使用 anaconda 時,你需要提供 environment.yml 文件;當使用的是代碼庫時,你需要提供 setup.py。

在 README.md 中解釋如何安裝依賴項是一種很好的做法。假設用戶具備極少的背景知識,編寫 README 文件時儘量給出清晰完整的說明。因為如果用戶無法設置好依賴項,那麼他們大概率不會繼續看你的代碼。

如果想提供整體可復現的環境,你可以考慮使用 Docker,把環境的 Docker 鏡像上傳到 Dockerhub。

2. 訓練腳本

代碼應包含用來實現論文結果的訓練腳本,也就是說你應該展示獲得結果的過程中所使用的超參數和 trick。為了將效用最大化,理想情況下寫代碼時你的腦海中應當有一些擴展場景:如果用戶也想在他們自己的數據集上使用相同的訓練腳本呢?

你可以提供一個完備的命令行包裝器(如 train.py)作為用戶的切入點。

3. 評估腳本

模型評估和實驗通常細節較多,在論文中常常無法得到詳細地解釋。這就是提交評估模型或運行實驗的確切代碼有助於完整描述流程的原因所在。而且,這也能幫助用戶信任和理解你的研究。

你可以提供一個完備的命令行包裝器(如 eval.py)作為用戶的切入點。

4. 預訓練模型

從頭訓練模型需要大量時間和成本。增加結果可信度的一種有效方法是提供預訓練模型,使社區可以評估並獲得最終結果。這意味著用戶不用重新訓練就能看到結果是可信的。

它還有一個用處,即有助於針對下遊任務進行微調。發布預訓練模型後,其他人能夠將其應用於自己的數據集。

最後,有些用戶可能想試驗你的模型在某些樣本數據上是否有效。提供預訓練模型能夠讓用戶了解你的研究並進行試驗,從而理解論文的成果。

5. 結果

README 文件內應包括結果和能夠復現這些結果的腳本。結果表格能讓用戶快速了解從這個 repo 中能夠期待什麼結果。

README.md 模板中的示例(模板地址:https://github.com/paperswithcode/releasing-research-code/blob/master/templates/README.md)

能夠復現結果的指令給用戶提供了另外一個切入點,能夠直接促進可復現性。在一些情況下,論文的主要結果只有一張圖,對於沒有讀過論文的用戶,理解起來會很困難。

你還可以放置包含其他論文最新結果的完整排行榜連結,這有助於用戶進一步理解你的研究結果。

具備代碼完整性的項目示例

此外,該團隊還提供了多個具備代碼完整性的項目,以及有助於代碼提交的額外資源。

NeurIPS 2019 項目示例

https://github.com/kakaobrain/fast-autoaugment

https://github.com/bknyaz/graph_attention_pool

https://github.com/eth-sri/eran

https://github.com/NVlabs/selfsupervised-denoising

https://github.com/facebookresearch/FixRes

額外資源

預訓練模型文件託管平臺:

Zenodo

GitHub Releases

Google Drive

Dropbox

AWS S3

模型文件管理工具:

RClone

標準化模型界面:

PyTorch Hub

Tensorflow Hub

Hugging Face NLP models

結果排行榜:

Papers with Code leaderboards

CodaLab

NLP Progress

EvalAI

Weights & Biases - Benchmarks

製作項目頁面工具:

GitHub pages

Fastpages

製作 demo 和教程工具:

Google Colab

Binder

Streamlit

參考連結:

https://medium.com/paperswithcode/ml-code-completeness-checklist-e9127b168501

https://github.com/paperswithcode/releasing-research-code

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

原標題:《PapersWithCode發布代碼完整性自查清單:想獲得更多星,你需要注意這五項》

閱讀原文

相關焦點

  • 機器學習論文復現,你需要注意的五大問題
    如果一篇論文在發表時開源了代碼,那麼 README 就是你著手開始復現項目的文檔之一。好的 README 文件通常具備以下幾個組成部分:依賴項列表、訓練腳本、評估腳本、預訓練模型以及運行腳本得到的結果。實際上,這些內容已經在 Papers with Code 發布的《機器學習代碼完整性自查清單》中列出(該清單已成為 NeurIPS 2020 代碼提交流程的一部分)。
  • 機器學習論文復現,這五大問題你需要注意
    實際上,這些內容已經在 Papers with Code 發布的《機器學習代碼完整性自查清單》中列出(該清單已成為 NeurIPS 2020 代碼提交流程的一部分)。該清單受到麥吉爾大學副教授、Facebook 蒙特婁 FAIR 實驗室負責人 Joelle Pineau 的啟發。
  • Papers with Code與arXiv達成合作,論文、代碼可一併查看啦!
    Papers with Code 是一個總結了機器學習論文及其代碼實現的網站。大多數論文都是有GitHub代碼的。這個網站最好的地方就是對機器學習做了任務分類,檢索對應的模型非常方便。早在18年Paper With Code創立時就轟動一時,僅創立一年就被Facebook收購。
  • Papers With Code:一文看盡深度學習這半年
    Google AI隨後開源了這篇論文的代碼,一個月的時間,BERT在GitHub上已經獲得8000多次的標星,而且還在快速增加。論文:https://arxiv.org/abs/1810.04805GitHub地址:https://github.com/google-research/bert
  • 一切為了開放科學,Papers with Code新增CS、物理、數學、統計學等...
    這次它向多個科學領域擴展,除了機器學習以外,還增加了物理學、數學、計算機科學、統計學和天文學的論文及代碼,並且同樣支持在 arXiv 頁面上添加代碼連結。傳送門:https://portal.paperswithcode.com/也就是說,Papers with Code 將不再只是機器學習資源網站,而是向著多學科資源平臺一路狂奔。
  • Papers with Code新增CS、物理、數學、統計學等多個學科
    傳送門:https://portal.paperswithcode.com/也就是說,Papers with Code 將不再只是機器學習資源網站,而是向著多學科資源平臺一路狂奔。我們希望能夠增強所有科學領域的代碼可用性,使之成為研究規範,幫助整個研究社區共同快速進步!Papers with Code 最初旨在解決機器學習社區面臨的問題,如可訪問性、可復現性和信息過載。解決辦法包括將論文與代碼對應起來、提取科學結果、制定任務分類、創建方法庫等。共有 6000 多名個人編輯為這些免費資源做出努力。
  • Papers with Code新增CS、物理、數學等多學科
    這次它向多個科學領域擴展,除了機器學習以外,還增加了物理學、數學、計算機科學、統計學和天文學的論文及代碼,並且同樣支持在 arXiv 頁面上添加代碼連結。機器學習資源網站 Papers with Code 自創立以來,憑藉豐富的開放資源和卓越的社區服務,成為機器學習研究者最常用的資源網站之一。
  • 研究利器Papers with Code新增物理、數學、統計學等多個學科,提交論文+上傳代碼一步到位
    這次它向多個科學領域擴展,除了機器學習以外,還增加了物理學、數學、計算機科學、統計學和天文學的論文及代碼,並且同樣支持在 arXiv 頁面上添加代碼連結。 近期,Papers with Code 宣布增加新的科學領域:物理學、數學、計算機科學、統計學和天文學,並且同樣支持在 arXiv 頁面上添加代碼連結。
  • 強強聯合,Papers with Code攜手arXiv,上傳論文、提交代碼一步到位
    最近,它又有了新舉措:與論文預印本平臺 arXiv 展開合作,支持在 arXiv 頁面上添加代碼連結。現在,arXiv 上機器學習論文摘要頁面的下方出現了一個 Code 按鈕,它可以連結論文相關的官方和社區代碼實現:arXiv 論文頁面新增的 Code 部分(Papers with Code 提供支持)。可提供官方代碼和社區代碼。
  • Papers with Code攜手arXiv,上傳論文、提交代碼一步到位
    可提供官方代碼和社區代碼。如何使用?論文作者登錄 arXiv 網站,點擊 Papers with Code 圖標即可添加官方代碼(參見下圖箭頭)。然後,頁面轉向 Papers with Code 網站,作者可以在那裡添加代碼。
  • VS Code上那些好用的JS代碼片段
    但是在使用過程中,我們有時不需要所有的功能,例如Python擴展(超過220萬次安裝)提供很多支持,IntelliSense、代碼格式化等等,而我們往往指示想要快速查汝之行有用且重複的較小代碼塊,例如循環或條件語句。  現在已經有人編寫了這種小的代碼塊,並且打包好供其他程式設計師使用。
  • Goodbye Clean Code,這是對代碼編寫與重構的新感悟
    代碼也一樣,有些重複使用的方法可以編入相同的函數,同類函數之間的關係可以編入類與對象。這樣代碼整體能顯得更加「乾淨」。但需要注意的是,並不是說最緊湊的代碼就是最好的,例如類的繼承,如果說讀懂當前類需要往上翻好幾個類,這種體驗並不友好,似乎代碼的邏輯跳躍讓人很難跟著走。所以 Clean Code 到底好不好?
  • 6 個實用的 Code Review 實踐技巧
    以我們的經驗來看,優秀的 code reviews 實踐對工程師的成長和我們所打造的產品質量有著巨大影響。這樣一個場景相信很多人都很熟悉:你剛剛加入一個新團隊,領導很快給你分配了一個編碼任務。作為新人,你特別想表現自己,因為你想秀一下自己的編碼水平。
  • 這份自查清單幫你理清思路
    這裡有一份備忘清單,請查收。任何科研項目都是系統性的,機器學習項目也不例外,它包含一系列大大小小、或繁或簡的要素和組件,如討論、準備工作、提出問題、模型構建和優化調整等。在這種情況下,開發者很容易漏掉一些重要的東西。這時就需要對項目中經涉及到的任務做一份詳盡的清單。
  • 10 個好用的 Visual Studio Code 插件「神器」
    無疑,插件對你的工作效率和工作方式有著很大影響。這就是為什麼我們接下來會看看 Visual Studio Code 的插件清單。我們改變工具,之後,工具也會改變我們。——Jeff Bezos注意:所有這些插件都可以在 Visual Studio Marketplace 上面免費獲取。
  • 微軟宣布推出 IPE,解決 Linux 的代碼完整性問題
    微軟發布了有關該公司一直致力的 Linux 內核新項目的詳細信息。
  • 編寫Windows Kernel Shellcode
    最近有個想法,直接利用內核代碼執行權限,來寫文件,於是就抄起了VS,開始寫shellcode,開始以為和R3下面寫shellcode一樣簡單。新建個驅動的項目,按照下面修改項目的屬性,然後動態獲取API,再調API完成自己的功能。項目屬性配置好以後,開始寫shellcode,計算要使用的內核API的名稱hash,為了方便計算,我寫了一個簡單的MFC程序。
  • 6 個實用的Code Review 實踐技巧
    作為新人,你特別想表現自己,因為你想秀一下自己的編碼水平。於是,你接下來做了這些事:你為了完成任務瘋狂地敲了三周代碼;你將一個包含大約 1000 行新代碼的 Pull Request 提交評審;你收到兩條關於 code style 的評論,以及一個關於評審人表示他看不懂這些代碼用途的問題;你修復 code style 並回答評審人的問題,然後評審人通過你寫的代碼;你把代碼分支合併到 Master
  • 朱嘉明薦文 | 訓練您團隊的代碼思維 Train Your People To Think in Code
    現在想一想,維根斯坦是嘗試將兩類思維相結合的先驅,他的"數學哲學"的歷史價值是被低估的。故本院將此文譯成中文,並以公眾號的方式發表,與大家共享,並期望得以傳播,引發更深入的思考與探討。 大多數公司可能認為代碼僅限於IT 部門的模糊角落,或者作為特定數據科學家群體的專屬領域。但是,設法使代碼成為在其業務中傳播分析的自然語言的組織通常比同行更快地成長和創新。採用以代碼為中心的方法將從三個方面使組織受益:首先,代碼思維允許公司將數據與數據分析完全分開,從而使團隊能夠獨立於一項來改進另一項。
  • 聊聊clean code
    比如我,從一個天天被罵代碼寫得爛的人,逐漸學習成長,到現在也能寫的出「人模人樣」的代碼來了。這期間算是積累了一點經驗心得,想和大家分享,拋磚引玉。本文主要針對面向對象編程的clean code來闡述,面向過程代碼的思路會比較不同,不在本文的討論範疇。代碼大部分時候是用來維護的,而不是用來實現功能的這個原則適用於大部分的工程。