當前位置:
首頁 > 新聞 > 初入NLP領域的一些小建議

初入NLP領域的一些小建議

雷鋒網 AI 科技評論按,本文作者是香儂科技的李紀為,原載於知乎,雷鋒網獲得授權轉載。

ACL2019 投稿剛剛落幕,投稿數超過了 2800 篇,可以說是歷史以來最盛大的一屆 ACL。在深度學習的推動下,自然語言處理這個子領域也逐漸被推上人工智慧大舞台的最前列。

最近在跟同學的郵件、或者知乎留言中的交流中,不少同學尤其是剛入(jin)門(keng)的同學,提到了深度學習背景下做 NLP 科研的很多迷茫。基本可以歸納為如下幾點:如今一個模型,幾十行 TensorFlow 或者 PyTorch 就可以解決掉,大家不厭其煩地刷數據集的 benchmark,但是因為如今實現模型的門檻低一些,SOTA 很難再刷的上去;就算好不容易刷上去了,因為模型千篇一律無非修修補補,文章投出去了因為 novelty 受限,文章中不中看天;即便是文章中了,似乎並無太大新意,灌水中已然迷茫。

深度演算法的風靡會讓研究者過度關心這些演算法本身,而層出不窮模型結構的調整和改進又讓我們眼花撩花。當侃侃而談深度學習網路結構變成一個很 cool 的事情的時候,人們的虛榮心會使得不約而同地忽略了幾個重要點。基於我自己多年來曾經走過的彎路,踩過的坑,這篇文章做一點點小的總結。希望會對剛剛進入 NLP 領域的同學有所幫助。

1.了解 NLP 的最基本知識:Jurafsky 和 Martin 的 Speech and Language Processing 是領域內的經典教材,裡面包含了 NLP 的基礎知識、語言學掃盲知識、基本任務以及解決思路。閱讀此書會接觸到很多 NLP 的最基本任務和知識,比如 tagging, 各種 parsing,coreference, semantic role labeling 等等等等。這對於全局地了解 NLP 領域有著極其重要的意義。書裡面的知識並不需要爛熟於心,但是刷上一兩遍,起碼對於 NLP 任務有基本認識,下次遇到了知道去哪裡找還是非常有意義的。另外 Chris Manning 的 introduction to information retrieval 也是一本可以掃一下盲的書,當然我認為依然不需要記住所有細節,但輪廓需要了解。IR 裡面的很多基本演算法跟 NLP 有不少的重合。說說我自己曾經走過的彎路。Stanford NLP 的 qualification 考試的一部分就是選一些 jurafsky 和 manning 書裡面的一些 chapter 來讀,然後老師來問相關問題。開始我一直對裡面的東西懶得看,所以 qualification 考試一拖再拖。但博士最後一年沒辦法拖的時候,才發現如果早知道這些東西,博士早年可以少走很多彎路。

為什麼了解 NLP 基礎知識的重要,我給大家舉幾個例子。

最近跟同學一起做語言模型 language modeling 相關的事情,很多同學用 LSTM 或者 transformers 做 language model 隨手就能實現,但是實現一個 bigram 或者 trigram 的 language model(LM)卻因為裡面的 OOV 的平滑問題卡了大半天(熟悉的同學可能知道,需要拉普拉斯平滑或者更 sophisticated 的 Kneser-Ney 平滑)。為什麼 bigram 或者 trigram 的 LM 很重要呢?去做一個語言模型的問題,實現深度模型之前,第一步其實就要去寫一個 bigram 或者 trigram 的 LM。為什麼呢?因為這些 N-gram 模型實現簡單,並且 robust。通過這樣簡單的實現,可以告訴你這個數據集的 LM 模型的下限。這樣我們心裡會有數,神經網路模型至少不應該比這個模型差的。神經網路模型因為其超參數、梯度爆炸等問題,有時候我們不太容易決定是真的模型不行、參數沒調好還是代碼有 bug。那麼通過 N-gram LM 的給出的下限,我們就可以直觀地知道神經網路是有 bug 還是沒調好參數。

第二個例子就是涉及發文章了,不知道有沒有同學想過,BERT 裡面訓練 LM 的隨機替換為什麼就使結果變好,隨機替換是什麼鬼,怎麼結果就好了。其實在 BERT 之前,斯坦福的吳恩達組的 Ziang Xie 的 Data Noising as Smoothing in Neural Network Language Models ICLR2017(https://arxiv.org/pdf/1703.02573.pdf)就首次提出了此方法,而且給出了理論解釋。這種 random 替換其實本質上屬於 language modeling 裡面基於 interpolation 的平滑方式,而基於 interpolation 的 LM 平滑,就躺在 jurafsky 那本書的第 3.4.3 節。

2.了解早年經典的 NLP 模型以及論文:相比簡單粗暴的神經網路模型,早年的 NLP 演算法確實比較繁瑣複雜,但裡面確實有很多早年學者在硬體條件艱苦情況下的智慧結晶。熟悉了這些模型,可以在現在神經網路裡面融會貫通。去年在人民大學做 seminar。Seminar 有大概 30-40 位同學參加。Seminar 中,我問了一個問題,有誰知道機器翻譯中的 IBM 模型大概是幹嘛的,舉手的同學大概有五分之一。我再問,誰能來手寫(或者大概手寫)一下 IBM model1,一個人都沒有。僅僅從基於 IBM 模型的 Hierarchical Phrase-based MT, 近幾年就有很多篇引用量很高的文章是基於裡面的思想的。例子數不勝數:

  1. chris dyer 組的 Incorporating structural alignment biases into an attentional neural translation model(NAACL16) 提出用雙向 attention 做 neural 機器翻譯的約束項,意思是如果在英語翻譯法語生成的 target 中的一個法語詞 attend 到了一個 source 中的英語詞,那麼反過來,法語翻譯英文 target 中相同這個英語詞應該也 attend 到 source 中的這個英語詞。其實這個思想就是完完全全相似 Percy Liang 曾經的成名作之一,早在 NAACL06 年 Alignment by Agreement,大家通過題目的意思就可以猜到文章的內容,正向翻譯與反向翻譯中的 對齊 (alignment) 要 一致 (agree)。如今做 neural MT 的同學,有多少同學讀過 Percy 的這篇大作呢(大家知道 Percy 最多的應該是 Squad 吧)。

  2. 處理對話系統的無聊回復,用 p(target|source) 做 reranking 現在應該已經是標配。再比如 Rico Sennrich 的成名作之一將 Monolingual data 跟 seq2seq 模型結合。其實這連個思想在 phrase-base MT 裡面早就被廣發的使用。Neural 之前的 MT,需要對一個大的 N-best list 用 MERT 做 reranking,反向概率 p(target|source) 以及語言模型概率 p(target) 是 reranking 中 feature 的標配。

  3. Harvard NLP 組, Sam Wiseman 和 Alex 發表的 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 模型的神經網路版本嘛。

3.了解機器學習的基本模型:神經網路的簡單暴力並且有效。但是從科研的角度講,熟悉基本的機器學習演算法是必修課。比如吳恩達的 machine learning 就是必要之選。記得前段時間我面試一個小夥子,一看就是很聰明的同學,而且很短的時間就有一篇 NAACL 在投。我就問小夥子,EM 演算法是什麼,小夥子說沒有聽說過 EM,而且自己的科研也用不到 EM。我認為這其實是一個挺大的誤區。當我想起我自己,曾經就吃過很多類似的虧。因為早期數學基礎偏弱,也沒有決心惡補一下數學,所以早年每次看到跟 variational inference 相關的演算法就頭大,這種偏科持續了很久,限制了科研的廣度。相比粗暴的神經網路,CRF 等模型的 inference 確實相對複雜(當年我自己也看了很多次才徹底搞明白)。但搞懂這些,是一個 NLP researcher 的基本素養。Pattern Recognition and Machine Learning 那本書,尤其是某些小節確實比較難(又暴露了數學基礎差的事實),即便是只是為了過一遍,也需要很強的耐力才能看完,更不用說完全看懂了。我自己也曾經半途而廢很多次,如今依然有很多章節是不太懂的。但是其中的很多基礎 chapter,我認為還是很值得一讀的。其實可以組成那種兩三個人的學習小組,不需要有太雄偉的目標,用個一年哪怕兩年的時間,把幾個重要的 chapter 過一遍。

NLP 相對是應用科學,並不是特別的數學。但是我們天天用的演算法的基本數學邏輯我認為還是需要搞懂,比如 dropout, 比如天天用到的優化 (SGD, momentum, adaboost, adagrad),比如各種 batch, layer normalization。這樣其實可以省去很多浪費的時間,磨刀不誤砍柴工。這些年來,在幫同學調 bug 的過程中,我至少遇見過 3-5 個同學 training 的時候開 dropout, test 的時候沒有對每個 cell 用 (1-dropout) 去 scale(大家不要笑,這是真的)。然後畫出 dropout 曲線就是 dropout 值越大,結果越差。在討論的時候,同學一臉茫然並且不清楚 test 時候需要 scale。其實本質就是並不了解 dropout 背後的數學原理。

4.多看 NLP 其他子領域的論文:NLP 有很多子領域,MT,信息抽取,parsing,tagging,情感分析,MRC 等等。多多熟悉其他子領域的進展是必要的。其實不同子領域所運用的模型不會相差太大。但是最開始看不熟悉領域的問題可能會有一點難,原因是對問題的 formalization 不是很了解。這可能就需要多花一些時間,多找懂的同學去問。其實了解不同問題的 formalization 也是對領域知識最好的擴充。

5.了解 CV 和 data mining 領域的基本重大進展:當熟悉了上面所說的點之後(當然可能至少也需要一年的時間)。熟悉 CV 領域的基本任務、基本演算法我認為對於打開科研視野很重要。但是不可否認,因為領域不用,寫作風格、術語表達相差很大,又因為缺乏背景知識(文章中會省略一些基礎知識,默認大家都懂。但是跨領域的人可能不懂),第一次想讀懂跨領域的文章其實並不容易。我就出現過竟然在討論班上直接把 faster-RCNN 講錯了的情況,以為自己看懂了,然後就講錯了(至今昱先天天還在因為這個事情調侃我)。不過重要的是,NLP 領域裡面一些重要的文章其實或多或少借鑒了 CV 裡面的思想,當然也同樣出現 CV 借鑒 NLP 的情況。NLP 神經網路可視化、可解釋性的研究,時間上還是落後於 CV 裡面對 CNN 的可視化。所以很多工作大量借鑒了 CV 裡面的類似工作。NLP 運用 GAN 其實也是借鑒 CV 的。其實兩個領域很多是很相通的。比如,如果不考慮 question query, vision 裡面 detection 中的 region proposal(在一個大的圖片背景下找一個特定區域), 大家想是不是跟 MRC 裡面的 span extraction(在一大堆文字裡面找一個 span)有異曲同工之妙。更不用說 image caption generation 與 sequence-to-sequence 模型了,本質上幾乎沒什麼太大的區別。強化學習在生成領域 generation,發完了 MT(Ranzato et al., ICLR2016) 再發 image caption generation, 再回到 summarization. Actor-critic 模型也是類似的,還是很多做 generation diversity 的文章。因為跨領域不好懂,所以第一次推薦看 tutorial, 如果有 sudo code 的 tutorial 那就更好了。另外看看掃盲課的視頻,比如 Stanford CS231n 也是個好辦法。另外,一個 NLP 組裡面有一個很懂 CV 的人也很重要(拜謝昱先),and vise versa。

graph embedding 近兩年崛起於 data mining 領域。目測會在(或者已經在)NLP 的不少任務得到廣泛應用。想到幾年前,deep walk 借鑒了 word2vec, 開始在 data mining 領域發跡,然後似乎又要輪轉回 NLP 了。

當然啦如何寫論文也是極其重要的一環,但不是這篇文章的主題,強烈推薦清華大學劉知遠老師的相關文章:https://zhuanlan.zhihu.com/p/58752815

先寫到這兒,歡迎大家補充拍磚。

香儂科技 李紀為 2019 年 3 月 11 日

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

微軟全球執行副總裁沈向洋:你給自己的定位是什麼,你就會得到什麼
勒索、挖礦同時下手,這個Satan變種病毒有點「牛」

TAG:雷鋒網 |