從基礎到實戰的 NLP 學習清單

先mark起來

 

作爲一名自然語言初學者,在 NLP 裏摸爬滾打了許久,一些心得,請壯士收下。

談一下自己探索過的摸爬滾打過的方法,大致可以分爲二種。

第一種,在實踐中學習,找一個特定的任務,譬如文本分類、情感分析等。然後以做好任務爲導向的去挖掘和這一個任務相關的知識點。

由於沒有系統的學習,肯定會遇到各種各樣的攔路虎問題,當遇到不懂的概念時,利用百度/谷歌查閱相關資料去理解學習這個概念,若是概念難懂,就多看不同的人對這些概念的理解,有的時候有些人能深入淺出的講解一些很不錯的資料,個人覺得這種有目的性的實踐學習方式學來的東西更加印象深刻。

這樣也在潛移默化中鍛鍊了個人能力(獨立查找資料/文獻是一種極其重要的能力),又能達成某些目的。這樣過了一段時間之後,好像懂很多東西了,但是好像又有很多方面不瞭解,其實這就是在某個點有點深度了,但是廣度還不夠。

如果此時有大把閒置的時間,就可以去刷刷那些不錯的系統性課程,刷課的時候會發現很多概念理解起來輕鬆多了,或者說似曾相識(理解的知識點又得到了複習並再次確認自己的理解了的知識點和這些老師講的是否一致)。

第二種,就是一上來就是刷課刷書,把理論什麼的都梳理一遍,然後根據課程把課後作業都敲一遍並且理解。

這樣系統的學習雖然會花上很長的時間,但是也會讓你對知識體系有個全面的認識,之後你再進去某個小點(比如文本分類等)的深入探索,會發現很多東西都理解學習過。

其實你已經有了知識的廣度,但是對某個點的知識深度還欠缺,此時就按需深挖即可,當然,這個過程肯定也不輕鬆。

其實這二種學習方法我覺得都挺不錯,根據自身具體情況具體分析,交叉使用,效果應該更佳。現在回過頭來看,我之前的學習方法更像第一種。

 

最近想從頭開始學一些基礎知識,以查漏補缺,所以整理了一大波不錯的資料,作爲開年大禮包送給初學者們,往下看,你想要的都在後面,記得看完免費的來一個喲!

編程語言

初學者推薦 python,安裝方法可以選擇純 python 安裝也可以選擇 Anaconda 方式安裝。IDE推薦 pycharm。

 

此外,強烈推薦初學者使用 jupyter 來學習代碼,感覺真的超級贊。

 

對於新手應該如何學 python,個人覺得最重要的是寫,排除那種特別優秀的人,相信大部分人都可以歸入到我亦無他,唯手熟爾

因此前期的代碼量是必不可少的,即使在不熟悉的語法情況下對着敲也不失爲一種不錯的方法,總而言之,要敲,要實踐,從而達到手熟

 

有人會問,那我一開始敲什麼呢? 初學者建議把python基本語法敲一遍,可以配合 jupyter,這樣可以很方便的敲完一個方法就能實時運行展示效果。然後敲一些基礎的 python 包的基本用法,譬如最基本的 numpy、pandas、matlibplot 三劍客。

 

個人建議一開始沒必要對裏面的每個方法都去深究,這樣做會很費時而且可能正反饋也不大,把簡單的基本的用法敲幾遍熟悉,在這個過程中,要慢慢鍛鍊一種能力:碰到問題能夠獨立通過百度/谷歌解決。以後會發現這種能力尤爲重要。

 

自然語言處理初學者首先要了解熟悉nlp領域的基本術語、任務定義以及一些基本算法,前期可以結合一些不錯的工具實踐,比如經典的 jieba、hanlp、snownlp、stanfordcorenlp、spaCy、pyltp、nltk、textblob、gensim、scikit-learn等,以及最近的 pkuseg、flair 等等。通過這些熟悉比如任務的輸入輸出、評價指標以及應用場景等等。

書籍推薦

個人覺得從頭到尾的看書對於初學者來說不太友好,但是必備的工具書放在手邊經常查閱是必不可少的。比如周志華老師的西瓜書《機器學習》、李航的《統計學習方法》、宗成慶的《統計自然語言處理》以及花書《Deep Learning》等等。

另外一些比較有意思的書譬如《數學之美》也可以讀讀,通俗易懂的語言會讓你對這個領域產生興趣,最後推薦一本培養機器學習思維的書《Machine Learning Yearning》。就此打住,對於初學者這幾本工具書我覺得夠了。

此外,當你們發現手頭的資料不夠的時候,相信你已經擁有了自我搜索尋找更好更進階資料的能力了,所以我這裏也不多說了,授人以魚不如授人以漁。

搜索資料一般最簡單的就是百度、谷歌,相同的關鍵詞在這二種搜索引擎上得到的結果可能也大相徑庭,所以在不能找到滿意的結果時不妨二者都嘗試下。

另一方面,一些開放了githu b的項目也可以去 github 上提問,當然 github 也是搜代碼的好平臺。初學者可以慢慢嘗試,總結經驗,以便培養自己的解決問題的能力。

當你能力再提升到一個階段時,可能現階段的東西都不能滿足你,此時,可以鍛鍊直接看官方 API 了,第一手資源當然是最好的選擇,一些前沿的東西可以直接看相關paper。關於如何尋找相關文獻我後面會給出自己的一些經驗。

視頻課程

時間充裕的朋友還是推薦有選擇性的看一下不錯的課程,這裏收集了一大波優秀的免費課程,請收下這個大禮包。

  • 吳恩達的機器學習:https://0x9.me/m8J6G
    這是機器學習的經典視頻。
     

  • 網易雲課堂有吳恩達的名爲深度學習工程師免費微專業
    :https://0x9.me/bnMf9
    一共包括四周課程,分別爲:

    1. 神經網絡和深度學習

    2. 改善深層神經網絡:超參數調試、正則化以及優化

    3. 結構化機器學習項目

    4. 卷積神經網絡

    5. 序列模型
     

  • 李宏毅老師的系列課程:
    http://speech.ee.ntu.edu.tw/~tlkagk/courses.html
    沒梯子可以在B站看:https://0x9.me/zd052

  • CS224n: http://web.stanford.edu/class/cs224n/
    斯坦福的深度學習的自然語言處理,包括視頻、PPT講義。
     

  • Oxford Course on Deep Learning for Natural Language Processing:
    https://machinelearningmastery.com/oxford-course-deep-learning-natural-language-processing/

 

  • 林軒田老師的課程,機器學習基石和機器學習技法。
    主頁:https://www.csie.ntu.edu.tw/~htlin/mooc/
    主頁可以找到課程資料以及視頻鏈接。沒梯子也可以B站看。

    1.機器學習基石:https://0x9.me/t6rIR
    2.機器學習技法:https://0x9.me/OcZep
    教程習題解答:https://github.com/Doraemonzzz/Learning-from-data

 

我相信以上大家肯定都或多或少聽過,應該都屬於經典教程了,所以有大量時間的初學者可以花時間鑽研學習,看不懂的地方多看幾篇,再看不懂就網上查閱各種資料包括別人的學習筆記繼續研究,相信經歷過之後肯定是豁然開朗並且功力大爲長進。

推薦黃海廣博士的筆記,作爲參考:

  • 吳恩達機器學習筆記:
    https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

  • 吳恩達深度學習課程筆記:https://github.com/fengdu78/deeplearning_ai_books

學術論文

當知識貯備到一定量的時候,自身的能力也提升上來了,此時就可以直接看第一手資源了:官方 API 和論文。

 

關於論文,如果是研究生的話基本上都繞不過去,所以問題來了,我們應該看什麼樣的文章?答案自然是看高質量的文章啦~ 這不是廢話麼,那高質量的文章應該如何去找呢?

 

國內有一個關於計算機的排名叫

CCF 推薦排名:https://www.ccf.org.cn/xspj/gyml/

裏面保羅了計算機各大領域的會議期刊排名,比如計算機體系結構、計算機網絡、人工智能、數據挖掘等等。CCF 推薦排名把會議和期刊被分成 A,B,C 三類。但是這個國內人搞的,國外基本不看這個。不過被推到這裏的會議/期刊質量都還算不錯。

國外把 ACL、EMNLP、NAACL、COLING 被稱爲 NLP 四大頂會,其中唯獨ACL在CCF裏面是 A 類,可見在 ACL 中一篇文章是很難的(ps:這也是作爲nlper的我以後的目標之一)。ACL 學會在北美和歐洲召開分年會,分別稱爲NAACL和EACL。

ACL 學會下設多個特殊興趣小組,其中比較有名的諸如 SIGDAT、SIGNLL 等。而 EMNLP 則是 SIGDAT 組織的國際會議。比較有名的還有 SIGNLL 組織的 CoNLL。

NLP/CL 也有自己的旗艦學術期刊 Computational Linguistics 和 ACL 創辦的期刊 TACL,雖然 TACL 目前沒有被推入 CCF,但是 TACL 真的超級難感覺。

作爲交叉學科,也有很多相關領域值得關注。主要包括:信息檢索和數據挖掘領域:SIGIR、WWW、KDD、WSDM 等和人工智能領域: AAAI、IJCAI 等。

對於期刊和會議,建議大家直接看會議文章,因爲會議文章都比較實時,而且大多數人會把直接的最新研究發到會議上,中了會議之後再去做進一步完善補充擴展成期刊。

所以對於目的爲發文章的研究生,首先看會議文章即可,當發現此文值得深入研究的時候,可以去嘗試尋找期刊版(當然也不一定有)。

那麼應該如何下載文章呢?

對於會議文章直接去主頁搜索接收文章列表,很多不會提供下載鏈接,那就把需要的文章名複製粘貼到百度學術/谷歌學術裏面去搜索下載。

深度學習框架

深度學習如此火熱,當然在自然語言處理也激起了不小的浪花,比如從 2013 年的 word2vec 到現在的 BERT,都是很不錯的工作,初學者肯定也是要接觸深度學習框架的,那面對衆多的框架應該如何選擇呢?

深度學習框架很多,包括 TensorFlow、Keras、Caffe、CNTK、PyTorch、MXnet、DeepLearning4J、Theano、PaddlePaddle、Chainer、Lasagne等等。推薦初學者keras,Keras 是一個高層神經網絡API,它由純 Python 編寫而成,並基於 Tensorflow、Theano 以及 CNTK 作爲後端。

當然,寫工程更多的是用 Tensorflow,搞學術的人可能更喜好 Pytorch。所以這裏也收集了一些不錯的資料。

Keras

  • 官方文檔:
    https://github.com/keras-team/keras

  • 中文文檔:
    https://keras-cn.readthedocs.io/en/latest/

  • 例子:
    https://github.com/keras-team/keras/tree/master/examples

Tensorflow

  • 官方文檔:
    https://github.com/tensorflow/tensorflow

  • 中文文檔:
    http://www.tensorfly.cn/

  • 中文教程:
    https://github.com/CreatCodeBuild/TensorFlow-and-DeepLearning-Tutorial

  • 例子:
    https://github.com/aymericdamien/TensorFlow-Examples

Pytorch

  • 官方文檔:
    https://github.com/pytorch/pytorch

  • 中文文檔:
    https://pytorch.apachecn.org/#/

  • 例子:
    https://github.com/yunjey/pytorch-tutorial

  • 超全資源:
    https://github.com/bharathgs/Awesome-pytorch-list

項目實踐

如果組裏面有相關項目,好好做,跟着師兄師姐,能學到不少東西。

如果有大廠的實習機會,爭取去,工業界能學到更多與以後工作息息相關的東西。

如果沒有實習機會,也沒有項目做,那可以關注下比賽,找一下相關的比賽,下載數據集,排行榜可以實時看到你寫的模型的性能。初學者可以去 github 找相關的開源模型,先跑起來,再想着如何去改進,以此鍛鍊自己的工程能力。

之前有人私信問我,這些比賽的信息去哪裏找?

一般一些比賽在放出來之前,會做一些推廣,在一些公衆號或者羣裏能看到軟文。但是這些信息不一定能被我們及時看到,但是比賽一般都會放到平臺上,最出名的平臺之一當屬 kaggle,其它的還有天池、CCF、AI Challenger、DF、DC、biendata 等等。

據我所知,自然語言處理相關的比賽一般可分爲二類,一類是學術型的評測,一類是工業界舉辦的比賽。

很多企業會舉辦比賽,吸引很多人來參與,特別是一些大企業,宣傳工作會做得很到位,大家稍微注意下,一般都能聽到風聲。

學術型的評測也很多,比如 NAACL 的評測 SemEval( International Workshop on Semantic Evaluation),這種伴隨着會議的評測,一般每年都會開放很多任務,在規定時間內報名參加,得到好的名次還可以寫一篇評測論文。

出名的比如 CIKM、SIGKDD 等等,大家可以關注。國內的話像 NLPCC、CCKS 等也會開放評測。

關乎代碼,最好的方法就是不斷的練習,對於自然語言處理也不例外,在學習理論的同時,也要積累代碼量。關於這一塊,初學者可以選定研究的小方向之後,嘗試自己寫代碼/或者參考網上代碼去跑一些baseline的demo。

拿文本分類來舉例,最簡單的是 one-hot,然後是 tf-idf、lda、lsa,到 word2vec、glove、fasttext,再到 textrnn、textcnn、han等,最後到現在的elmo、bert,這一套過來,關於文本分類這一個自然語言處理下的小方向的流行模型我相信基本上都會清晰很多。

ps:這裏說的雖然簡單,但是要這樣過一遍,就是參考優秀的代碼跑通相信對於大多數人來說也需要花費很多時間,但相信這也是鍛鍊成爲一位AI算法工程師的必經之路。

重磅乾貨

100 Days Of ML Code(機器學習100天):
地址:
https://github.com/Avik-Jain/100-Days-Of-ML-Code
中文版地址:
https://github.com/Avik-Jain/100-Days-of-ML-Code-Chinese-Version

Keras 之父的 Deep Learning with Python:
地址:
https://github.com/fchollet/deep-learning-with-python-notebooks
中文版鏈接:
https://pan.baidu.com/s/1Fsc1gg8D8E39XhQZ_nRn2Q 
提取碼:indz

李沐的動手學深度學習 :
鏈接:

https://pan.baidu.com/s/1YNkuTycWWnKy7APbCN9YeA 
提取碼:vy7w
B站視頻鏈接:http://h5ip.cn/NriF
本書代碼庫:
https://github.com/diveintodeeplearning/d2l-zh 

Python 實現統計學習方法一書中所有算法:
代碼庫地址:
https://github.com/WenDesi/lihang_book_algorithm
 

Reddit 超高贊免費 NLP 課程:
地址:
https://github.com/yandexdataschool/nlp_course

一個提供了很多機器學習問題的當前最優結果的項目:
地址:
https://github.com//RedditSota/state-of-the-art-result-for-machine-learning-problems

跟蹤 NLP 當前最新技術進度的項目:
地址:
https://github.com/yuquanle/NLP-progress

川大畢業極客創建項目深度學習500問:
地址:
https://github.com/yuquanle/DeepLearning-500-questions

彙集了40個關於中文 NLP 詞庫項目:
地址:
https://github.com/yuquanle/funNLP

機器學習/深度學習/自然語言處理/C/C++/Python/面試筆記:
地址:
https://github.com/yuquanle/Algorithm_Interview_Notes-Chinese

清華大學 NLP 組 github,很多 paper 的整理:https://github.com/thunlp/

深度學習實踐教程,Pytroch實現機器學習/深度學習算法:
地址:
https://github.com/GokuMohandas/practicalAI

AI Challenger 2018 baseline方法:
地址:
https://github.com/AIChallenger/AI_Challenger_2018
比賽主頁:https://challenger.ai/

一份很全面的機器學習算法資料,包括視頻、代碼、Demo:
地址:
https://github.com/trekhleb/homemade-machine-learning

模式識別與機器學習(PRML)
下載主頁:
https://www.microsoft.com/en-us/research/people/cmbishop/#!prml-book
本書代碼:http://prml.github.io/

200 多個最好的機器學習、NLP 和 Python 相關教程:
地址:http://suo.im/5fTvIN

機器學習小抄(像背單詞一樣理解機器學習):
地址:
https://pan.baidu.com/s/1eQpA1DknCJCgjMS8QMLOJQ 

提取碼:b79u 

知乎“看山杯” 奪冠記:
地址:http://suo.im/58piBA

"達觀杯"季軍分享:
地址:“達觀杯”文本智能處理挑戰賽,季軍帶你飛

 

轉載自:https://mp.weixin.qq.com/s/xwG1it22F_v0L0AGT-fcRA

作者簡介:

樂雨泉 (yuquanle),湖南大學在讀碩士,研究方向機器學習與自然語言處理。曾在IJCAI、TASLP等會議/期刊發表文章多篇。歡迎志同道合的朋友和我在公衆號"AI小白入門"一起交流學習,探討成長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章