計算機各個領域,如何重現一篇論文的工作?
有時候看到有些論文聲稱的效果不錯,想去重現一下,但論文限於篇幅有些細節沒有說清楚,這時候該如何重現論文的效果?
PS :大部分都是回答找作者,當然很多人會被拒絕,如果需要和前人工作比較又沒有代碼就比較難操作了
1. 到作者個人主頁找
2. 到github上找作者github頁面或者搜論文名字
3. 向作者發郵件要
4. 如果論文B的baseline包括了你想復現的論文A的工作,發郵件給論文B的作者。
如果上述方法都沒能得到代碼,那麼除非是大牛的有重大影響的工作,否則建議等等,看其他人有沒有復現成功的,不建議自己浪費時間復現,因為很可能是坑。如果你想把這個論文的工作當baseline的話,大可以找其他有代碼的工作當baseline,審稿人一般也是可以理解的。
如果實在實在沒辦法,一定要親自復現的話:
1. 建議要和作者郵件保持溝通,盡量多獲取一些論文中沒有提到的實現細節。
2. 確保數據集和作者論文中的一樣。如果數據集不一樣的話,就很難判斷復現是否成功。
3. 可以找一些和作者工作相似的代碼,確定代碼沒問題的情況下,可以在他們的代碼基礎上進行修改,和從零開始相比可以少踩一些坑。
通常都是直接發郵件要程序
所以你要重複造輪子?
學校實驗室里發paper只需要跑通幾個testbench或者demo就好了。寫tool是個很費時間精力的工作,能把代碼掛出來已經是滿分的良心+勇氣了啊。
當然可以去發郵件要代碼,記得老闆幫你出面成功率會大很多就是了…
同時用實驗室而未經商業化的tool的時候一定注意看其適用範圍。相應paper里沒寫的或者模糊的基本上就是沒有了…其實開發性能穩定的工具也不是實驗室的工作。被坑過幾次後就會變得特別喜歡搜到那種合適同時給錢就可以用的工具,一般都很靠譜。這個真的是日了狗了。 某某深度學習大牛的文章,問要代碼,說正在整理中,以後再給。 那好我自己實現,問一些論文細節,發了兩星期郵件都說不清楚,後來乾脆不回了。 真是對所謂的一些權威人士失望。。。
步驟如下:
1. 細讀論文,看看有沒有提及已經公開了相關實現和數據集。如果作者有個人主頁,或者這個項目的主頁,上去看看有沒有列出這篇文章相關的資源。
2. 發郵件去問問作者能否提供代碼和更完整數據。對多數人來講,不會得到什麼結果。所有有價值的代碼和數據,如果是直接可用且作者願意提供,多數情況下,早公開渠道比如個人主頁共享了。
3. 去諸如github搜索一下,看看是否有作者已經做了但沒有公開的實現,哪怕和論文所涉及版本不一致。然後還可以關注一下是否有同行已經實現的版本。
4. 沒有辦法,只能自己實現。這恰恰是CS PhD和合格工程師必須具備的水平。能看懂論文的最直接證據是你有能力繞開所有關鍵的坑,實現論文提出的核心演算法。有時候你不需要一個完整的系統實現,你可以有選擇的去模擬實現。
這裡需要指出,第4步似乎費時費事,但如果是你自己的領域,難度會大幅度降低。
細節沒有說清楚不是作者的問題,論文不是設計文檔,對無關核心的東西本來就不應該說太多,說的太多只會錯誤指引讀者注意力。因為這些細節問題,理解、實現時候的困難有一個專用名詞指代,叫「經驗」。最近剛好寫論文,各種方法都試過了。
1. 最好的是作者的主頁有代碼或github,這個真的是可遇不可求。
2. 還有就是在github上搜索論文裡面的關鍵詞,或者論文作者的名字,有一定幾率成功,我找到過一次。因為有的人會在代碼開頭寫一行注釋author:xxxxx。強烈建議自己的代碼都加上author,然後把readme寫好一點,方便自己,方便他人。都是淚。。。。
3. 發郵件,我給一二三四作者都發了,一個都不回,因為郵箱都是edu什麼的,有的都走了,然後我搜到第四作者的gmail,發了,這個回的快,但沒什麼卵用,說他沒有,不過他還是好心給我抄送到第一作者了,不過這都一個月了,啥消息都沒。
4. 幸好我早知道不靠譜,發郵件的同時自己實現。。。。沒有辦法的辦法,麻蛋,一個寒假都花在這上面了。。計算機專業的估計是最好重現的了吧。
大多數論文都不會把代碼公開的,原因嘛....都懂的
有些答主已經說了最常用的方法,發郵件去問。
但是想提3件事:
1,做實驗的時候憑良心吧,你只能相信作者的實驗結果。即使你自己做的效果跟論文不一樣,也有可能是你的錯誤。做對比實驗的時候,雖然工程技巧有高有低,但是只要不同的演算法條件設置都要一樣,這還是很公平公正的。論文一輩子都跟著你,注重學術聲譽。
2,有些方向代碼非常零散,不容易公開代碼。舉個例子,像我們普適計算領域,特點是多目標多任務,代碼並不是一個整體,非常零散,有時候想公開都比較麻煩。
3,其實很不幸,我做baseline對比的時候,很大概率是把別人的工作復現。有時候即使拿到代碼,也會發現代碼各種問題,有時候花力氣調好格式,但結果運行不出來。問作者拿代碼之前,要注意論文裡面別人提的實現方法(matlab還是python)。我用的matlab,對方用的python,時間複雜度方面差別會很大。
= = 大概大家都會留點黑魔法的。。。
某些大牛的博客里的源碼跑不出結果,你在下面問問他什麼情況,他都能要麼說你的步驟不對,要麼裝作看不見
按照思路實現一遍吧,要代碼很少有給的。
看看作者的主頁上有沒有提供相應的 TR,或者找找有沒有 Journal 版本的 paper。這些版本的 paper 可能會比會議版本的論文多一些細節和勘誤。
同問,自己水平低,老師給了篇人家研究了3-4年出成果的頂級SCI,光明白就。。。。 (本人本科生 →_→)
推薦閱讀: