前言:離上一次寫博文已經快半年了,這半年我主要在忙兩件事,一個是組裡的企業項目,一個是我的第一篇學術論文。時間飛逝,轉眼半年過去,從項目中誕生的一個想法最終轉換成了我的第一篇學術論文,成功被 AAAI 接收,這對於剛剛開始博士生涯的我是莫大的鼓勵。本文嘗試回憶一下這篇論文誕生的全過程,算是給這段難忘的時光畫上一個句號。
1
Idea的誕生
1. 靈感來臨的夜晚
2020年7月份的某個周五夜晚,剛剛開完組會的我陷入沉思,博士一年級還沒開學,怎麼大家都已經在講自己的論文和研究工作了?我還什麼都沒有呢,每天就只做做項目。之前曾經有一個研究工作,因為陷入了瓶頸,也好久沒有繼續推進了,因此從碩士畢業以來,一直不知道我的學術之路到底在哪裡。
我們組做研究主要的方向,還是偏信管的方向,這意味著首先是以實際的應用為導向的,另外主要還是做計量的分析,即發現一些「什麼對什麼有什麼影響」的這樣的研究。說實話,我一直不太感興趣。而看計算機的論文,我就覺得很有意思,而且計算機方向的研究,讓我感覺很有創造力,所以我對計算機的方向,尤其是當今的人工智慧方向,一直有執念。曾經也跟導師討論過,他跟我建議還是做信管方向的研究,畢竟是我們組的專長;曾經也有一些稚嫩的計算機方面的研究點子,也被組裡的老師輕鬆戳破(早被人做過了)。所以,好久以來,我還是挺迷茫的。
那個夜晚,結束組會後,我沒有像往常一樣直接去休息,而是拿出iPad開始構思一些想法,不知為何當時就有一種預感:「今晚我會想出一個可以做的想法」。近期在企業項目中,一直在做文本分類相關的工作,為了分析模型的結果,常常盯著混淆矩陣看,從中我也發現了一些問題,那就是有一些類別很容易搞混,就一直在想辦法解決它。當時就覺得,各個類別彼此之間的相似性是很不一樣的,然而分類的時候我們卻是假設他們是一樣的來分類(one-hot target),這樣自然不太好,如果能讓模型來訓練的時候意識到不同的輸出維度存在相似性就好了,於是我立馬畫了一個草稿:
草稿展示的實際上是一個很簡單的想法,那就是手動構造一個soft target,然後用那個去訓練模型。寫完這個想法之後,我十分地興奮(雖然後來通過文獻閱讀發現,學術界早就有類似的想法了),馬上開始寫相關的代碼。第二天也是起的很早就在家裡做實驗。讓我高興的是,這樣樸素的想法,確實是有效的,我在我們項目的數據集上,發現了些許的效果提高。
2. 雛形初現
在我的樸素的想法得到實驗的印證之後,我就開始想這個如何能有「學術含量」。因為「人工的」的發不了論文,「智能的」才可以發論文。所以我需要設計一個方法,讓我通過人工手段得到的效果提升,可以智能地實現。這個實際上不難,只要是有機器學習、深度學習經驗的人,都知道基本的思路就是:
「人工構造了什麼,就讓模型去學習什麼。」
所以我前面是自己手工構造的 soft target,那我就需要設計模型去學習這個soft target。能達到這個目的的模型設計有很多,但可行的不多,所以我畫了很多草圖,從原理的角度去查看其可行性。這個時候,之前看過的幾篇論文對我產生了極大的提示作用,因此也借鑑了其模型結構。現在回想起來,如果我沒看過那篇論文,我也設計不出這樣的模型。
設計出來的模型,我又趕緊用代碼去實現它,我使用項目的數據集做試驗,發現構造出來的模型,也有效果!
此時我的心中已經開始有些按捺不住喜悅了,但我還不急著去找老師分享我的實驗結果。為了證明不光光是項目的數據集有效果,我開始在網上收集各種各樣的公共的文本分類數據集,中文的,英文的,趕緊都拿來試一試。當我測試到第三個數據集,發現我的方法依然有穩定的提高的時候,我知道,我這個論文,要誕生了!但那個時候,我只敢仰望頂會,感覺像 AAAI 這種,我還遙不可期,我的想法是把這個idea,寫成文章投一投國內的一些新興的NLP會議,博士開學前先試個水。
我開始整理這幾天的實驗數據、繪製模型的草圖、寫下自己的思路,並預約老師討論。
我依然清晰地記得那一天在小會議室,我激動地、一口氣講完我的研究問題來源、思路、模型設計、實驗結果,我感覺無比舒暢。老師認真地聽完,沒有猶豫,直接告訴我:「我覺得這是一個很有價值的研究,思路很清晰。」
對於這樣的評價,我既驚喜,又感覺再意料之中,畢竟我是有備而來。然後我跟老師說,我想投一投SMP(全國社會媒體處理大會)試試,結果老師說:「這麼好的想法,不投一個頂會?那豈不是浪費了!投AAAI吧!」 這一句話,比任何對我想法的好評都更加鼓舞人心。因此,我放棄了隨便投一投的想法,立志衝擊AAAI!
2
瘋狂做實驗
寫論文有兩種套路:先寫出來,然後補實驗;或者先做實驗,再根據結果寫論文。
一般前一種套路適合學術大佬或者老油條,他們相信自己的思路一定可以出做好結果,做實驗只不過是為了找證據給別人看,而它們內心早已知道答案。但我還不太自信,我需要實驗結果來給我信心,在 idea 產生後的一個月里,我幾乎都在做實驗,沒有動筆開始寫。
要想讓自己的論文有說服力,自然是需要找大家都使用的、公開的benchmark數據集,收集了大量的數據集之後,還需要進行一些挑選,不可能所有的都放到論文里去。另外,因為要跟baseline模型進行對比,所以我還需要復現一些baseline模型。有些數據集,我發現我復現的結果,完全比不上baseline論文中聲稱的,那麼這種數據集我就放棄了,不然容易被他人懷疑是不是故意把baseline做的很差。
數據集收集完畢之後,就進入到艱苦的「實驗-調參-實驗」循環了。這個過程是最無聊、最容易讓人開始懷疑自己的階段了。調參調到後期,甚至完全不知道自己在幹嘛,開始懷疑自己做實驗的意義,懷疑自己到底是在做科學研究,還是只是在費電而已。實驗的記錄我也比較隨意,常常會忘記記錄具體參數,導致結果無法復現。
這段時間的生活枯燥而乏味,每天在項目工作之餘,把一組組的實驗提交到伺服器上跑。睡前如果發現跑出好結果了,我可以興奮地晚上睡不著;要是效果差,我會啥都不想做,對女朋友都不耐煩,導致她有一次對我說:「我覺得自己對你根本不重要!你的喜怒哀樂完全由實驗結果支配!」,哎,她這麼一說,我發現還真是,完全被實驗控制了。
3
論文的成型
時間到了8月份,基礎的實驗基本都做完了。這段時間主要是組會上跟老師們討論實驗結果、嘗試進行理論解釋的過程。深度學習的黑箱之處在於,你希望它怎麼做,它還真不一定按你的做。所以我雖然按照自己的特定的意圖設計的模型,但模型卻不一定實現了我的意圖。從實驗結果也可以看出,有一些結果是跟我的預想不一致的。這段時間也很讓人頭疼,因為有些實驗結果,真的不知道怎麼解釋,要解釋也只能解釋個大概,而大概的文字是無法寫進論文里的。
然而,隨著AAAI投稿 deadline 的逼近,我也開始有點慌張了。本來還設計了很多補充實驗和拓展研究,但按照目前的進度,是無法完成了。於是我決定不管那麼多了,先根據現有的結果寫出來再說!
這不寫不知道,一開始寫英文論文,就發現寫起來總是很彆扭,感覺自己詞彙量就那麼屈指可數的幾個詞。另外,論文的結構我也不知道怎麼組織,我看的各種論文,都有各自的結構,有的 related work 在前,有的在後,沒有一個標準。
這個時候咋辦?我的辦法是——抄!哦,不對,讀書人的事兒怎麼能叫「抄」呢?應該叫借鑑。我又是挑選了我那個時候正在看的我覺得格式寫的特別工整的、又正好是 AAAI 的文章——TextGCN。上來先把人家的組織結構給「借鑑」了一遍,借鑑完這個,還不夠,還要借鑑人家的遣詞造句,誒,隨著借鑑的深入,我發現我寫的也慢慢「有內味兒了」,於是慢慢就上道了。除了TextGCN這一篇,我還借鑑了好幾篇其他的優秀論文,包括別人畫了寫什麼圖、怎麼畫的、表格怎麼設計的。總之,不管內容優不優秀,至少我先讓我的論文看上去像一篇正經的AAAI論文。
我住的附近有個商場,樓上有家鋼琴店,樓下有家星巴克。差不多在我剛剛產生這篇論文idea的時候,女朋友開始在那家琴房學鋼琴。於是那些日子,經常是她在樓上練琴,我在樓下寫論文,然後一起回家。令人懷戀的歲月啊!
4
提交前的緊急修改
deadline 前的兩周,另兩位老師也加入了論文的討論,聽完論文後,他們首先肯定我的研究的完整性和規範性,但也提出了一些比較尖銳的問題,比如缺失了一個重要的 baseline,另外模型的設計存在不合理之處。這兩個都是十分嚴重的問題,對於只有兩周就要提交的我來說,是十分可怕的。但同時,我也感到十分幸運在提價前能收到這樣重要的反饋。
時間再緊也沒有辦法,只能硬著頭皮去繼續做實驗、修改。說實話那個時候我已經有點疲憊了,首先,增加一個baseline意為著我至少要跑25組實驗。另外設計上的不合理,這屬於根本性問題了,但我已經沒有時間去重新設計、重跑全部實驗了,只能把這種不太合理的地方給淡化,畢竟效果上是提升的,只是模型結構可以設計的更有說服力。
最後我的折中方案是,新增幾組實驗實驗,把baseline加上去,並使用一個更好的模型結構跑實驗。最後火急火燎地做完了補充實驗,算是把論文的一個大窟窿給填上了。
deadline分兩個,一個是摘要的ddl,一個是正文的ddl。提交完摘要之後,一周之內我和老師們又一起把正文來來回回修改了N版,才放心地提交了。這個時候我感覺前面的「借鑑」還是發揮了很大作用,總體上本身已經比較規範了,但是多數是一些小問題,所以改起來還比較快。
5
順利挺過第一輪篩選
論文提交後,就是接近一個月的空窗期。這段時間就是整理整理數據、代碼,為 github 做準備。
10月14號的晚上,收到了順利通過第一輪的郵件:
我也忘了當時是什麼心情,應該也不是太激動了。但我確實是很滿意的,第一次衝擊頂會,我內心的小目標就是能過第一輪,那說明至少有一個國際上的該領域的審稿人認同我的工作了,那也是對我的一個巨大鼓勵了。主要此時我也看不到任何的具體評論,所以我依然什麼都做不了,只能耐心等待第二輪的結果一起放出來。
6
為 Rebuttal 鏖戰到最後一刻
如果說第一輪的時候我內心還十分淡定,那麼第二輪時我就真的開始緊張了。第一輪篩掉了38%的論文,一大半都還在呢,競爭只能是更加激烈了,而第二輪的結果,基本上就決定了最終的結果。
到了臨近第二輪結果公布的時間點,我又開始像熱鍋上的螞蟻了,反覆地刷我的郵箱,就是看不到結果。直到第二天晚上,正騎車回寢室,手機振動了一下,一看「From Microsoft CMT」,我立馬手抖著點開:
reviews 已經在系統上公布,而且只有72小時的時間供我回復(rebuttal)。我一身冷汗,對著自行車踏板一頓狂踩衝到了寢室,迅速打開電腦查看reviews。
一打開review介面,密密麻麻的英文評論把我看蒙了,我直接去翻到最下面,應該會有打分,果真:
看到這一句 「5-Below threshold of acceptance」,我的心涼了,哎。。。實力不濟啊!
不過我馬上又轉悲為喜,因為我發現這個只是其中的一個打分。。。果真第一次投論文,完全沒經驗啊。最後的結果是兩個6分,兩個5分,完完全全地、不多不少地、恰到好處地踩到了分界線上!
這真是比走鋼絲都要刺激啊!聽說只要rebuttal做的好,是有可能讓reviewer改分的!72小時倒計時,最後一搏,開始!
我趕緊聯繫老師們的時間,結果最晚只能到第二天晚上才能討論,所以我得先自己整理好問題,然後明天做一次討論後,寫寫就要提交了。
deadline 前夕,我跟老師們在線上會議里碰面,仔細地討論4個reviewer提出的幾十條意見、建議。當時我最大的感受就是,這些 reviewer 的水平,真的是高啊!沒有一個無聊的問題,每一個都一針見血,所以我曾經擔心的、遺漏的問題,全部被他們給提了出來,很痛,又很爽(???)。而怎麼回復他們的提問,又真的是一個技術活兒,這裡面不僅僅要靠計算機知識,更需要藉助心理學,不同的說法,給 reviewer 的感覺是完全不一樣的,既要承認他們提出的問題(給審稿人面子),又要講明自己的貢獻(給自己面子),還要給出一個明確的解答或者計劃(再次給審稿人面子),邊想如何回復他們,其實我對自己的工作也理解的更加深刻。我和老師們從晚上8點,一直討論到12點才散會。
那個晚上,我知道我是沒有時間再睡覺了,我一個人留在實驗室,開始整理 rebuttal。夜晚的實驗樓靜悄悄,只有空調靜靜得吹,沒有其他人,終於可以外放音樂,我寫到了凌晨3點,實在寫不動了,睡了一會,醒來後繼續寫,一直寫到陽光從實驗室窗戶照射到我的電腦上,終於寫完了!
發給老師們後,我趕緊回寢室睡覺,回去的路上碰到了剛剛出發去實驗室的同學們。
睡醒後離deadline還有幾小時,又根據老師們的意見修改了一部分,終於在系統上隆重地點擊「submit」。那一刻,對我而言,仿佛是一個時代的結束。如果這是一場比賽,那麼提交的那一刻,比賽就已經結束,我努力到了最後一刻,已經沒有什麼可以遺憾了。
7
從不抱希望到柳暗花明
最終的放榜要等待12月1號,這是一個特別的日子,因為我的生日也在12月。我一直憧憬著,如果這次可以終稿,那麼這將是我的收到的最好的生日禮物了。
這一個月來,我一直徘徊在「還是很有希望的!5566 改成 6666 就有戲了!」和「沒戲了,別幻想了!」之間。有時候看到知乎網友分享自己低分過線的經歷,感覺自己也可以。後來看到知乎上有人開了一個 AAAI-21 的專題討論,很多人在分享自己的得分,我看了一圈,天哪,都比我高!7分8分的遍地都是,我這個邊緣分,肯定沒戲了!這時,我基本也不再幻想能中了。開始安安心心地根據 review 的看論文,準備年底的IJCAI。
11月底,越來越近了,雖然不抱希望了,但心中總不免還是會想「萬一踩了狗屎運中了呢?」,所以我又開始焦慮了起來。到了放榜的那一天,我又開始每5分鐘刷一次郵箱了。老婆也有點緊張了,總是提醒我看郵箱。一直等到晚上,還是沒有放榜。
那一夜,真的很難睡著,輾轉反側,雖然我知道希望不大,但只要有一絲的希望,我就無法安心入睡。我一遍遍地刷新郵箱,什麼也沒有。然而第二天上午還有一門課的考試,我必須想辦法睡著了。沒辦法,我打開手機記事本,在Todo list上寫下這段話:
寫完之後,頓時內心平靜了下來。難道一個結果,就要把人的心態一直吊著嗎?做好每天的事,管他結果怎麼樣!終於,我慢慢沉入夢鄉......
第二天,太陽照常升起,我和室友照常騎著共享單車到教學樓,照常吃午飯、敲代碼、看論文、調 bug。結果依然遲遲不出現,老婆又問了幾遍,我給她發了一個 Twitter 的截圖,說國外網友也都在催呢,哈哈,不管了!
下午5時許,同實驗室的同學喊我去吃飯,我沒啥胃口,下午看別人 Github 的代碼,一直還沒看懂呢,正煩呢,於是我接著看代碼。又過了一會兒,手機振動了一下,我火速打開手機,我知道,它來了。
邊打開郵箱,我邊自言自語:「好啦,我知道沒過啦~~~不過萬一真的能看到一個Congratulation單詞呢?」
"Congratulations!"
是的,美好的事情發生了!
剛剛還眉頭緊鎖地,現在臉上的兩坨肉已經開始止不住地上揚了,我反覆地盯著郵件看,確認是我,確認是"congratulation",確認是"delighted",確認是"success",我終於確認了,我中稿了!不管實驗室里其他人了,一句「我艹!起飛了!」脫口而出。
我馬上出門,給老婆打電話,開口我竟然激動地不知道怎麼說,只是大聲的說:
「乖,快出來!快點!」
老婆聽了有點吃驚:「啥?你不會來公司了吧??好好,我出來了!」
我已經語無倫次:「不是不是,那個。。。告訴你一個天大的好消息!!!」
老婆遲疑了一下,馬上反應過來了:「啊?不會吧!啊!!!!中稿啦!!!哇~~~!!」
我裝作淡定地說:「是的,中稿了」,只有實驗樓窗戶的倒影知道我笑得多麼燦爛。
......
跟老婆分享完喜悅之後,我又準備趕緊跟老師們說,結果老師們已經知道了,已經群里恭喜我了。於是我又趕緊跟我爸媽分享,他們也非常激動,還讓我把郵件的截圖、論文的大概意思都發給他們,看樣子是要發朋友圈了,哈哈。
老婆約我去正大廣場見面,請我吃大餐,在赴約的路上,我感覺自己好久好久沒有這麼輕鬆快樂了,也許從研究生起吧,感覺自己終於做成了一件事兒。
8
回顧與總結
回顧從idea產生到論文接收的的過程,我覺得值得我記錄的有這麼幾個點:
- 隨時記錄自己突然冒出來的想法 ,尤其是從實際問題中產生的想法,往往比較有價值
- 做模型的時候要多對進行細緻的分析 ,比如分析混淆矩陣就比分析 classification report 要細,更能發現問題
- 從簡單的想法入手,快速印證自己的想法的可行性
- 如果真的喜歡某個事物,就不要怕被潑冷水,堅持去想去做
- 先自己動手,找到證據說服自己,才能說服老師
- 多看經典論文和思路較為新穎的論文 。例如對我有重大啟發的那個論文,是 TextGCN 論文中的一個 baseline 方法,叫LEAM(Joint Embedding of Words and Labels for Text Classification),這個標題一看就是一個很新穎的結構,所以我特地去看了看,沒想到後來用上了
- 認真地進行實驗記錄,不要偷懶。一個參數忘了寫,等於後面要把一組參數都跑一遍。我就常常因為忘記某個實驗結果是怎麼跑出來的而不得不哭著重跑實驗。。。
- 參數多了容易迷失自己, 每次實驗前,先想清楚自己的目的是什麼,最好能記下來,實驗結束後也馬上記錄一下結果印證了什麼。
- 用雲計算平台,記得即使保存代碼和結果。我就因為忘了及時續費,導致中途兩次代碼和數據丟失,浪費了不少時間。
- 如果英文學術寫作不熟悉,照葫蘆畫瓢是一個很有效的做法。
- rebuttal really matters!好好寫,有時候真的可以起死回生!
- 多找幾個老師討論,集思廣益。這篇論文受到了四位老師的耐心幫助,每位老師都發揮了無可替代的貢獻。在此再次感謝他們!
後記:也許對於很多人來說,發表一篇AAAI是小菜一碟,尤其那些計算機名校、AI大組。但是對於我這種既不是計算機科班出身,學校學院乃至組裡也不是專門做這個方向的人來說,這段經歷對我來說已經十分珍貴了,遂記錄下來,一來紀念這段時光,重溫那段歲月的學術激情,二來鼓勵自己繼續努力,未來做出更多的學術貢獻,三來給跟我類似背景的同學一些勉勵,大家共同加油!
另外,細心的讀者會發現,在論文誕生的這幾個月里,我的女朋友也變成了我的老婆,是的,感謝她一直陪伴著我寫完這篇論文,見證了我這期間的喜怒哀樂,也見證我人生中又一段獨特的時光,未來還有好多美好的事情等待我們我一起經歷。
後記plus:其實論文被接收與否,不影響這個論文的本質貢獻。如果這篇論文沒中,我也可以列舉出各種沒有中的理由。因此,論文本身是否真的有貢獻,使我們更應該關注的。如果讓我對自己這篇論文給出一個真實的評價,我會說,有一些創新和貢獻,但還確實不夠,革命尚未成功,同志任需努力!