保姆級自然語言處理入門指南(三個月)

分享一下我的學(xué)習(xí)路徑,正常的理工科大學(xué)生大概三四個月可以入門(學(xué)過C語言、線性代數(shù)、概率論),獨(dú)立解決NLP問題,搭建baseline并適當(dāng)優(yōu)化效果。

之后的更新都會定期發(fā)文并匯總在Github上,歡迎催更:

https://github.com/leerumor/nlp_tutorial

注:想組隊學(xué)習(xí)的同學(xué)可以按文末的方式加入交流群

下面開始學(xué)!習(xí)?。ㄇ煤诎澹?/p>

如何系統(tǒng)地學(xué)習(xí)

機(jī)器學(xué)習(xí)是一門既重理論又重實(shí)踐的學(xué)科,想一口吃下這個老虎是不可能的,因此學(xué)習(xí)應(yīng)該是個循環(huán)且逐漸細(xì)化的過程。

首先要有個全局印象,知道m(xù)inimum的情況下要學(xué)哪些知識點(diǎn):

image

之后就可以開始逐個擊破,但也不用死磕,控制好目標(biāo)難度,先用三個月時間進(jìn)行第一輪學(xué)習(xí):

  1. 讀懂機(jī)器學(xué)習(xí)、深度學(xué)習(xí)原理,不要求手推公式
  2. 了解經(jīng)典任務(wù)的baseline,動手實(shí)踐,看懂代碼
  3. 深入一個應(yīng)用場景,嘗試自己修改模型,提升效果

邁過了上面這道坎后,就可以重新回歸理論,提高對自己的要求,比如手推公式、盲寫模型、拿到比賽Top等。

Step1: 基礎(chǔ)原理

機(jī)器學(xué)習(xí)最初入門時對數(shù)學(xué)的要求不是很高,掌握基礎(chǔ)的線性代數(shù)、概率論就可以了,正常讀下來的理工科大學(xué)生以上應(yīng)該都沒問題,可以直接開始學(xué),碰到不清楚的概念再去復(fù)習(xí)。

統(tǒng)計機(jī)器學(xué)習(xí)部分,建議初學(xué)者先看懂線性分類、SVM、樹模型和圖模型,這里推薦李航的「統(tǒng)計學(xué)習(xí)方法」,薄薄的摸起來沒有很大壓力,背著也方便,我那本已經(jīng)翻四五遍了。喜歡視頻課程的話可以看吳恩達(dá)的「CS229公開課」或者林田軒的「機(jī)器學(xué)習(xí)基石」。但不管哪個教程,都不必要求一口氣看完吃透,第一輪先重點(diǎn)看懂以下知識點(diǎn)就夠了:

image

深度學(xué)習(xí)部分,推薦吳恩達(dá)的「深度學(xué)習(xí)」網(wǎng)課、李宏毅的「深度學(xué)習(xí)」網(wǎng)課或者邱錫鵬的「神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)」教材。先弄懂神經(jīng)網(wǎng)絡(luò)的反向傳播推導(dǎo),然后去了解詞向量和其他的編碼器的核心思想、前向反向過程:

image

Step2: 經(jīng)典模型與技巧

有了上述的基礎(chǔ)后,應(yīng)該就能看懂模型結(jié)構(gòu)和論文里的各種名詞公式了。接下來就是了解NLP各個經(jīng)典任務(wù)的baseline,并看懂源碼。對于TF和Pytorch的問題不用太糾結(jié),接口都差不多,找到什么就看什么,自己寫的話建議Pytorch。

快速了解經(jīng)典任務(wù)脈絡(luò)可以看綜述,建議先了解一兩個該任務(wù)的經(jīng)典模型再去看,否則容易云里霧里:

2020 A Survey on Text Classification: From Shallow to Deep Learning
2020 A Survey on Recent Advances in Sequence Labeling from Deep Learning Models 
2020 Evolution of Semantic Similarity - A Survey
2017 Neural text generation: A practical guide 
2018 Neural Text Generation: Past, Present and Beyond
2019 The survey: Text generation models in deep learning
2020 Efficient Transformers: A Survey

文本分類

文本分類是NLP應(yīng)用最多且入門必備的任務(wù),TextCNN堪稱第一baseline,往后的發(fā)展就是加RNN、加Attention、用Transformer、用GNN了。第一輪不用看得太細(xì),每類編碼器都找個代碼看一下即可,順便也為其他任務(wù)打下基礎(chǔ)。

image

但如果要做具體任務(wù)的話,建議倒序去看SOTA論文,了解各種技巧,同時善用知乎,可以查到不少提分方法。

文本匹配

文本匹配會稍微復(fù)雜些,它有雙塔和匹配兩種任務(wù)范式。雙塔模型可以先看SiamCNN,了解完結(jié)構(gòu)后,再深入優(yōu)化編碼器的各種方法;基于匹配的方式則在于句子表示間的交互,了解BERT那種TextA+TextB拼接的做法之后,可以再看看阿里的RE2這種輕量級模型的做法:

image

序列標(biāo)注

序列標(biāo)注主要是對Embedding、編碼器、結(jié)果推理三個模塊進(jìn)行優(yōu)化,可以先讀懂Bi-LSTM+CRF這種經(jīng)典方案的源碼,再去根據(jù)需要讀論文改進(jìn)。

image

文本生成

文本生成是最復(fù)雜的,具體的SOTA模型我還沒梳理完,可以先了解Seq2Seq的經(jīng)典實(shí)現(xiàn),比如基于LSTM的編碼解碼+Attention、純Transformer、GPT2以及T5,再根據(jù)興趣學(xué)習(xí)VAE、GAN、RL等。

語言模型

語言模型雖然很早就有了,但18年BERT崛起之后才越來越被重視,成為NLP不可或缺的一個任務(wù)。了解BERT肯定是必須的,有時間的話再多看看后續(xù)改進(jìn),很經(jīng)典的如XLNet、ALBERT、ELECTRA還是不容錯過的。

image

Step3: 實(shí)踐優(yōu)化

上述任務(wù)都了解并且看了一些源碼后,就該真正去當(dāng)煉丹師了。千萬別滿足于跑通別人的github代碼,最好去參加一次Kaggle、天池、Biendata等平臺的比賽,享受優(yōu)化模型的摧殘。

Kaggle的優(yōu)點(diǎn)是有各種kernel可以學(xué)習(xí),國內(nèi)比賽的優(yōu)點(diǎn)是中文數(shù)據(jù)方便看case。建議把兩者的優(yōu)點(diǎn)結(jié)合,比如參加一個國內(nèi)的文本匹配比賽,就去kaggle找相同任務(wù)的kernel看,學(xué)習(xí)別人的trick。同時多看些頂會論文并復(fù)現(xiàn),爭取做完一個任務(wù)后就把這個任務(wù)技巧摸清。

總結(jié)

其實(shí)自己剛開始學(xué)的時候只到了minimum的水平,在后續(xù)的實(shí)踐、面試中才逐漸把知識點(diǎn)補(bǔ)全,并歸到自己的體系里。剛?cè)腴T的同學(xué)們也不要?dú)怵H,先懵懵懂懂地看一看原理,哆哆嗦嗦地跑一跑代碼,時間會給你答案。懷疑自己的時候,就算算自己到底學(xué)了多久,沒到一萬小時之前都還來得及。

推薦閱讀


歡迎初入NLP領(lǐng)域的小伙伴們加入rumor建立的「NLP卷王養(yǎng)成群」一起學(xué)習(xí),添加微信leerumorrr備注簡書+NLP即可,群里的討論氛圍非常好~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容