PapersWithCode發(fā)布代碼完整性自查清單:想獲得更多星,你需要注意這五項(xiàng)
如何恰當(dāng)?shù)靥峤淮a,才能既保證研究的可復(fù)現(xiàn)性,又能擴(kuò)大傳播?近日,PapersWithCode 發(fā)布了機(jī)器學(xué)習(xí)代碼完整性自查清單。目前,該清單已成為 NeurIPS 2020 代碼提交流程的一部分。
可復(fù)現(xiàn)性是科學(xué)領(lǐng)域長期關(guān)注的話題,近期人工智能和機(jī)器學(xué)習(xí)社區(qū)也對此投入了更多關(guān)注。例如 ICML、ICLR 和 NeurIPS 這些頂級學(xué)術(shù)會議都在努力推進(jìn)將實(shí)驗(yàn)代碼和數(shù)據(jù)作為評審材料的一部分提交,并鼓勵作者在評審或出版過程中提交代碼以幫助結(jié)果可復(fù)現(xiàn)。
加拿大麥吉爾大學(xué)副教授、Facebook 蒙特利爾 FAIR 實(shí)驗(yàn)室負(fù)責(zé)人 Joelle Pineau 多次探討該領(lǐng)域的可復(fù)現(xiàn)問題,并在去年底發(fā)布了可復(fù)現(xiàn)性檢查清單。但是這份清單中的大部分內(nèi)容與論文本身的構(gòu)成有關(guān),對于代碼開源提供的指導(dǎo)較少。
最近,Papers with Code 聯(lián)合創(chuàng)始人 Robert Stojnic 發(fā)布了一份機(jī)器學(xué)習(xí)代碼完整性自查清單,或許可以幫助社區(qū)部分地解決這一難題。
Papers with Code 網(wǎng)站收集了大量論文實(shí)現(xiàn)集合和最佳實(shí)踐。該團(tuán)隊(duì)對這些最佳實(shí)踐進(jìn)行了總結(jié),得出一份機(jī)器學(xué)習(xí)代碼完整性自查清單。目前該清單已成為 NeurIPS 2020 代碼提交流程的一部分,并且將會提供給評審人員使用。
清單項(xiàng)目地址:https://github.com/paperswithcode/releasing-research-code
機(jī)器學(xué)習(xí)代碼完整性自查清單
為鼓勵復(fù)現(xiàn)性,幫助社區(qū)成員基于已發(fā)表工作更輕松地構(gòu)建新的項(xiàng)目,Papers with Code 團(tuán)隊(duì)發(fā)布了機(jī)器學(xué)習(xí)完整性自查清單。
該清單基于腳本等評估代碼庫的完整性,共包含五大項(xiàng):
- 依賴項(xiàng)
- 訓(xùn)練腳本
- 評估腳本
- 預(yù)訓(xùn)練模型
- 結(jié)果
該團(tuán)隊(duì)對 NeurIPS 2019 論文的官方 repo 進(jìn)行分析后發(fā)現(xiàn),代碼完整性越高,項(xiàng)目的 GitHub 星數(shù)越多。
既然如此,我們趕快來看這五項(xiàng)的具體內(nèi)容,并實(shí)施起來吧。
1. 依賴項(xiàng)
如果你用的語言是 Python,那么當(dāng)使用 pip 和 virtualenv 時,你需要提供 requirements.txt 文件;當(dāng)使用 anaconda 時,你需要提供 environment.yml 文件;當(dāng)使用的是代碼庫時,你需要提供 setup.py。
在 README.md 中解釋如何安裝依賴項(xiàng)是一種很好的做法。假設(shè)用戶具備極少的背景知識,編寫 README 文件時盡量給出清晰完整的說明。因?yàn)槿绻脩魺o法設(shè)置好依賴項(xiàng),那么他們大概率不會繼續(xù)看你的代碼。
如果想提供整體可復(fù)現(xiàn)的環(huán)境,你可以考慮使用 Docker,把環(huán)境的 Docker 鏡像上傳到 Dockerhub。
2. 訓(xùn)練腳本
代碼應(yīng)包含用來實(shí)現(xiàn)論文結(jié)果的訓(xùn)練腳本,也就是說你應(yīng)該展示獲得結(jié)果的過程中所使用的超參數(shù)和 trick。為了將效用最大化,理想情況下寫代碼時你的腦海中應(yīng)當(dāng)有一些擴(kuò)展場景:如果用戶也想在他們自己的數(shù)據(jù)集上使用相同的訓(xùn)練腳本呢?
你可以提供一個完備的命令行包裝器(如 train.py)作為用戶的切入點(diǎn)。
3. 評估腳本
模型評估和實(shí)驗(yàn)通常細(xì)節(jié)較多,在論文中常常無法得到詳細(xì)地解釋。這就是提交評估模型或運(yùn)行實(shí)驗(yàn)的確切代碼有助于完整描述流程的原因所在。而且,這也能幫助用戶信任和理解你的研究。
你可以提供一個完備的命令行包裝器(如 eval.py)作為用戶的切入點(diǎn)。
4. 預(yù)訓(xùn)練模型
從頭訓(xùn)練模型需要大量時間和成本。增加結(jié)果可信度的一種有效方法是提供預(yù)訓(xùn)練模型,使社區(qū)可以評估并獲得最終結(jié)果。這意味著用戶不用重新訓(xùn)練就能看到結(jié)果是可信的。
它還有一個用處,即有助于針對下游任務(wù)進(jìn)行微調(diào)。發(fā)布預(yù)訓(xùn)練模型后,其他人能夠?qū)⑵鋺?yīng)用于自己的數(shù)據(jù)集。
最后,有些用戶可能想試驗(yàn)?zāi)愕哪P驮谀承颖緮?shù)據(jù)上是否有效。提供預(yù)訓(xùn)練模型能夠讓用戶了解你的研究并進(jìn)行試驗(yàn),從而理解論文的成果。
5. 結(jié)果
README 文件內(nèi)應(yīng)包括結(jié)果和能夠復(fù)現(xiàn)這些結(jié)果的腳本。結(jié)果表格能讓用戶快速了解從這個 repo 中能夠期待什么結(jié)果。
README.md 模板中的示例(模板地址:https://github.com/paperswithcode/releasing-research-code/blob/master/templates/README.md)
能夠復(fù)現(xiàn)結(jié)果的指令給用戶提供了另外一個切入點(diǎn),能夠直接促進(jìn)可復(fù)現(xiàn)性。在一些情況下,論文的主要結(jié)果只有一張圖,對于沒有讀過論文的用戶,理解起來會很困難。
你還可以放置包含其他論文最新結(jié)果的完整排行榜鏈接,這有助于用戶進(jìn)一步理解你的研究結(jié)果。
具備代碼完整性的項(xiàng)目示例
此外,該團(tuán)隊(duì)還提供了多個具備代碼完整性的項(xiàng)目,以及有助于代碼提交的額外資源。
NeurIPS 2019 項(xiàng)目示例
- 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
額外資源
預(yù)訓(xùn)練模型文件托管平臺:
- Zenodo
- GitHub Releases
- Google Drive
- Dropbox
- AWS S3
模型文件管理工具:
- RClone
標(biāo)準(zhǔn)化模型界面:
- PyTorch Hub
- Tensorflow Hub
- Hugging Face NLP models
結(jié)果排行榜:
- Papers with Code leaderboards
- CodaLab
- NLP Progress
- EvalAI
- Weights & Biases - Benchmarks
制作項(xiàng)目頁面工具:
- GitHub pages
- Fastpages
制作 demo 和教程工具:
- Google Colab
- Binder
- Streamlit