如何寫好一篇高質量的IEEE/ACM Transaction級別的計算機科學論文?

作為一個博士生,一直為寫論文頭疼,讀過很多高質量論文,覺得寫的真好,但是輪到自己寫總是力不從心。 最討厭的是活生生的把一個A級別的idea寫成C質量的論文.....

在這裡的高質量限於IEEE/ACM Transaction級別,或者同等級別的Conference, 例如SIGKDD,CVPR,STOC,CCS之類

看過很多如何寫論文的文章或者視頻, 但都面向的是如何寫論文, 而不是如何寫Transaction級別的論文, 希望得到一些指點.


恭喜你已經有了一個A類別的idea和相應的實現以及數據,那麼接下來就是寫文章的問題了。計算機論文寫作還是有一定的規律可以遵循的。

首先,你需要判斷自己的文章是投往哪個A類期刊或者會議,是IEEE的還是ACM的。通常IEEE會議的格式和ACM會議的文章格式要求有所不同,我建議你在投論文之前先把該會議的Call For Papers好好研讀一番,弄清楚文章長度,需要使用的Latex或者Word模板以及匿名方式等一系列非技術性問題,然後再開始寫作。

在寫作之前,先問問自己如果這篇文章寫好以後給整個領域(community)的貢獻是什麼,這實際上是整個文章的靈魂,也就是你解決某個問題(problem)的方案(idea)。想清楚以後把它(們)按照重要性順序寫下來,這些就是你在Introduction裡面告訴讀者包括審稿人的contributions。貢獻可能是新演算法,新架構,新實現或者是前人沒有的insights。你在寫contributions的時候面向的讀者很有可能是自己,所以可能忽略了problem背景和定義,這些就可以慢慢在Introduction裡面填充。

這樣Introduction就寫好了,比如說:某某問題是實際中存在的一個問題,這個問題重要性是blah,blah,blah。之前發表的論文針對這個問題提出了三個有代表性的解決方案(此處引用可能至少三篇論文)。第一個解決方案甲大概做了一二三,但是沒做四;第二個解決方案乙做了一四,但是沒做二三;第三個解決方案丙做了一二三四,但是性能比較差。在這篇文章中,我們提出一個性能比較好並且同時做一二三四的解決方案。接下來寫我們這個解決方案是如何實現同時支持一二三四的情況下提升性能的。比如說用了新演算法,新架構或者新的實現,都可以。講完基本技術創新點以後就是contributions,把之前想好的貼上去就可以了。最後在Intro裡面加上後續內容組織,比如說第二章是相關工作,第三章是綜述,。。。

一般來說Intro寫完以後會寫一章相關工作(Related Work)。從最Related的論文開始寫起,比如說以上提到的三篇。這裡需要著重講的是,Related Work不是記流水賬(e.g.,甲用了idea A,乙用了idea B,丙用了idea C),而是要比較這些論文,闡述她們各自的優缺點。

Related Work寫完後,你需要寫一個Overview來總括你的問題和解決方案。我的經驗是最好想一個最最簡單的例子(Running Example),然後使用這個例子引出你要解決的問題。接著再把之前在Intro中提到的現有解決方案挨個說一遍,並且用那個案例表明三個解決方案的不足(這裡最好用實際數據)。最後把你的解決方案介紹一下,重點是與前人做的相比較。如果你用了一種新的演算法,你可以大概提一下這個演算法的思路以及實驗數據;如果是新架構,最好放一張架構圖上去,然後闡述一下新架構的優勢(以及劣勢)。在這一章介紹自己的idea的時候,你只需要概略描述即可,凡是涉及到技術細節的東西均可以引用後面的章節來節省頁面空間。

後面這一章就完全是技術細節了。如果是自己做的的話,這一章是最好寫的,因為你只需要把code/演算法/架構在紙上還原出來即可。注意由於頁面限制,一般來說這一章不可能包括所有細節,按重要性取捨吧。注意有些corner cases,如果很重要的話,千萬別省略。

技術細節講完了,如果頁面允許,你還可以大致講一講你的實現情況。比如說新的系統是在Linux上實現的,新加了20000行C代碼,1500行Python以及300行Bash script。C代碼主要幹什麼,Python主要幹什麼以及Bash script幹什麼,最好能與技術細節裡面所講的呼應。

自然地,技術細節和實現講完了就該講你是如何用實驗驗證你的解決方案支持你的contributions啦。根據上面的例子,你需要寫的是如何從實驗數據中展示你的解決方案支持一二三四並且性能不錯。支持一二三四這種是或否的問題比較容易說,但是性能不錯就需要和前人作品做大量比較了。柱狀圖,折線圖,表格等等數據展示手段,只要能說明問題都可以採用。這裡需要注意的是,只要你寫在論文裡面的文字或者是圖表,你都要想清楚背後的原因,最好能在論文里做充分的解釋。比方說,你採用了新的演算法,性能見表1,原因是複雜度降低了;你採用了新架構,性能提升見圖3,原因是新架構節省了內存拷貝。通常來說,新演算法或者架構會總體上提升性能,但也可能會有異常情況,即新方案比不過老方案的地方。這時需要格外注意,因為這是你的weaknesses,你需要用令人信服的說法向讀者展示這些異常情況存在的可能性較低,或者可以通過某種簡單方式避免。

如果寫到這裡你還有充足頁面可用,你可以試圖寫一個discussion章節來討論你的方案的缺點,以及未來有可能的改進情況。不要怕展示缺點,你越誠懇審稿人對你印象越好。如果你是故意遺漏新方法的一個很顯然的缺點,這會給審稿人非常不好的印象。你也可以提一些你的方案的其他應用等等。

最後就是結論啦,用一兩個段落概括一下解決的問題,解決思路以及貢獻就可以了,比較好寫。

如果你需要寫一些附錄,比如說文章里有幾個定理沒有給出證明,那可以在後面的Appendix章節中加入。通常Appendix審稿人不太會讀。

我還有一些小建議,希望能對你有所幫助:

1. 找到會議程序委員會(Program Committee,也就是審稿人)的頁面,然後看看哪些審稿人做得和你做的相關。如果有的話你應該在Related Work中引用他們的作品,因為大家都希望自己的論文被別人引用。不要怕有禮貌得指出他們的論文缺點,如果你說得對,審稿人看到會很高興的。

2. 論文提交前用你能找到的任何有效的書寫檢查軟體檢查一下拼寫錯誤或者簡單的語法錯誤,我知道有些審稿人會對這種小問題過敏,如果一篇論文中此類錯誤過多可能會導致直接悲劇。有條件的話,找一個英語為母語的人幫你最後把把關。這裡我推薦你如果可能的話找一個美國教授合作寫論文,可以節省很多時間。

3. 如果你之前沒中過2-tier或者3-tier的期刊或者會議,那麼可以先從這些著手,慢慢鍛煉。

祝你好運!

利益相關:計算機博士剛畢業,期間3篇CCS一作,1篇PLDI一作。


關於寫作的套路, @Terafer 的答案已經說的非常好了。這裡我主要補充一些在寫作前以及如果收到reject的審稿意見之後的個人經驗。

利益相關:計算機博士剛畢業,發過2篇trans(但並不算top的),一篇CCF A類會議,另被trans及CCF A類會議累計拒稿7次(還不包括直接因為topic不符被reject的)。。。

寫作前

在真正動筆前,和導師以及合作者的討論非常關鍵。事實上,一個idea有沒有達到A level,自己的感覺不一定準。如果導師或者有合作者發過比較多的A類,那他們的感覺就會是非常重要的。另外,討論的時候經常可以把原先idea中的漏洞暴露出來,而這對論文最後能不能錄取至關重要,因為你就可以想法設法在工作中去克服這些漏洞(至少可以自己主動討論出來作為文章的局限)。一般如果有較大的漏洞,自己又沒有主動討論,只要被reviewer指出,A類會議一定會直接給reject; 期刊的話看運氣,運氣比較好的話可能會給個major或者resubmit的機會。我導師就表達過類似如下的觀點: 要被A類的會議收,寧肯文章只有一個亮點,但沒有明顯的缺點。就算你的文章有很多亮點,但如果能找到1,2個明顯的缺點,就算這些缺陷不影響文章主要的貢獻,就錄取可能性而言會低很多。

在討論這一步如果沒能把缺陷討論清楚,那就只能等從review意見中去吸收了。這個代價比較大,通常會是多收穫一個reject。

另外,關於討論的時候怎麼做ppt,我之前有過一個回答,可以給大家參考。主要的思想就是討論問題的時候做一個討論問題的ppt,在寫作之前再做一個和文章目錄結構完全對的上號的另一個ppt。詳見:你在發表理科學術文章過程中有哪些經驗值得借鑒? - 樂也的回答

寫作中

這部分 @Terafer 的回答相當好,我就稍微再補充幾點我個人感覺特別重要的。

1. 文章的contribution一定要準確清楚地指名出來,但千萬不能overclaim。overclaim contribution,一旦被reviewer指出,幾乎是一擊致命的reject理由(無論是否是A類)。然後,和A-以下的會議期刊不同,要投A類,你就必須在保證不overclaim的情況下盡其所能渲染文章所能造成的影響力,比已有工作的顯著貢獻在哪兒。包括在intro,related work, disussion或者conclusion裡面充分闡明文章所提出的方法具有的潛在的影響力,相較於已有工作的亮點(可以不局限於文章本身針對的應用)。相對而言,A-以下的情況,只要claim的contribution是準確的,並且實驗驗證了,基本就可以了。

下面2點可能更針對我自己做的領域的,就是偏嚮應用的數據挖掘和分析。

2. 實驗驗證的數據集在可能的情況下,一定要2個或以上。不要覺得一個數據集已經很充分驗證方法了,再跑第二個結果反正也肯定是類似的。這一點千萬不要馬虎了,即使第二個數據集很難找到,也要盡量,實在不行也要用simulation之類的做補充。我就因為自己的問題吃過類似的虧,現在回想非常不划算。一個工作第一次投一個A類的會,只用了一個數據集,然後reject的一大理由就是驗證不夠充分。之後轉投一個trans補充了另一個數據集,review就都說實驗很充分,反而是文章的優點了(雖然文章還是有其他的問題,所以結果只是major)。其實第二個數據集一開始就有想到,當時覺得文章篇幅放不下,反正一個數據集也已經驗證的很清楚了,而且也有點懶得做,所以沒弄(但篇幅其實擠擠總會有的,而且後來一個星期不到就跑好了第二個數據集的實驗。。。)。雖然說我的文章問題不只是在實驗驗證,但它很可能成為原本borderline可出可進但變為reject的最後一根稻草。

3. 在具體闡述自己提出的方法的任何一個小步驟時,先講是基於怎樣的observation或者intuition,然後再根據這個intuition設計某種具體的演算法納入整個方法流程,最後再在實驗驗證部分針對這個小步驟做專門的驗證。這裡第一步的intuition要盡量使用大白話和例子讓非你小領域內的審稿人也能理解,這樣即使他看不太懂你的具體演算法設計,一般也會認可你的工作。(我聽說過一般如果找4個reviewer,很有可能兩個是你小領域的,而兩個只是大領域同行。) 換句話說,如果你用了一個很複雜的演算法,最後得到了一個還不錯的結果,但自己都沒法講清楚背後的intuition,為什麼會這樣,要投A類就非常吃力了。這裡還有一個很能加分的點,也是最近才學習到的,就是如果能把intuition和某種社會學,經濟學等非計算機領域的經典理論扯上點關係,能為文章增色一大塊。

收到reject審稿意見

這部分我可謂"經驗豐富"。。。我目前中的文章都是經過A類期刊或者會議至少reject過一次的文章(最後也都總算是中了trans或者CCF的A類會議,雖然trans並不是很top)。最長的在投出第一稿到到最後被某個trans錄用歷時20多個月,其間被三個A類會議或者trans reject過。。。

所以根據我的經驗先雞湯一下,要是自己和合作者、導師都覺得工作不錯,那即使被reject,也要堅持地繼續換地方投A,不要一下就完全喪失信心,覺得隨便投一個雜誌或者會議就算了。

reject的不同種類。會議的reject就不說了,除了極少數真的對方reject的有問題,可以rebuttal一下(但不要期望有什麼用。。。),大部分就只能認了,好好學習review意見改了再試別的。然後現在很多期刊會有一種意見叫reject and resubmit,這種雖然名字和major revision不一樣,但我的經驗其實就是個major,因為如果resubmit基本上審稿人是不會變的。如果是這種機會,一般一定要繼續resubmit!這樣就只需要去解決之前reviewer給你提出的問題就好了。否則真的換個新的地方投,reviewer會提出什麼問題就未可知了,而且換個地方要是換來個不允許resubmit的「真」reject就更划不來了。

那麼接下來就說說被「真」reject之後的一些個人的經驗吧。

1. 心態要好。通常好的會議和期刊,審稿人的意見都是很認真全面的(至少其中的一到兩個肯定會提出一堆自己的concern),所以盡量抱著一個學習的心態。被reject了心情消沉都理解,不過緩過來之後,一定要好好的研究review的意見,千萬心態不要敵對,看到一個reviewer的意見說的不完全對,就抱怨他的comment扯淡。怎麼說呢,reviewer因為研究領域不同、沒看明白、或者誤解給出不合理的意見很常見,但不要一下就抱著敵對的態度去看。而且根據我的經驗,有些時候一開始看著很無厘頭的意見,甚至可能是激發你下一個新的研究工作的來源。另一方面,其實很多讓reviewer不明白或者誤解的地方,我們是可以通過把文章寫得更好是去盡量避免的。當然,有的時候也會有reviewer確實很扯(你和你的合作者一致認為的話),這種情況如果是在會議,一般就只好認栽了(因為看到會議review的時候TPC meeting肯定都結束了,所以會議要再修改review意見感覺更困難)。如果是期刊,還有和EIC寫信rebuttal的機會,我知道的是有人通過rebuttal讓已經被拒稿的文章重新找新的人reivew,並最後被接收的。

2. 不要著急地轉投,如果可以解決的問題一定要在下一次投稿之前盡量解決。這其實是我第一篇文章最後經過20個月才錄用時犯的比較嚴重的錯誤(最後它在被錄用前被1個A類會議,2個trans直接reject,其中一個trans審稿花了9個月,最後拿到reject時真是鬱悶。。。)。在投期刊的時候,我之前會有一個不太好的心態:因為reviewer的意見往往無法預料從哪個方面過來,於是就先投出去,只要給了major或者resubmit的機會,就能有針對性的去解決問題了。但我過分盲目地相信了能至少給個major或者resubmit:比如我的第一篇文章在投第一個A類會議的時候其實就已經有一個weekly accept,雖然有兩個weekly reject,但提出的問題也不是很critical。只是有一個reviewer給了僅僅一句話的莫明奇妙的comment-文章研究的問題沒用+strong reject。於是,在轉投trans的時候,感覺問題不大,就只是在discussion裡面稍微討論了幾個reviewer的comment,並沒有在實驗和方法上面改進。結果連續投的兩個trans都被直接reject(都是三個審稿人,一個minor,一個major,一個reject最後總評reject,被第一個trans reject之後幾乎沒有修改就又投了第二個,教訓啊。。。)。經過了這次教訓,我算是知道了,抱著先拿個major的」僥倖「態度是不行的。。。於是在投第三個trans之前,我把實驗的setting修改的更加合理,把所有實驗重跑了一次。這次回來的審稿意見就直接是minor了。

3. 下一步的投稿策略。要決定下一步的投稿策略,第一步就是判斷需不需要對這個文章降低期望。我覺得如果文章的期望被降低主要大概會有兩種可能:
(1)reviewer指出了很重要的之前沒有考慮到的文章的limitation,而且無法解決。這一點實際上並不是文章寫作的問題,而是在一開始討論時對整個工作價值的判斷問題。如果導師或者合作者對發A類比較駕輕就熟,那這個問題一般不會出現。
(2)在被reject之後,發現在其他地方有一篇具有類似idea的文章發表了出來。這種就是比較大的杯具了,有些時候甚至不是降低期望就能解決的問題。我最近一個工作碰到了類似的情況,好在那篇文章和我的具體應用不同(雖然抽象出來的數學問題類似)。我目前的做法就是盡量在我原有的工作上增加新的內容,包括技術方法和實驗,使它在針對我的應用上面考慮更多的特有的因素,取得更好的效果,從而來和已經發表的那篇工作拉開差距。而且雖然不甘心,我也把對我這個工作的期望降低了一點。
其他的情況,比如reviewer還是很認可這個工作要解決的問題,只是覺得方法或者實驗上面有改進的餘地,那就好好去改進,繼續試A。通常,我感覺是至少有一個reviewer給出比較正面的總體評價,那這個工作就還有試A的餘地。當然,不停試A會有上面提到的第2個風險,就是工作還沒發出來,其他類似的工作就已經先發出來了。有一個可能算是折中的方案就是先拿初期版本投一個好會的workshop(一般好會的workshop影響力也還可以),然後再慢慢把工作做完整投A類期刊。我第一個20個月才被
trans收的工作就是在第一次被A類會議拒了以後把簡化版本轉投了這個會的workshop(因為發表的早,結果這個workshop的文章成了我目前為止引用數最高的一作文章,20個月之後再中的那個trans版本基本沒有人去引了=___=)。但這樣就放棄了靠一個idea賺一個A類會議+A類期刊的機會了,仍然算是一個trade-off吧。

4. 選擇Trans。不同的Trans的難度也不太一樣,如果導師或者合作者沒有比較多的A類經驗,或者被top的Trans拒了以後,可以從簡單一些的試一下積累經驗和信心(好歹也算trans嘛,說出去也好聽)。我所在領域可以投的,相對而言難度不大的trans有:
IEEE Transactions on Systems, Man, and Cybernetics: Systems - 老牌系統控制領域期刊,原來叫TSMC: Part A。最近幾年計算機偏系統及應用的文章收的很多,影響因子1.6。它收稿的topic有時挺奇怪的,我有過文章投過去它說topic不符直接給我退回來的。。。但我自己中的trans又都是這個。
IEEE Transactions on Human-Machine Systems - 之前和上面的TSMC同屬一家(上面的是Part A,這是Part C)。CCF B類期刊,影響因子1.8。
ACM Transactions on Intelligent Systems and Technology - 因為創刊早期邀請了libsvm的作者寫了一篇文章,靠其一度將影響因子撐到9以上,最近因為這篇文章不再納入計算,影響因子回落到2.4。

總而言之,即使被reject,但是reviewer的意見並沒有讓你降低對這個工作的期望,那就好好利用reviewer提供的意見,積極地去改進,你的文章就絕對能離A更近一步。而且,好好地去學習A類會議期刊reviewer的意見,我個人的經驗是真的能夠發現可以在將來繼續去做的新的問題點和方向,這個絕對是投稿A類會議和期刊的另外一個非常重要的好處了。


其他同行的答案和publication都非常棒,也班門弄斧貢獻一點自己的理解。

已經當了兩年CCF A類 IEEE Transactions on Mobile Computing (TMC) 的審稿人

這種"How to write a good paper"的問題很大 不太好直接回答

拿練武功類比,科研能力是內功,需要長時間的積累,寫paper是招式,看別人比劃一套彷彿自己也懂了,但練起來才發現內功不夠駕馭招式。

拿古人吟詩作賦類比,就是熟讀唐詩三百首,不會吟詩也會吟。

在這裡提兩個方法,一慢一快,個人經驗,行之有效。

1. 慢方法:培養正確的審美品位並模仿經典作品。跟看電影聽音樂一個道理,多看好導演拍的獲獎好電影,多聽好音樂人創作的獲獎好音樂,同理多看頂級期刊會議發表的好論文,並嘗試模仿他們的行文邏輯和語言習慣。至於怎樣的論文才算得上「好」,不妨參考身邊或網上比較senior researcher(導師,高年級師兄/博後) 的意見和評價。

2. 快方法:直接跟能寫出頂級paper的senior researcher合作併合寫paper,耳濡目染的學習,如果能得到他逐字逐句修改paper的機會,必定受益匪淺。但是這種機會可遇不可求,如果自己的導師/師兄不符合,只能靠自己在community裡面透過各種渠道去爭取好的合作了。


最近Master Thesis發了一篇ACM CCS的論文。雖然不是主筆,但是確實很深刻的看出論文寫作的重要性,幾乎每一句話都是精雕細琢,仔細審查過之後才寫上去的。

個人覺得更多的原因不在於如何行文,如何遣詞造句,而是在於對這個領域的深入理解,即便是同樣的問題和結果,浸淫於這一領域多年的研究者也很容易能夠寫出有深度而又精彩的議論,而這一點在如何寫上面是沒有捷徑的。


1. introduction 要寫好,非常重要,一定要tell a good story;
2. intro里的contributions要寫好,重中之重;
3. 要敢投稿,trans並非遙不可及。

利益:四月一篇一作tpds剛見刊。


不否認,好的寫作可以幫助提高論文發表的期刊級別。寫論文的關鍵在於把問題講得有吸引力,突出論文的貢獻,但這個要求對普通論文(請忽略部分太差的論文)和Transactions級別論文中是沒有區別的,所以介紹如何寫論文的方法完全適用於如何寫高質量論文。


發表高質量論文的影響因素中好的idea和寫作方法只是一部分,個人認為更大程度上在於工作的深入程度。換句話說,你在論文中做了什麼別人不容易做到的貢獻,而這個是沒有可以討巧之處的,只能是在自身的積累和理論基礎上進行持續深入的思考和solid的工作。


一作中了一篇Elsevier的信號處理的Journal,分享一點我的心得
1. Logic
You have to construct your paper with clear logic. In each part, you have to state enough experiment-based evidence and bibliography support for your proposal. In my original manuscript, the writing is weak, not due to the English expression, but for the disordered logic. Complex and long sentences are not always encouraged.
2. Algorithm
In signal processing (or some other related fields in Mathematics, Computer Science), there are many algorithms to explain. However, some authors like me are not able to express it very well due to some inaccurate words or phrases. In my opinion, using algorithm block (introduced in LaTeX) is a good way to explain your algorithm. The reviewers or researchers may understand your methods more efficiently.
3. Accuracy
It is not for the data but the words. Even a native speaker is not able to tell the accurate difference among many words. It is also like we Chinese often state some sick sentences that we are not aware of. If you like, I think a great dictionary may helps you. I am now using the Oxford Advanced Learners" dictionary. It helps me to distinguish many words that often make me confused.
4. Statistic
The statistical result is the key to make your manuscript outstanding. No matter signal processing or image processing, even machine learning, you are always encouraged to propose your statistical results to explain the efficiency and accuracy of your algorithm. If you have some reference as comparison, it will be much better. Notice, the comparison shall be reasonable and fair, which requires the same data and experimental environments.
5. Reviewer
Please DO NOT reject the advice by reviewers directly. They are essential for the publication of your work. If you are not able to accept all the requirements, please explain them in the discussion or footnotes, even prospects of your research.
希望以上的內容可以給予你們一些幫助。


一作中了VLDB和IEEE的ICDE。也是初學上路,談談自己的感受吧。前面有一位說的很好。

1.邏輯鏈要清晰,必須循序漸進,環環相扣。你要試著站在別人的角度來讀你的文章(一個領域內專家但是完全沒接觸過你做的東西)。關於這一點你可以試著找你身邊隨便一個事先不知道你idea的人,五分鐘之內描述你paper的idea和selling point,如果你能描述清楚,說明你邏輯鏈差不多了。
2.語言簡練但是辭彙豐富句式精妙。


對於這個問題,我個人在寫了幾篇paper後深深地覺得曾聽過的一個原則總結得很好,在此與題主分享:

From everybody knows to nobody knows.

能把這一點做好的,我覺得就是一篇非常高質量的學術論文了。


昨天中了一篇trans. cybernetics, jcr1區,if5左右,佔個坑先

我覺得中一般的trans並不難,至少沒有很多人想像的那麼難,比automatica,TAC什麼的還是要容易的多。我覺得想中trans,課題要新,一是因為新課題有很多不完善的地方,容易出結果,二是對我們發trans還特別少的課題組,在老課題上競爭力不強,相比一些國際上大牛組,更加不容易出結果。


計算機小白請教各位,ACM minor和ACM major是什麼意思?我填表需要選擇這個科目到底是minor還是major


推薦閱讀:

寫文獻綜述時需要注意什麼?
怎樣降低知網重複率?
如何提高寫論文的能力?
有哪些提高論文寫作速度的方法?
如何使用LaTeX讓自己不亂?

TAG:計算機 | 科研 | 學術 | 論文 | 論文寫作 |