谢撩,人在斯坦福打SoTA
文 | Jazon
編 | 小戲
小編注:不知道大家還記不記得賣萌屋之前人在斯坦福,剛上CS224n的Jazon小哥發來的關于斯坦福神課CS224n上半學期的報道?今天,Jazon又在斯坦福前線發來了關于他在CS224n下半學期的經歷,那么現在讓我們把畫面交給Jazon,看看大佬的課程作業是怎么完成的吧!
上篇文章提到我在 Stanford 上 NLP “神課” CS224n,課程的前半學期以上課、寫作業為主,而后半學期則基本都是 Guest Lectures ,沒有作業,讓我們專心做 Project 。
往年,時不時都有 224n 的 Project 轉化為頂會 Paper ,224n 學期結束的海報展覽也是 Stanford 校園里的“學術盛典”之一。今年可惜展覽取消了,不過大家的 Reports 仍然都會放在官網上。能讓我的 Report 發表在 Stanford 課程的官網上,這是一種很大的榮幸呀!所以我積攢了足夠的動力,一定想盡力做好這次 Project 。
Project 規則
自從 2016 年斯坦福創造的問答數據集 SQuAD 橫空出世,幾年來 224n 的 Project 都是分為 “Default” (默認)、“Custom”(自定義)兩種選項,其中 default 就是搞 SQuAD ,Custom 則沒什么選題的限制。
2021 年的 default Project ,分成了 2 個 Track :一個叫 IID(就是單純地做 SQuAD );還有一個叫 RobustQA ,這個更有意思一些,需要學生搭建的 SQuAD 模型有“魯棒性”,比如給定另一個數據集 NewsQA 極少量的訓練數據,能夠在 NewsQA 上也取得好的結果。
IID 不可以用任何基于 BERT 的模型,RobustQA 也只能用 DistillBERT ,兩者都不能使用給定訓練集以外的數據。這很容易理解,不這樣的話,Project 很容易變得沒有挑戰性。但這些限制也讓我感覺,兩個 Default Project 不夠刺激,于是,我就選擇了做 Custom Project。
Project 可以一個人做,也可以組成 2 ~ 3 人的小隊。今年課上的 477 個學生一共分成了 275 個小組(不少人都是 Solo 做),每個組有一定的 Azure 云計算 Credits 。我的隊友 Nina 是一位(很稀有的)來自中國的 Stanford 本科生,現在讀大四。
選題
確定做 Custom Project 以后,選題并不是件容易的事。從宏觀上說,需要知道哪些事情需要做、可以做;要了解之前的人做過什么、沒做過什么。這些都需要投入不少精力。
對于 Custom Project ,除了自己選題以外,還有一個列表,表上列出了 34 個課題的 Proposal ,分別由近 20 位 Stanford 在讀 PhD 提出,做列表上的課題就由對應的 PhD 指導。這些 Projects 最誘惑人的地方在于,有些導師是明確希望把 Project 轉化為長期合作的項目與頂會 Paper 的。
列表里第 20 個課題叫“ Can Transformers Do Math ”,我覺得有些意思,就聯系了那位 PhD ,問他現在還接不接受指導新的組。但后來覺得這個題目不夠 NLP ,而且感覺這位 PhD 同時指導很多組會很忙,所以就放棄了。
我們最終決定做的 Project 還是來自小軼的提議。1 月底,我問小軼對 224n Project 有何建議,她推薦了 2 個方向,其中一個是多人對話 QA ,比如有個數據集叫 FriendsQA [1],是一個基于老友記臺詞構建的 QA 數據集。我覺得這個 Topic 非常有意思,和隊友討論之后,就決定做它啦(PS:2 月 8 號下午,我們在 Manning 的 Office Hour 上問他這個方向如何,不過他并沒有探索過這個領域,就沒有給出什么實質性的建議)。
決定做 FriendsQA ,我知道這其中的風險:Manning 在課上講過,有時沒有選好題的 Custom Project 會做得比較“Lame”。確實,FriendsQA 是一個很新的數據集,整個這個小領域也很少有人進行研究,這讓我對于 Project 能做成什么樣完全沒有把握。但正是因為沒啥人做過,做起來才刺激嘛!我在日記里寫到:
“見證、體驗了太多搞科研受到各種條件的限制后,現在我在 224n 的平臺上,能自由地探索世界上還沒有人能很好解決的難題,就像 Google Brain、MSR、FAIR 的那些大牛一樣享受真正的學術自由,這是難得的浪漫和奢侈。”
開啟 Project
2 月 15 號提交了 Proposal,之后搞完前文提到的讓全班爆炸的作業 5,休息了幾天,2 月底正式開干!
一開始,我們是完全按照 SQuAD 的思路來做的,把 FriendsQA 轉化成和 SQuAD 一樣的格式以后,跑各種用在 SQuAD 上的模型。但奇怪的是,每次一開始訓練,在 FriendsQA 上的 F1 分數就斷崖式下跌。那段時間,看模型胡說八道的 Output 一度成為我和隊友的歡樂源泉。
小軼的判斷是代碼出了 Bug ,到了 3 月 6 號我才發現確實如此,是我在把 FriendsQA 格式轉化成 SQuAD 時,標準答案的 Start_index 算錯了!我以為是按 Word 的位置算,原來是按 Char 的位置算。這個 Bug 并不好找,因為跑 Evaluation 時計算準確率并沒有問題(算準確率只看詞是否匹配,不看詞的位置)。
尋找方向
解決掉 Bug 以后,我們的模型取得了不錯的 F1 分數。但顯然,只跑 BERT 對于滿足 Final Project 的要求是遠遠不夠的,我們得做一些技術含量更高的改進。
Project Handout 里面的建議是:仔細鉆研一個方法好于粗淺地嘗試很多方法。可是怎么找到要鉆研的那個方向,又是個令人頭大的問題。
一開始,我和 Nina 主要研究了怎么改 BERT 的結構(具體來說,在 BERT 里加入 Utterance-Level Embedding,ULE),但最后得出的結論是,我們不太可能發明什么其他的模型結構或者訓練方法,可以做得好過那篇研究 FriendsQA 的 ACL paper,《Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-based Question Answering 》[2]了。
改 BERT 行不通,那該怎么辦?我想了很多,可以做的思路實在太多:用 BERT 以外的模型?從數據入手?研究更好的評估指標?一時間,我和隊友都有些迷茫焦慮。
我在需要動力的時候,會去油管上看 Carykh 的視頻:他分別把他在 Stanford 兩門 AI 課上做 Project 的經歷做成了視頻。其中在 CS230(深度學習)課上,他的小組幾經周折,直到 Project 的最后一周才確定了選題 [3]。
pyq 里也經常能看到一起搞 224n 的同學吐槽“機器拒絕學習”,還有一次一起出去買東西,開車的同學在等一個紅燈時想著他的 Project ,突然靈光一閃,就恍然大悟地拍了一下方向盤,然后在手機上匆忙記了點筆記。現在想想,真是好有趣。
確定方向
話說我們的任務和 Default 選項的 RobustQA Track 十分相似,都需要根據較少的訓練數據,搭建 Robust 的 QA 系統。于是,我們開始從 RobustQA 的 Handout 上尋找靈感。里面提供了一些可探索的方向,如“ Mixture-of-Experts ”、“ Domain Adversarial Training ”、“ Meta Learning ”。
當時我有搞 RobustQA 的同學,已經試過了這些方法,但很多都使效果不增反降,只有 Data Augmentation (數據增強)看上去有前途。于是3月7號,我和 Nina 開了個會,終于決定了我們的最終計劃:接下來一周專攻數據增強,如果搞好了,最后一周可以沖刺用 Ensemble 刷分。
此時,離 Report 截止還有不到12天,我便開啟了猛肝 Project 的模式。
創新的快感
按照我倆的分工,我主攻的數據增強方法是 Back-Translation (反向翻譯)。它的原理很簡單,就是一段英語句子,翻譯成比如說漢語,再回翻成英語,就得到了一段意思一致、表述不同的新句子。
對于像 SQuAD 、 FriendsQA 這樣的 QA 數據集來說,每道問題的標準答案,都是從給定的某段上下文里截取的一個 Span 。問題來了,現在上下文的用詞變了,這個 Span 怎么重新找呢?
這個問題似乎探索過的人不多,在 QANet 那篇 Paper 《QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension》[4]里用的方法是比較“ Character-Level 2-Gram Score ”,雖然效果不錯,但顯然它只是個 Heuristics ——只看字母的匹配,而沒有考慮含義是否匹配。有沒有更好的辦法呢?
3 月 10 號,我一直想著這個問題,突然有了個 idea :為啥不把所有詞向量相加起來,做比較和匹配呢?這樣不僅考慮進了(詞組/句子)的意義,也考慮了 Span 的長度。這個簡單的新方法似乎并沒有人用過,于是我初步跑了一些實驗,實驗效果還不錯。這讓我十分高興,這是我首次體驗到創新的快感(下圖就是我們最后提交的 Summary Diagram ,是這個新方法的示意圖)!
擊敗SoTA
生成了幾個增強數據集、驗證新方法的可行性之后,最后一周,按照計劃,我們用上 BERT-Large 和 Ensemble ,沖刺 FriendsQA 的 SoTA 。
那時我就像炒股一樣,天天盯著 Loss 和 F1 ,看是漲了還是跌了… Project做到這里,已經快做吐了,不過看著離SoTA越來越近,還是很激動。
最終,我們的 F1 分數達到了 72.1 ,比原 SoTA 提高了 2.5 個百分點。誠然,我們用了比原 SoTA 模型多好幾倍的參數,才達到這些成績;但對于一次 Final Project 來說,時間、資源如此有限,我覺得已經很不容易啦。
3 月 19 號凌晨,我和 Nina 肝完了 Report,一共 5000 多詞寫滿了 8 頁紙。這里我特別想提的是,幾乎所有的頂會 Paper,都會因為篇幅限制,省略超級多的細節,這可能會使得復現比較麻煩。
而在課程的 Project Report 里,我們可以補全這些細節,事無巨細地描述實驗是怎么做的:比如,計算詞向量時,如果出現 OOV 詞匯怎么處理?Ensemble 具體如何綜合不同模型的 Predictions ?Train 、Dev 、 Test 三個 Set 具體怎么用?等等。
總之,我在這次 NLP Project 上前后一共投入了大約 140 小時的精力,2021 年 3 月算是我兩年多以來最忙碌的一段日子,每天最多能在 Project 上投入 15 小時,當時還有其他課要上、有 Lab 的工作要做。但做完以后真的成就感滿滿!
這段經歷,可以說第一次讓我全方位地體驗了科研的樂趣。這里也感謝小軼提供的指點,我覺得比我們課程分配的 Mentor 有用多啦(當然這不怪我們 Mentor,畢竟他得一個人指導十幾個 Team…)
評獎出爐
224n 結課一個月之后,4 月 17 號,TA 們整理好了所有的 Report、選出了獲獎的 Report,都公開在了 224n 的官網上。我們屆 MSCS 有兩位女生做的醫學圖像轉文本的 Custom Project ,拿到了最佳報告獎,非常厲害!
我們組的 Report[5] 可以在這里找到:
報告題目:
Data Augmentation and Ensembling for FriendsQA
報告鏈接:
https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1214/reports/final_reports/report072.pdf
224n 之后的春學期有一門 224u(NLU),算是 224n 這門課的延續,不過我因為排課的原因并沒有上,比較可惜。不管怎樣,我在 224 的體驗非常棒,希望以后可以給大家帶來更多在 Stanford 計算機系上課的見聞!
尋求報道、約稿、文案投放:
添加微信xixiaoyao-1,備注“商務合作”
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
?
[1] FriendsQA: Open-Domain Question Answering on TV Show Transcripts. ?https://www.aclweb.org/anthology/W19-5923.pdf
[2] Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-based Question Answering
https://arxiv.org/pdf/2004.03561.pdf
[3] AI Lip Reading:
https://youtu.be/28U6EwfKois
[4] QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension:https://arxiv.org/abs/1804.09541
[5] Data Augmentation and Ensembling for FriendsQA:
https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1214/reports/final_reports/report072.pdf
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的谢撩,人在斯坦福打SoTA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐中的attention有什么作用?
- 下一篇: EMNLP'21 | 让压缩语言模型自动