0
雷鋒網(wǎng) AI 科技評論按,本文作者是香儂科技的李紀為,原載于知乎,雷鋒網(wǎng)獲得授權(quán)轉(zhuǎn)載。
ACL2019 投稿剛剛落幕,投稿數(shù)超過了 2800 篇,可以說是歷史以來最盛大的一屆 ACL。在深度學(xué)習(xí)的推動下,自然語言處理這個子領(lǐng)域也逐漸被推上人工智能大舞臺的最前列。
最近在跟同學(xué)的郵件、或者知乎留言中的交流中,不少同學(xué)尤其是剛?cè)耄╦in)門(keng)的同學(xué),提到了深度學(xué)習(xí)背景下做 NLP 科研的很多迷茫?;究梢詺w納為如下幾點:如今一個模型,幾十行 TensorFlow 或者 PyTorch 就可以解決掉,大家不厭其煩地刷數(shù)據(jù)集的 benchmark,但是因為如今實現(xiàn)模型的門檻低一些,SOTA 很難再刷的上去;就算好不容易刷上去了,因為模型千篇一律無非修修補補,文章投出去了因為 novelty 受限,文章中不中看天;即便是文章中了,似乎并無太大新意,灌水中已然迷茫。
深度算法的風(fēng)靡會讓研究者過度關(guān)心這些算法本身,而層出不窮模型結(jié)構(gòu)的調(diào)整和改進又讓我們眼花撩花。當(dāng)侃侃而談深度學(xué)習(xí)網(wǎng)絡(luò)結(jié)構(gòu)變成一個很 cool 的事情的時候,人們的虛榮心會使得不約而同地忽略了幾個重要點?;谖易约憾嗄陙碓?jīng)走過的彎路,踩過的坑,這篇文章做一點點小的總結(jié)。希望會對剛剛進入 NLP 領(lǐng)域的同學(xué)有所幫助。
1.了解 NLP 的最基本知識:Jurafsky 和 Martin 的 Speech and Language Processing 是領(lǐng)域內(nèi)的經(jīng)典教材,里面包含了 NLP 的基礎(chǔ)知識、語言學(xué)掃盲知識、基本任務(wù)以及解決思路。閱讀此書會接觸到很多 NLP 的最基本任務(wù)和知識,比如 tagging, 各種 parsing,coreference, semantic role labeling 等等等等。這對于全局地了解 NLP 領(lǐng)域有著極其重要的意義。書里面的知識并不需要爛熟于心,但是刷上一兩遍,起碼對于 NLP 任務(wù)有基本認識,下次遇到了知道去哪里找還是非常有意義的。另外 Chris Manning 的 introduction to information retrieval 也是一本可以掃一下盲的書,當(dāng)然我認為依然不需要記住所有細節(jié),但輪廓需要了解。IR 里面的很多基本算法跟 NLP 有不少的重合。說說我自己曾經(jīng)走過的彎路。Stanford NLP 的 qualification 考試的一部分就是選一些 jurafsky 和 manning 書里面的一些 chapter 來讀,然后老師來問相關(guān)問題。開始我一直對里面的東西懶得看,所以 qualification 考試一拖再拖。但博士最后一年沒辦法拖的時候,才發(fā)現(xiàn)如果早知道這些東西,博士早年可以少走很多彎路。
為什么了解 NLP 基礎(chǔ)知識的重要,我給大家舉幾個例子。
最近跟同學(xué)一起做語言模型 language modeling 相關(guān)的事情,很多同學(xué)用 LSTM 或者 transformers 做 language model 隨手就能實現(xiàn),但是實現(xiàn)一個 bigram 或者 trigram 的 language model(LM)卻因為里面的 OOV 的平滑問題卡了大半天(熟悉的同學(xué)可能知道,需要拉普拉斯平滑或者更 sophisticated 的 Kneser-Ney 平滑)。為什么 bigram 或者 trigram 的 LM 很重要呢?去做一個語言模型的問題,實現(xiàn)深度模型之前,第一步其實就要去寫一個 bigram 或者 trigram 的 LM。為什么呢?因為這些 N-gram 模型實現(xiàn)簡單,并且 robust。通過這樣簡單的實現(xiàn),可以告訴你這個數(shù)據(jù)集的 LM 模型的下限。這樣我們心里會有數(shù),神經(jīng)網(wǎng)絡(luò)模型至少不應(yīng)該比這個模型差的。神經(jīng)網(wǎng)絡(luò)模型因為其超參數(shù)、梯度爆炸等問題,有時候我們不太容易決定是真的模型不行、參數(shù)沒調(diào)好還是代碼有 bug。那么通過 N-gram LM 的給出的下限,我們就可以直觀地知道神經(jīng)網(wǎng)絡(luò)是有 bug 還是沒調(diào)好參數(shù)。
第二個例子就是涉及發(fā)文章了,不知道有沒有同學(xué)想過,BERT 里面訓(xùn)練 LM 的隨機替換為什么就使結(jié)果變好,隨機替換是什么鬼,怎么結(jié)果就好了。其實在 BERT 之前,斯坦福的吳恩達組的 Ziang Xie 的 Data Noising as Smoothing in Neural Network Language Models ICLR2017(https://arxiv.org/pdf/1703.02573.pdf)就首次提出了此方法,而且給出了理論解釋。這種 random 替換其實本質(zhì)上屬于 language modeling 里面基于 interpolation 的平滑方式,而基于 interpolation 的 LM 平滑,就躺在 jurafsky 那本書的第 3.4.3 節(jié)。
2.了解早年經(jīng)典的 NLP 模型以及論文:相比簡單粗暴的神經(jīng)網(wǎng)絡(luò)模型,早年的 NLP 算法確實比較繁瑣復(fù)雜,但里面確實有很多早年學(xué)者在硬件條件艱苦情況下的智慧結(jié)晶。熟悉了這些模型,可以在現(xiàn)在神經(jīng)網(wǎng)絡(luò)里面融會貫通。去年在人民大學(xué)做 seminar。Seminar 有大概 30-40 位同學(xué)參加。Seminar 中,我問了一個問題,有誰知道機器翻譯中的 IBM 模型大概是干嘛的,舉手的同學(xué)大概有五分之一。我再問,誰能來手寫(或者大概手寫)一下 IBM model1,一個人都沒有。僅僅從基于 IBM 模型的 Hierarchical Phrase-based MT, 近幾年就有很多篇引用量很高的文章是基于里面的思想的。例子數(shù)不勝數(shù):
chris dyer 組的 Incorporating structural alignment biases into an attentional neural translation model (NAACL16) 提出用雙向 attention 做 neural 機器翻譯的約束項,意思是如果在英語翻譯法語生成的 target 中的一個法語詞 attend 到了一個 source 中的英語詞,那么反過來,法語翻譯英文 target 中相同這個英語詞應(yīng)該也 attend 到 source 中的這個英語詞。其實這個思想就是完完全全相似 Percy Liang 曾經(jīng)的成名作之一,早在 NAACL06 年 Alignment by Agreement,大家通過題目的意思就可以猜到文章的內(nèi)容,正向翻譯與反向翻譯中的 對齊 (alignment) 要 一致 (agree)。如今做 neural MT 的同學(xué),有多少同學(xué)讀過 Percy 的這篇大作呢(大家知道 Percy 最多的應(yīng)該是 Squad 吧)。
處理對話系統(tǒng)的無聊回復(fù),用 p(target|source) 做 reranking 現(xiàn)在應(yīng)該已經(jīng)是標配。再比如 Rico Sennrich 的成名作之一將 Monolingual data 跟 seq2seq 模型結(jié)合。其實這連個思想在 phrase-base MT 里面早就被廣發(fā)的使用。Neural 之前的 MT,需要對一個大的 N-best list 用 MERT 做 reranking,反向概率 p(target|source) 以及語言模型概率 p(target) 是 reranking 中 feature 的標配。
Harvard NLP 組, Sam Wiseman 和 Alex 發(fā)表的 EMNLP16 best paper runner-up, Sequence-to-Sequence Learning as Beam-Search Optimization, 基本上傳承了 Daume′ III and Daniel Marcu 2005 年的 LaSO 模型,將其思想 adapt 到 neural 里面。
如果再準本溯源,誕生于 neural MT 的 attention,不就是 IBM 模型的神經(jīng)網(wǎng)絡(luò)版本嘛。
3.了解機器學(xué)習(xí)的基本模型:神經(jīng)網(wǎng)絡(luò)的簡單暴力并且有效。但是從科研的角度講,熟悉基本的機器學(xué)習(xí)算法是必修課。比如吳恩達的 machine learning 就是必要之選。記得前段時間我面試一個小伙子,一看就是很聰明的同學(xué),而且很短的時間就有一篇 NAACL 在投。我就問小伙子,EM 算法是什么,小伙子說沒有聽說過 EM,而且自己的科研也用不到 EM。我認為這其實是一個挺大的誤區(qū)。當(dāng)我想起我自己,曾經(jīng)就吃過很多類似的虧。因為早期數(shù)學(xué)基礎(chǔ)偏弱,也沒有決心惡補一下數(shù)學(xué),所以早年每次看到跟 variational inference 相關(guān)的算法就頭大,這種偏科持續(xù)了很久,限制了科研的廣度。相比粗暴的神經(jīng)網(wǎng)絡(luò),CRF 等模型的 inference 確實相對復(fù)雜(當(dāng)年我自己也看了很多次才徹底搞明白)。但搞懂這些,是一個 NLP researcher 的基本素養(yǎng)。Pattern Recognition and Machine Learning 那本書,尤其是某些小節(jié)確實比較難(又暴露了數(shù)學(xué)基礎(chǔ)差的事實),即便是只是為了過一遍,也需要很強的耐力才能看完,更不用說完全看懂了。我自己也曾經(jīng)半途而廢很多次,如今依然有很多章節(jié)是不太懂的。但是其中的很多基礎(chǔ) chapter,我認為還是很值得一讀的。其實可以組成那種兩三個人的學(xué)習(xí)小組,不需要有太雄偉的目標,用個一年哪怕兩年的時間,把幾個重要的 chapter 過一遍。
NLP 相對是應(yīng)用科學(xué),并不是特別的數(shù)學(xué)。但是我們天天用的算法的基本數(shù)學(xué)邏輯我認為還是需要搞懂,比如 dropout, 比如天天用到的優(yōu)化 (SGD, momentum, adaboost, adagrad),比如各種 batch, layer normalization。這樣其實可以省去很多浪費的時間,磨刀不誤砍柴工。這些年來,在幫同學(xué)調(diào) bug 的過程中,我至少遇見過 3-5 個同學(xué) training 的時候開 dropout, test 的時候沒有對每個 cell 用 (1-dropout) 去 scale(大家不要笑,這是真的)。然后畫出 dropout 曲線就是 dropout 值越大,結(jié)果越差。在討論的時候,同學(xué)一臉茫然并且不清楚 test 時候需要 scale。其實本質(zhì)就是并不了解 dropout 背后的數(shù)學(xué)原理。
4.多看 NLP 其他子領(lǐng)域的論文:NLP 有很多子領(lǐng)域,MT,信息抽取,parsing,tagging,情感分析,MRC 等等。多多熟悉其他子領(lǐng)域的進展是必要的。其實不同子領(lǐng)域所運用的模型不會相差太大。但是最開始看不熟悉領(lǐng)域的問題可能會有一點難,原因是對問題的 formalization 不是很了解。這可能就需要多花一些時間,多找懂的同學(xué)去問。其實了解不同問題的 formalization 也是對領(lǐng)域知識最好的擴充。
5.了解 CV 和 data mining 領(lǐng)域的基本重大進展:當(dāng)熟悉了上面所說的點之后(當(dāng)然可能至少也需要一年的時間)。熟悉 CV 領(lǐng)域的基本任務(wù)、基本算法我認為對于打開科研視野很重要。但是不可否認,因為領(lǐng)域不用,寫作風(fēng)格、術(shù)語表達相差很大,又因為缺乏背景知識(文章中會省略一些基礎(chǔ)知識,默認大家都懂。但是跨領(lǐng)域的人可能不懂),第一次想讀懂跨領(lǐng)域的文章其實并不容易。我就出現(xiàn)過竟然在討論班上直接把 faster-RCNN 講錯了的情況,以為自己看懂了,然后就講錯了(至今昱先天天還在因為這個事情調(diào)侃我)。不過重要的是,NLP 領(lǐng)域里面一些重要的文章其實或多或少借鑒了 CV 里面的思想,當(dāng)然也同樣出現(xiàn) CV 借鑒 NLP 的情況。NLP 神經(jīng)網(wǎng)絡(luò)可視化、可解釋性的研究,時間上還是落后于 CV 里面對 CNN 的可視化。所以很多工作大量借鑒了 CV 里面的類似工作。NLP 運用 GAN 其實也是借鑒 CV 的。其實兩個領(lǐng)域很多是很相通的。比如,如果不考慮 question query, vision 里面 detection 中的 region proposal(在一個大的圖片背景下找一個特定區(qū)域), 大家想是不是跟 MRC 里面的 span extraction(在一大堆文字里面找一個 span)有異曲同工之妙。更不用說 image caption generation 與 sequence-to-sequence 模型了,本質(zhì)上幾乎沒什么太大的區(qū)別。強化學(xué)習(xí)在生成領(lǐng)域 generation,發(fā)完了 MT(Ranzato et al., ICLR2016) 再發(fā) image caption generation, 再回到 summarization. Actor-critic 模型也是類似的,還是很多做 generation diversity 的文章。因為跨領(lǐng)域不好懂,所以第一次推薦看 tutorial, 如果有 sudo code 的 tutorial 那就更好了。另外看看掃盲課的視頻,比如 Stanford CS231n 也是個好辦法。另外,一個 NLP 組里面有一個很懂 CV 的人也很重要(拜謝昱先),and vise versa。
graph embedding 近兩年崛起于 data mining 領(lǐng)域。目測會在(或者已經(jīng)在)NLP 的不少任務(wù)得到廣泛應(yīng)用。想到幾年前,deep walk 借鑒了 word2vec, 開始在 data mining 領(lǐng)域發(fā)跡,然后似乎又要輪轉(zhuǎn)回 NLP 了。
當(dāng)然啦如何寫論文也是極其重要的一環(huán),但不是這篇文章的主題,強烈推薦清華大學(xué)劉知遠老師的相關(guān)文章:https://zhuanlan.zhihu.com/p/58752815
先寫到這兒,歡迎大家補充拍磚。
香儂科技 李紀為 2019 年 3 月 11 日
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。