計算機專碩研一新生求教自然語言處理學習?

本人是計算機專碩研一新生,導師方向是文本處理。現在在看吳恩達的機器學習視頻。打算走自然語言處理這個方向,但是不知道怎麼選小方向。在網上看人家說要先看綜述,但是搜不到自然語言處理綜述這類的論文。ACL Antholog這裡面的論文雖然很多,又不知道該看哪些。求教,萬分感謝。


怒答一波,寫下我個人的機器學習的學習之路和一些自己對nlp怎麼學的感想吧!希望對題主有幫助。

注意:我寫的只是是機器學習(包括深度學習)和其在nlp上應用的學習之路。自然語言處理是一個很大的門類,ML或DL只是其中一種解決問題的方式方法!當然了,現在最火的也就是DL。

首先我覺得,在學習深度學習之前,是很有必要,很有必要先學機器學習基礎的。

有那麼一句話,我是贊同的:學習人工智慧大數據什麼的,一上來就是什麼深度學習,那都是耍流氓!

為什麼機器學習基礎演算法重要,以下是我的一些想法:

  • 首先是在深度學習火熱的今天,很多人追求速成,更出現什麼3天5天8天就精通深度學習演算法的扯淡培訓班!造成的後果也很明顯:很多人甚至不知道過擬合,欠擬合,什麼是偏差方差權衡,什麼又是生成模型和判別模型等等基礎知識。
  • 然後是其實很多機器學習的基礎演算法思想是通用的,也是很有啟發的,就像集成演算法的思想,其實在深度學習中也有很多應用。記得我有個師兄就是在做結合集成學習在機器翻譯的應用!
  • 最後就是深度學習只是機器學習的一個子集,現在外面公司對深度學習的應用也是比較少的,更多的是一些基礎的像邏輯回歸或者決策樹之類的演算法,不想在工作時是成為障礙,那麼早學會這些基礎演算法也就變得必要啦。
  • 總之吧,想學深度學習,各種原因都好,先學習機器學習基礎演算法,百利而無一害啊,老鐵!

下面開啟暴走學習:

忽略數學基礎(研一的話,我覺得線代,高數,概率論等這些應該不成問題了吧。)

關於機器學習基礎,我是這樣學的:看網易公開課cs229的視頻,雖然這視頻有點老了,但是,吳恩達老師的經典之作,還是很有必要一看的。然後在看視頻同時看西瓜書(《機器學習》)《統計學習方法》,這兩本理論書真的值得一看!其次是實踐我用了《機器學習實戰》,實踐才是檢驗真理的唯一標準嘛!

學上面的基礎,肯定是要用了一段時間,研一的話,我認為可以不用那麼著急著上手做科研寫論文吧,先把基礎打好,是相當值得的。

然後進入深度學習,現在深度學習的課程很多,推薦吳恩達的deeplearning.ai,這個在網易雲課堂有中文字幕版的--鏈接。還有就是經典的cs231n,官網鏈接,cs231n是有筆記的-鏈接,當然,知乎上的一些大神對這個筆記進行了翻譯---鏈接。如果看英文很吃力,也可以參考這個翻譯。

補充:推薦《deep learning》,《neural network and deep learning》,這兩本深度學習的書也值得一看!

廣告時間:很多基礎是有必要學習的,最近我寫了一篇神經網路(容易被忽視的基礎知識),算是基礎吧!

學好上面的課程,把其中的作業認真完成之後,自然語言之路也就開始了,首先我看得課程是cs224d這個課,這個是nlp的基礎入門課,講了很多如rnn,詞向量的基礎模型知識,或者seq2seq這樣現在nlp領域比較流行的模型。很值得一看!

當然,學完上面的這些,還是有很多其他要學習的,不詳細敘述,就扯下我是從哪裡學習的吧!比如RL,我看得是UCL Course on RL,再比如火熱的GAN模型,首先看原論文咯,在nlp應用的話,安利下知乎上GAN for NLP,(原來,我也想做這個方向的,但後來,也就沒有後來了哈哈)還有很多其他什麼知識圖譜啊,其他nlp的知識啊,就缺的時候再學也是沒有問題的吧。

我覺得上面的都學完算是入門深度學習或者說NLP了吧,這個時候到後面,就主要定方向,看論文,看論文,寫論文,改論文,看論文,搞事情啦!

注意:工程能力,工程能力,工程能力是關鍵,能用numpy手寫反向傳播嗎?能手敲cnn,rnn模型嗎?學好tensorflow,pytorch(這個個人感覺比tensorflow靈活)的框架,打碼搬磚才是是檢驗理論的唯一標準啊(重要的觀點再說一遍),寫好代碼,在我看來是非常關鍵的!別老是只會嘴上扯淡,多動手,當然,至於怎麼學習代碼,推薦莫煩Python,基礎入門可以一學!

廣告時間:如何做科研,我寫過了一篇怎麼做科研?是關於如何定課題,如何對待課題或者科研的,寫的可能不是很好,但我覺得還是值得一看的哈哈。

大方向題主定的是nlp,正好我也是做nlp的,我認為,綜述還是要看的。關於綜述,最近有一篇綜述,是寫的比較好的:arxiv鏈接。當然,我也看到有上面的兄弟已經貼出了機器之心關於這篇綜述的介紹,看完綜述,然後思考一下,定小方向!去吧,開啟你的科研路程吧!

本來問題應該就這樣答完了的,但是,別走唄,讓我再扯一下。我的方向是對話系統,這是一個不錯的方向,也是一個很有趣的方向。綜述的話可以看下:自然語言生成綜述,這裡有講對話系統的,也就講其他與自然語言生成相關的內容。

然後對話系統分為兩類,開放域和目標導向型,開放域的可以看看李紀為等人的文章,目標導向型的話,可以先看看這個綜述ppt,然後再去看各類論文咯。總之,帶著目標去讀論文,然後充分思考,結果不會差的!

廣告時間:關於目標導向型的對話系統,我寫過一篇論文筆記,可以看下哈哈

最後我想說,學習是要付出代價的,學好上面的要一段時間,拿我來說是學習了一年多吧,才基本都學了一遍。人工智慧的時代,很多人急於求成,過於功利,浮躁之氣從培訓班的扯蛋和媒體的各種「吹噓」散發出來。但是,腳踏實地,在你要用到那些知識的時候,就會讓你感到有多麼的慶幸啦!

最後的廣告:更多機器學習學習系列文章,歡迎關注公眾號:「AI遇見機器學習」


上面回答都是如何學machine learning, deep learning... 或者是如何用ml/dl處理文本...

我覺得應該先了解nlp是幹嘛的,做中文還是英文,對話還是文本,然後看你的興趣點和老闆的興趣點是不是一致,老闆能幫到什麼。

nlp借用我們老闆的話說是"unstructured data converted to structure data"。 想明白task是什麼,充分熟悉你手頭的數據集,再來想應該用ml/dl演算法才對吧。

推薦先看nlp基本知識,什麼是pos, chunker, lemmatize, tokenize, 什麼情況下用dependency parser, constituent parser。什麼情況下用name entity recognition。我見過有做nlp的人熟用tensorflow,但不知道ner是做啥的。

還有些編程的基本功:輸入一個語法樹怎麼把主幹抽出來,怎麼找到並列結構,etc。

nltk, scikit learn,stanford corenlp這些包應該翻來覆去的熟用。

然後可以找一些小的數據集,可以先建個小的模型練練手:比如拿一個長篇小說來訓練一個模型,然後給定一些詞看下一個詞模型會輸出什麼。這其中會涉及clean, preprocessing, 建模,訓練數據集。

如果想了解nlp下都有哪些小方向,推薦看acl 會議的網站,比如2017 acl, program下面細分了很多個section: discourse, machine translation, sentiment, summarization etc.. 太多了就不細說了。

為啥要強調以上的基本功?當你拿到一些數據集,文本也好對話也好,第一件事應該是仔細閱讀,找出language phenomenon/pattern, etc,然後決定應該做什麼預處理,接下來再去想應該用哪個演算法。如果只是依賴ml/dl,當成一個黑匣子,那隻能叫probablistic language modeling。

附上一些鏈接,希望能有幫助:

stanford corenlp: Stanford CoreNLP - Natural language software

nltk book: NLTK Book

大神Dan Jurafsky Chris Manning NLP課程資料:https://web.stanford.edu/~jurafsky/NLPCourseraSlides.html


你的背景幾乎跟我一樣,不同的是我的導師做的是安卓安全。。

我四月份偶然在paperweekly上看到這篇綜述https://arxiv.org/abs/1704.08531v1,從而確定了神經網路做自然語言處理的大方向,之後孤軍奮戰直到現在,算是半隻腳踏進了門。

另外金berg的這篇A Primer on Neural Network Models for Natural Language Processing,https://arxiv.org/abs/1510.00726,我覺得也是極好的。

最後這裡有我寫的輔助文檔和實現代碼https://github.com/Y-WJ/NLP-PLAYER/tree/master/doc,希望能給你幫助,祝你好運。


我也是研一開始入門深度學習與NLP這個方向,個人感覺目前使用深度學習普遍比傳統方法效果要好,可以直接從深度學習入手,注意學習過程中主要去看NLP方向的一些教程、課程或者博客。這樣學習過程中或多或少會接觸一些傳統的方法,慢慢積累吧。然後說一下我的歷程:

1,用傳統方法(VSM)做了個文本分類,然後發了一篇異常水的論文,算是入門NLP。

2,開始看NLP裡面最簡單的應用,句子相似度計算的任務(個人感覺從易到難的學習會比較容易上手)。這個過程中先後學習了Word2vec、CNN(看的cs231n課程,只看了前半部分將CNN的,後面就是視覺應用了,這課很好,多看筆記),結合了很多論文進行學習。並使用TensorFlow進行模擬實現,鍛煉工程能力

3,開始看深度學習在文本分類中的應用。同樣這裡看是看cs224d的課程,啃完了==然後學了RNN,課程里講的也很詳細。跟上面一樣也會結合一些論文進行學習並使用tensorflow實現。然後參加了我乎的看山杯競賽,正好也是文本分類的,算是應用了一下。

4,現在在看QA和閱讀理解的一些東西,貌似沒有什麼課程了==直接和論文和代碼進行學習。

上面說到了論文已經相應的模擬實現都可以在我的博客中找到,下面給兩個鏈接,希望對你有所幫助~

專欄:深度學習與NLP--論文筆記和TensorFlow實現 - CSDN博客

記憶網路-Memory Network


知乎搜Michael Collins,如果你不知道他是誰,先膜拜一下他,然後進入他的主頁下載課件。他在Couresa上的課好像沒了,我沒有找到,很多人也反映沒有,這就需要你翻牆到Youtube上關鍵詞搜他的課,如果有人知道不用翻牆的資源,歡迎提供。

看完之後你心裡除了一萬個666之外,你應該已經對NLP建立了紮實的基礎。現在深度學習大行其道,做NLP繞不開深度學習,你可以看斯坦福的cs224n這門課,B站上就有。

我覺得你想了解自己的方向就先要深入了解自己面對的是什麼,當你吃透它的時候,你的方向自然就出來了。

Michael Collins的課件也是當時我搜知乎看到知友的答案才知道的,這裡一併向同道們表示感謝。

與君共勉!


現在NLP基本都上DL了

從語言學到深度學習NLP,一文概述自然語言處理


嗯,我另闢蹊徑:

本身基礎不紮實,

只有一點機器學習基礎,

NLP社區沒事進去遛遛。

根據以往經驗,

到Github找中文NLP大牛源碼,

然後逆向學習,

分詞,停用詞,詞頻,詞袋,

主題提取,文本相似度,情感分析。

而且都寫在我的專欄里,可供借鑒。

當然,還有很多坑要趟~


你我經歷相似,一畢業的專碩來給你一點建議。我們專碩是兩年,如果你也是兩年的話就要抓緊時間學習了,畢竟第二年秋招就要開始找工作了。我不知道你之前有沒有基礎,NLP需要學的東西還是很多的。最實際的辦法就是按照上面答主說的看經典課程,讀論文,寫代碼實現。最後一項很重要,你不止要弄懂CNN,DNN,RNN等等這些原理,還要會用來跑程序做實驗,當然你要不用深度學習的話當我沒說。研一上半年是你打基礎的階段,說的功利點,你讀專碩的話估計也不太想要一直做科研到底吧,如果是為了找工作的話就了解了原理之後多動手,網上各種工程代碼,自己學習實現一些,對你以後找工作有幫助。


參看 自然語言處理怎麼最快入門?


單純發論文的角度上講,掌握深度學習的基本模型CNN和RNN;了解Sequence labeling(word segmentation,naming entity recognition,part-of-speech tagging,extractive text summarization......),Sequence to sequence(machine translation,question answering,question answering,chatbot......) 和 Text classification。熟練使用深度學習庫TensorFlow或Pytorch。然後具體到某個任務,通過看相關的會議論文(ACL,EMNLP,IJCAI,AAAI等),了解前人的工作,並尋找可以改進的地方。從入門到有寫paper的能力,大致就是這個方向吧。


同小碩NLP方向,研三。深度學習雖然很火,但是標註數據很貴,要幫企業解決實際問題時,成本比較高(考慮到導師可能會接項目的話),但如果想發表一些成果,深度學習是捷徑。學術還是工程其實還是看老師如何安排。我認為初學者應當學好基礎,比如統計自然語言處理的基本演算法原理,機器學習,熟練運用各種工具,如分詞,詞性標註,依存句法等,關鍵詞抽取工具(要會根據實際語料調整特徵值計算),文本分類(詞袋,深度模型),語言模型,本體等。有了基礎,對任何實際問題都有基本的解決思路,到底是規則好還是機器學習好,還是混合策略。

關於找工作,現在公司都比較注重人工智慧的發展,所以肯定要學習deep learning,即使以前沒有用到,也要清楚原理和參數作用。我建議平時還是要多用學術上的數據集跑一些深度模型,如NER,機器翻譯,文本分類,chatbot等。面試的時候就不會被面試官覺得你只會特徵工程,而是還有DL實戰能力。


自然語言處理目前的小方向也還是比較多的。具體的小方向的制定,我覺得首先需要跟你的導師進行溝通,因為實驗室的資源也是有限的。不可能面面俱到,如果你自己找的小方向的話,首先不說技術積累,單從語料資源來說就是一個很大的問題,比如我之前做的是少數民族語言的情感分析,這個語料資源就是一個很大的問題。

然後nlp入門的話,可以首先看《統計自然語言處理》,這本書基本上是把自然語言處理過程中的所有方面都顧及到了。雖然目前的自然語言處理都已經上深度學習了,但是就我自己看到的論文來看,在很多問題上,會結合傳統方法及深度學習方法來做,比如最經典的blstm+crf模型。學習機器學習的話,周志華老師的那本《機器學習》是很好的一本書。此外還有李航老師的《統計學習方法》,已經目前最新的《深度學習》那本書,這本書是翻譯過來的,如果英語功底很好的話建議直接閱讀原版。

公開課方面,斯坦福大學的cs223n,cs224n,以及今年新出的cs224d都是很不錯的,還有蒙特利爾大學暑期講習班(這個視頻好像是YouTube上面看到的)等。

具體到實際操作的過程中的話,目前比較常用的編程語言是python。當然java也可以,也有dl4j的庫。但是使用python的話,由於已經有很多機器學習的庫,你可以忽略很多編程的細節,關注於你本身方法的實現。


目前研二,在一家公司做自然語言處理相關的實習,也在準備明年的秋招,所以現在在瘋狂總結學習自然語言處理理論和實踐。可以從關注我的專欄開始 http://zhuanlan.zhihu.com/leemoo 哈哈哈


選小方向也要看你的目的了,比如:

1.為了興趣。

2.為了容易畢業。

3.為了好發論文。

4.為了市場需要(畢業好找工作)。

想清楚這些,然後再看一些綜述。


有標註數據,可以上深度學習。沒有標註數據,可以上概率圖模型。

現在機器翻譯,情感計算,文本生成挺火的,要不要扎進去?


你應該加個程序員標籤(′???`)


推薦閱讀:

tf.nn.embedding_lookup函數原理?
深度學習演算法哪些適用於文本處理?
什麼是圖像分類的Top-5錯誤率?
自動控制、機器人、人工智慧等領域有哪些值得引進「影印版」的專業書籍?
聚類和協同過濾是什麼關係?

TAG:機器學習 | 自然語言處理 | 計算機研究生 |