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

最好是方法與教程


謝邀。

針對這個問題,我們邀請了微軟亞洲研究院首席研究員周明博士為大家解答。

周明博士於2016年12月當選為全球計算語言學和自然語言處理研究領域最具影響力的學術組織——計算語言學協會(ACL, Association for Computational Linguistics)的新一屆候任主席。此外,他還是中國計算機學會中文信息技術專委會主任、中國中文信息學會常務理事、哈工大、天津大學、南開大學、山東大學等多所學校博士導師。他1985年畢業於重慶大學,1991年獲哈工大博士學位。1991-1993年清華大學博士後,隨後留校任副教授。1996-1999訪問日本高電社公司主持中日機器翻譯研究。他是中國第一個中英翻譯系統、日本最有名的中日機器翻譯產品J-北京的發明人。1999年加入微軟研究院並隨後負責自然語言研究組,主持研製了微軟輸入法、對聯、英庫詞典、中英翻譯等著名系統。近年來與微軟產品組合作開發了小冰(中國)、Rinna(日本)等聊天機器人系統。他發表了100餘篇重要會議和期刊論文。擁有國際發明專利40餘項。


————這裡是正式回答的分割線————

自然語言處理(簡稱NLP),是研究計算機處理人類語言的一門技術,包括:

1.句法語義分析:對於給定的句子,進行分詞、詞性標記、命名實體識別和鏈接、句法分析、語義角色識別和多義詞消歧。

2.信息抽取:從給定文本中抽取重要的信息,比如,時間、地點、人物、事件、原因、結果、數字、日期、貨幣、專有名詞等等。通俗說來,就是要了解誰在什麼時候、什麼原因、對誰、做了什麼事、有什麼結果。涉及到實體識別、時間抽取、因果關係抽取等關鍵技術。

3.文本挖掘(或者文本數據挖掘):包括文本聚類、分類、信息抽取、摘要、情感分析以及對挖掘的信息和知識的可視化、互動式的表達界面。目前主流的技術都是基於統計機器學習的。

4.機器翻譯:把輸入的源語言文本通過自動翻譯獲得另外一種語言的文本。根據輸入媒介不同,可以細分為文本翻譯、語音翻譯、手語翻譯、圖形翻譯等。機器翻譯從最早的基於規則的方法到二十年前的基於統計的方法,再到今天的基於神經網路(編碼-解碼)的方法,逐漸形成了一套比較嚴謹的方法體系。

5.信息檢索:對大規模的文檔進行索引。可簡單對文檔中的辭彙,賦之以不同的權重來建立索引,也可利用1,2,3的技術來建立更加深層的索引。在查詢的時候,對輸入的查詢表達式比如一個檢索詞或者一個句子進行分析,然後在索引裡面查找匹配的候選文檔,再根據一個排序機制把候選文檔排序,最後輸出排序得分最高的文檔。

6.問答系統: 對一個自然語言表達的問題,由問答系統給出一個精準的答案。需要對自然語言查詢語句進行某種程度的語義分析,包括實體鏈接、關係識別,形成邏輯表達式,然後到知識庫中查找可能的候選答案並通過一個排序機制找出最佳的答案。

7.對話系統:系統通過一系列的對話,跟用戶進行聊天、回答、完成某一項任務。涉及到用戶意圖理解、通用聊天引擎、問答引擎、對話管理等技術。此外,為了體現上下文相關,要具備多輪對話能力。同時,為了體現個性化,要開發用戶畫像以及基於用戶畫像的個性化回復。

隨著深度學習在圖像識別、語音識別領域的大放異彩,人們對深度學習在NLP的價值也寄予厚望。再加上AlphaGo的成功,人工智慧的研究和應用變得炙手可熱。自然語言處理作為人工智慧領域的認知智能,成為目前大家關注的焦點。很多研究生都在進入自然語言領域,寄望未來在人工智慧方向大展身手。但是,大家常常遇到一些問題。俗話說,萬事開頭難。如果第一件事情成功了,學生就能建立信心,找到竅門,今後越做越好。否則,也可能就灰心喪氣,甚至離開這個領域。這裡針對給出我個人的建議,希望我的這些粗淺觀點能夠引起大家更深層次的討論。

建議1:如何在NLP領域快速學會第一個技能?

我的建議是:找到一個開源項目,比如機器翻譯或者深度學習的項目。理解開源項目的任務,編譯通過該項目發布的示範程序,得到與項目示範程序一致的結果。然後再深入理解開源項目示範程序的演算法。自己編程實現一下這個示範程序的演算法。再按照項目提供的標準測試集測試自己實現的程序。如果輸出的結果與項目中出現的結果不一致,就要仔細查驗自己的程序,反覆修改,直到結果與示範程序基本一致。如果還是不行,就大膽給項目的作者寫信請教。在此基礎上,再看看自己能否進一步完善演算法或者實現,取得比示範程序更好的結果。

建議2:如何選擇第一個好題目?

工程型研究生,選題很多都是老師給定的。需要採取比較實用的方法,扎紮實實地動手實現。可能不需要多少理論創新,但是需要較強的實現能力和綜合創新能力。而學術型研究生需要取得一流的研究成果,因此選題需要有一定的創新。我這裡給出如下的幾點建議。

  • 先找到自己喜歡的研究領域。你找到一本最近的ACL會議論文集, 從中找到一個你比較喜歡的領域。在選題的時候,多注意選擇藍海的領域。這是因為藍海的領域,相對比較新,容易出成果。
  • 充分調研這個領域目前的發展狀況。包括如下幾個方面的調研:方法方面,是否有一套比較清晰的數學體系和機器學習體系;數據方面,有沒有一個大家公認的標準訓練集和測試集;研究團隊,是否有著名團隊和人士參加。如果以上幾個方面的調研結論不是太清晰,作為初學者可能不要輕易進入。
  • 在確認進入一個領域之後,按照建議一所述,需要找到本領域的開源項目或者工具,仔細研究一遍現有的主要流派和方法,先入門。
  • 反覆閱讀本領域最新發表的文章,多閱讀本領域牛人發表的文章。在深入了解已有工作的基礎上,探討還有沒有一些地方可以推翻、改進、綜合、遷移。注意做實驗的時候,不要貪多,每次實驗只需要驗證一個想法。每次實驗之後,必須要進行分析存在的錯誤,找出原因。
  • 對成功的實驗,進一步探討如何改進演算法。注意實驗數據必須是業界公認的數據。
  • 與已有的演算法進行比較,體會能夠得出比較一般性的結論。如果有,則去寫一篇文章,否則,應該換一個新的選題。

建議3:如何寫出第一篇論文?

  • 接上一個問題,如果想法不錯,且被實驗所證明,就可開始寫第一篇論文了。
  • 確定論文的題目。在定題目的時候,一般不要「…系統」、「…研究與實踐」,要避免太長的題目,因為不好體現要點。題目要具體,有深度,突出演算法。
  • 寫論文摘要。要突出本文針對什麼重要問題,提出了什麼方法,跟已有工作相比,具有什麼優勢。實驗結果表明,達到了什麼水準,解決了什麼問題。
  • 寫引言。首先講出本項工作的背景,這個問題的定義,它具有什麼重要性。然後介紹對這個問題,現有的方法是什麼,有什麼優點。但是(注意但是)現有的方法仍然有很多缺陷或者挑戰。比如(注意比如),有什麼問題。本文針對這個問題,受什麼方法(誰的工作)之啟發,提出了什麼新的方法並做了如下幾個方面的研究。然後對每個方面分門別類加以敘述,最後說明實驗的結論。再說本文有幾條貢獻,一般寫三條足矣。然後說說文章的章節組織,以及本文的重點。有的時候東西太多,篇幅有限,只能介紹最重要的部分,不需要面面俱到。
  • 相關工作。對相關工作做一個梳理,按照流派劃分,對主要的最多三個流派做一個簡單介紹。介紹其原理,然後說明其局限性。
  • 然後可設立兩個章節介紹自己的工作。第一個章節是演算法描述。包括問題定義,數學符號,演算法描述。文章的主要公式基本都在這裡。有時候要給出簡明的推導過程。如果借鑒了別人的理論和演算法,要給出清晰的引文信息。在此基礎上,由於一般是基於機器學習或者深度學習的方法,要介紹你的模型訓練方法和解碼方法。第二章就是實驗環節。一般要給出實驗的目的,要檢驗什麼,實驗的方法,數據從哪裡來,多大規模。最好數據是用公開評測數據,便於別人重複你的工作。然後對每個實驗給出所需的技術參數,並報告實驗結果。同時為了與已有工作比較,需要引用已有工作的結果,必要的時候需要重現重要的工作並報告結果。用實驗數據說話,說明你比人家的方法要好。要對實驗結果好好分析你的工作與別人的工作的不同及各自利弊,並說明其原因。對於目前尚不太好的地方,要分析問題之所在,並將其列為未來的工作。
  • 結論。對本文的貢獻再一次總結。既要從理論、方法上加以總結和提煉,也要說明在實驗上的貢獻和結論。所做的結論,要讓讀者感到信服,同時指出未來的研究方向。
  • 參考文獻。給出所有重要相關工作的論文。記住,漏掉了一篇重要的參考文獻(或者牛人的工作),基本上就沒有被錄取的希望了。
  • 寫完第一稿,然後就是再改三遍。
  • 把文章交給同一個項目組的人士,請他們從演算法新穎度、創新性和實驗規模和結論方面,以挑剔的眼光,審核你的文章。自己針對薄弱環節,進一步改進,重點加強演算法深度和工作創新性。
  • 然後請不同項目組的人士審閱。如果他們看不明白,說明文章的可讀性不夠。你需要修改篇章結構、進行文字潤色,增加文章可讀性。
  • 如投ACL等國際會議,最好再請英文專業或者母語人士提煉文字。

————這裡是回答結束的分割線————


感謝大家的閱讀。

本帳號為微軟亞洲研究院的官方知乎帳號。本帳號立足於計算機領域,特別是人工智慧相關的前沿研究,旨在為人工智慧的相關研究提供範例,從專業的角度促進公眾對人工智慧的理解,並為研究人員提供討論和參與的開放平台,從而共建計算機領域的未來。

微軟亞洲研究院的每一位專家都是我們的智囊團,你在這個帳號可以閱讀到來自計算機科學領域各個不同方向的專家們的見解。請大家不要吝惜手裡的「邀請」,讓我們在分享中共同進步。


曾經寫過一篇小文,初學者如何查閱自然語言處理(NLP)領域學術資料_zibuyu_新浪博客,也許可以供你參考。

昨天實驗室一位剛進組的同學發郵件來問我如何查找學術論文,這讓我想起自己剛讀研究生時茫然四顧的情形:看著學長們高談闊論領域動態,卻不知如何入門。經過研究生幾年的耳濡目染,現在終於能自信地知道去哪兒了解最新科研動態了。我想這可能是初學者們共通的困惑,與其只告訴一個人知道,不如將這些Folk Knowledge寫下來,來減少更多人的麻煩吧。當然,這個總結不過是一家之談,只盼有人能從中獲得一點點益處,受個人認知所限,難免掛一漏萬,還望大家海涵指正。


1. 國際學術組織、學術會議與學術論文

自然語言處理(natural language processing,NLP)在很大程度上與計算語言學(computational linguistics,CL)重合。與其他計算機學科類似,NLP/CL有一個屬於自己的最權威的國際專業學會,叫做The Association for Computational Linguistics(ACL,URL:ACL Home Page),這個協會主辦了NLP/CL領域最權威的國際會議,即ACL年會,ACL學會還會在北美和歐洲召開分年會,分別稱為NAACL和EACL。除此之外,ACL學會下設多個特殊興趣小組(special interest groups,SIGs),聚集了NLP/CL不同子領域的學者,性質類似一個大學校園的興趣社團。其中比較有名的諸如SIGDAT(Linguistic data and corpus-based approaches to NLP)、SIGNLL(Natural Language Learning)等。這些SIGs也會召開一些國際學術會議,其中比較有名的就是SIGDAT組織的EMNLP(Conference on Empirical Methods on Natural Language Processing)和SIGNLL組織的CoNLL(Conference on Natural Language Learning)。此外還有一個International Committee on Computational Linguistics的老牌NLP/CL學術組織,它每兩年組織一個稱為International Conference on Computational Linguistics (COLING)的國際會議,也是NLP/CL的重要學術會議。NLP/CL的主要學術論文就分布在這些會議上。

作為NLP/CL領域的學者最大的幸福在於,ACL學會網站建立了稱作ACL Anthology的頁面(URL:ACL Anthology),支持該領域絕大部分國際學術會議論文的免費下載,甚至包含了其他組織主辦的學術會議,例如COLING、IJCNLP等,並支持基於Google的全文檢索功能,可謂一站在手,NLP論文我有。由於這個論文集合非常龐大,並且可以開放獲取,很多學者也基於它開展研究,提供了更豐富的檢索支持,具體入口可以參考ACL Anthology頁面上方搜索框右側的不同檢索按鈕。

與大部分計算機學科類似,由於技術發展迅速,NLP/CL領域更重視發表學術會議論文,原因是發表周期短,並可以通過會議進行交流。當然NLP/CL也有自己的旗艦學術期刊,發表過很多經典學術論文,那就是Computational Linguistics(URL:MIT Press Journals)。該期刊每期只有幾篇文章,平均質量高於會議論文,時間允許的話值得及時追蹤。此外,ACL學會為了提高學術影響力,也剛剛創辦了Transactions of ACL(TACL,URL:Transactions of the Association for Computational Linguistics (ISSN: 2307-387X)),值得關注。值得一提的是這兩份期刊也都是開放獲取的。此外也有一些與NLP/CL有關的期刊,如ACM Transactions on Speech and Language Processing,ACM Transactions on Asian Language Information Processing,Journal of Quantitative Linguistics等等。

根據Google Scholar Metrics 2013年對NLP/CL學術期刊和會議的評價,ACL、EMNLP、NAACL、COLING、LREC、Computational Linguistics位於前5位,基本反映了本領域學者的關注程度。

NLP/CL作為交叉學科,其相關領域也值得關注。主要包括以下幾個方面:(1)信息檢索和數據挖掘領域。相關學術會議主要由美國計算機學會(ACM)主辦,包括SIGIR、WWW、WSDM等;(2)人工智慧領域。相關學術會議主要包括AAAI和IJCAI等,相關學術期刊主要包括Artificial Intelligence和Journal of AI Research;(3)機器學習領域,相關學術會議主要包括ICML,NIPS,AISTATS,UAI等,相關學術期刊主要包括Journal of Machine Learning Research(JMLR)和Machine Learning(ML)等。例如最近興起的knowledge graph研究論文,就有相當一部分發表在人工智慧和信息檢索領域的會議和期刊上。實際上國內計算機學會(CCF)制定了「中國計算機學會推薦國際學術會議和期刊目錄」(CCF推薦排名),通過這個列表,可以迅速了解每個領域的主要期刊與學術會議。

最後,值得一提的是,美國Hal Daumé III維護了一個natural language processing的博客(natural language processing blog),經常評論最新學術動態,值得關注。我經常看他關於ACL、NAACL等學術會議的參會感想和對論文的點評,很有啟發。另外,ACL學會維護了一個Wiki頁面(ACL Wiki),包含了大量NLP/CL的相關信息,如著名研究機構、歷屆會議錄用率,等等,都是居家必備之良品,值得深挖。


2. 國內學術組織、學術會議與學術論文

與國際上相似,國內也有一個與NLP/CL相關的學會,叫做中國中文信息學會(URL:中國中文信息學會)。通過學會的理事名單(中國中文信息學會)基本可以了解國內從事NLP/CL的主要單位和學者。學會每年組織很多學術會議,例如全國計算語言學學術會議(CCL)、全國青年計算語言學研討會(YCCL)、全國信息檢索學術會議(CCIR)、全國機器翻譯研討會(CWMT),等等,是國內NLP/CL學者進行學術交流的重要平台。尤其值得一提的是,全國青年計算語言學研討會是專門面向國內NLP/CL研究生的學術會議,從組織到審稿都由該領域研究生擔任,非常有特色,也是NLP/CL同學們學術交流、快速成長的好去處。值得一提的是,2010年在北京召開的COLING以及2015年即將在北京召開的ACL,學會都是主要承辦者,這也一定程度上反映了學會在國內NLP/CL領域的重要地位。此外,計算機學會中文信息技術專委會組織的自然語言處理與中文計算會議(NLPCC)也是最近崛起的重要學術會議。中文信息學會主編了一份歷史悠久的《中文信息學報》,是國內該領域的重要學術期刊,發表過很多篇重量級論文。此外,國內著名的《計算機學報》、《軟體學報》等期刊上也經常有NLP/CL論文發表,值得關注。

過去幾年,在水木社區BBS上開設的AI、NLP版面曾經是國內NLP/CL領域在線交流討論的重要平台。這幾年隨著社會媒體的發展,越來越多學者轉戰新浪微博,有濃厚的交流氛圍。如何找到這些學者呢,一個簡單的方法就是在新浪微博搜索的「找人」功能中檢索「自然語言處理」、 「計算語言學」、「信息檢索」、「機器學習」等字樣,馬上就能跟過去只在論文中看到名字的老師同學們近距離交流了。還有一種辦法,清華大學梁斌開發的「微博尋人」系統(清華大學信息檢索組)可以檢索每個領域的有影響力人士,因此也可以用來尋找NLP/CL領域的重要學者。值得一提的是,很多在國外任教的老師和求學的同學也活躍在新浪微博上,例如王威廉(Sina Visitor System)、李沐(Sina Visitor System)等,經常爆料業內新聞,值得關注。還有,國內NLP/CL的著名博客是52nlp(我愛自然語言處理),影響力比較大。總之,學術研究既需要苦練內功,也需要與人交流。所謂言者無意、聽者有心,也許其他人的一句話就能點醒你苦思良久的問題。無疑,博客微博等提供了很好的交流平台,當然也注意不要沉迷哦。


3. 如何快速了解某個領域研究進展

最後簡單說一下快速了解某領域研究進展的經驗。你會發現,搜索引擎是查閱文獻的重要工具,尤其是谷歌提供的Google Scholar,由於其龐大的索引量,將是我們披荊斬棘的利器。

當需要了解某個領域,如果能找到一篇該領域的最新研究綜述,就省勁多了。最方便的方法還是在Google Scholar中搜索「領域名稱 + survey / review / tutorial / 綜述」來查找。也有一些出版社專門出版各領域的綜述文章,例如NOW Publisher出版的Foundations and Trends系列,Morgan Claypool Publisher出版的Synthesis Lectures on Human Language Technologies系列等。它們發表了很多熱門方向的綜述,如文檔摘要、情感分析和意見挖掘、學習排序、語言模型等。

如果方向太新還沒有相關綜述,一般還可以查找該方向發表的最新論文,閱讀它們的「相關工作」章節,順著列出的參考文獻,就基本能夠了解相關研究脈絡了。當然,還有很多其他辦法,例如去http://videolectures.net上看著名學者在各大學術會議或暑期學校上做的tutorial報告,去直接諮詢這個領域的研究者,等等。


推薦《數學之美》,這個書寫得特別科普且生動形象,我相信你不會覺得枯燥。這個我極力推薦,我相信科研的真正原因是因為興趣,而不是因為功利的一些東西。

接下來說,《統計自然語言處理基礎》這本書,這書實在是太老了,但是也很經典,看不看隨意了。

現在自然語言處理都要靠統計學知識,所以我十分十分推薦《統計學習方法》,李航的。李航老師用自己課餘時間7年寫的,而且有博士生Review的。自然語言處理和機器學習不同,機器學習依靠的更多是嚴謹的數學知識以及推倒,去創造一個又一個機器學習演算法。而自然語言處理是把那些機器學習大牛們創造出來的東西當Tool使用。所以入門也只是需要涉獵而已,把每個模型原理看看,不一定細緻到推倒。

宗成慶老師 的統計自然語言處理第二版非常好~《中文信息處理叢書:統計自然語言處理(第2版)》 藍色皮的~~~
然後就是Stanford公開課了,Stanford公開課要求一定的英語水平。| Coursera 我覺得講的比大量的中國老師好~
舉例:
http://www.ark.cs.cmu.edu/LS2/in...
或者
http://www.stanford.edu/class/cs...

如果做工程前先搜索有沒有已經做好的工具,不要自己從頭來。做學術前也要好好的Survey!

開始推薦工具包:
中文的顯然是哈工大開源的那個工具包 LTP (Language Technology Platform) developed by HIT-SCIR(哈爾濱工業大學社會計算與信息檢索研究中心).

英文的(python):

  • pattern - simpler to get started than NLTK
  • chardet - character encoding detection
  • pyenchant - easy access to dictionaries
  • scikit-learn - has support for text classification
  • unidecode - because ascii is much easier to deal with

希望可以掌握以下的幾個tool:
CRF++
GIZA
Word2Vec

還記得小時候看過的數碼寶貝,每個萌萌噠的數碼寶貝都會因為主人身上發生的一些事情而獲得進化能力,其實在自然語言處理領域我覺得一切也是這樣~ 我簡單的按照自己的見解總結了每個階段的特徵,以及提高的解決方案

1.幼年體——自然語言處理好屌,我什麼都不會但是好想提高

建議。。。去看公開課~去做Kaggle的那個情感分析題。

2.成長期——覺得簡單模型太Naive,高大上的才是最好的

這個階段需要自己動手實現一些高級演算法,或者說常用演算法,比如LDA,比如SVM,比如邏輯斯蒂回歸。並且擁抱Kaggle,知道trick在這個領域的重要性。

3.成熟期——高大上的都不work,通過特徵工程加規則才work

大部分人應該都在這個級別吧,包括我自己,我總是想進化,但積累還是不夠。覺得高大上的模型都是一些人為了paper寫的,真正的土方法才是重劍無鋒,大巧不工。在這個階段,應該就是不斷讀論文,不斷看各種模型變種吧,什麼句子相似度計算word2vec cosine已經不再適合你了。

4.完全體——在公開數據集上,把某個高大上的模型做work了~

這類應該只有少數博士可以做到吧,我已經不知道到了這個水平再怎麼提高了~是不是只能說不忘初心,方得始終。

5.究極體——參見Micheal Jordan Andrew Ng.

好好鍛煉身體,保持更長久的究極體形態

希望可以理解自然語言處理的基本架構~:分詞=&>詞性標註=&>Parser

Quora上推薦的NLP的論文(摘自Quora 我過一陣會翻譯括弧裡面的解釋):
Parsing(句法結構分析~語言學知識多,會比較枯燥)

  • Klein Manning: "Accurate Unlexicalized Parsing" ( )
  • Klein Manning: "Corpus-Based Induction of Syntactic Structure: Models of Dependency and Constituency" (革命性的用非監督學習的方法做了parser)
  • Nivre "Deterministic Dependency Parsing of English Text" (shows that deterministic parsing actually works quite well)
  • McDonald et al. "Non-Projective Dependency Parsing using Spanning-Tree Algorithms" (the other main method of dependency parsing, MST parsing)

Machine Translation(機器翻譯,如果不做機器翻譯就可以跳過了,不過翻譯模型在其他領域也有應用)

  • Knight "A statistical MT tutorial workbook" (easy to understand, use instead of the original Brown paper)
  • Och "The Alignment-Template Approach to Statistical Machine Translation" (foundations of phrase based systems)
  • Wu "Inversion Transduction Grammars and the Bilingual Parsing of Parallel Corpora" (arguably the first realistic method for biparsing, which is used in many systems)
  • Chiang "Hierarchical Phrase-Based Translation" (significantly improves accuracy by allowing for gappy phrases)

Language Modeling (語言模型)

  • Goodman "A bit of progress in language modeling" (describes just about everything related to n-gram language models 這是一個survey,這個survey寫了幾乎所有和n-gram有關的東西,包括平滑 聚類)
  • Teh "A Bayesian interpretation of Interpolated Kneser-Ney" (shows how to get state-of-the art accuracy in a Bayesian framework, opening the path for other applications)

Machine Learning for NLP

  • Sutton McCallum "An introduction to conditional random fields for relational learning" (CRF實在是在NLP中太好用了!!!!!而且我們大家都知道有很多現成的tool實現這個,而這個就是一個很簡單的論文講述CRF的,不過其實還是蠻數學= =。。。)
  • Knight "Bayesian Inference with Tears" (explains the general idea of bayesian techniques quite well)
  • Berg-Kirkpatrick et al. "Painless Unsupervised Learning with Features" (this is from this year and thus a bit of a gamble, but this has the potential to bring the power of discriminative methods to unsupervised learning)

Information Extraction

  • Hearst. Automatic Acquisition of Hyponyms from Large Text Corpora. COLING 1992. (The very first paper for all the bootstrapping methods for NLP. It is a hypothetical work in a sense that it doesn"t give experimental results, but it influenced it"s followers a lot.)
  • Collins and Singer. Unsupervised Models for Named Entity Classification. EMNLP 1999. (It applies several variants of co-training like IE methods to NER task and gives the motivation why they did so. Students can learn the logic from this work for writing a good research paper in NLP.)

Computational Semantics

  • Gildea and Jurafsky. Automatic Labeling of Semantic Roles. Computational Linguistics 2002. (It opened up the trends in NLP for semantic role labeling, followed by several CoNLL shared tasks dedicated for SRL. It shows how linguistics and engineering can collaborate with each other. It has a shorter version in ACL 2000.)
  • Pantel and Lin. Discovering Word Senses from Text. KDD 2002. (Supervised WSD has been explored a lot in the early 00"s thanks to the senseval workshop, but a few system actually benefits from WSD because manually crafted sense mappings are hard to obtain. These days we see a lot of evidence that unsupervised clustering improves NLP tasks such as NER, parsing, SRL, etc,

其實我相信,大家更感興趣的是上層的一些應用~而不是如何實現分詞,如何實現命名實體識別等等。而且應該大家更對信息檢索感興趣。不過自然語言處理和信息檢索還是有所區別的,So~~~我就不在這邊寫啦


不請自來,語言學背景,研二。廢話不說,直接上貨。
書籍篇:
入門書籍挺多的,我也看過不少。
1)《數學之美》(吳軍)
這是我看的第一本關於NLP的書。現在第二版出來了,貌似新增了兩章內容,還沒看過。第一版寫的挺好,科普性質。看完對於nlp的許多技術原理都有了一點初步認識。現在沒事還會翻翻的。
2)《自然語言處理簡明教程》(馮志偉)
馮志偉老師這本書,偏向於語言學,書略厚。關於語言學的東西很多。都是很容易理解的東西。建議沒有學過理工科們翻一翻,畢竟nlp這東西未來趨勢可能會融合不少語言學的東西。
3)《自然語言處理綜論》(Daniel Jurafsky)
這本書也是馮志偉老師翻譯的,翻譯的挺棒,看了差不多一半。綜論性質的,選感興趣的章節翻翻就行。作者是Daniel Jurafsky,在coursera上面有他的課程,後面視頻篇里集中談。
4)《自然語言處理的形式模型》(馮志偉)
這本書還是馮志偉老師寫的。很佩服馮志偉老師,文理兼修,而且都很厲害。內容許多是從他以前的著作裡面摘取的。算是一本各種語言模型和統計模型的大集合吧。放在桌面,沒事翻翻也能是極好的。
5)《統計自然語言處理(第2版)》(宗成慶)
這本書我覺得寫的不錯。雖然我是語言學背景,但讀起來也沒有太吃力。它也是綜論性質的,可以跳著看。
6)《統計學習方法》(李航)
自然語言處理需要些機器學習的知識。我數學基礎還是太薄弱,有的內容還是有些吃力和困惑的。
7)《機器學習實戰》哈林頓 (Peter Harrington)
《Python自然語言處理》
《集體智慧編程》
這些書都是python相關的。中間那本就是將NLTK的。網上都有電子版,需要的時候翻一番看一看就行。

視頻篇:
@吳俁 上面提到的,斯坦福的nlp課程Video Listing,哥倫比亞大學的https://class.coursera.org/nlangp-001,兩個都是英文的,無中文字幕,現在還可以下載視頻和課件。
另外超星學術視頻:
1)自然語言理解_宗成慶
我覺得講的還是不錯的,第一次聽的時候有些暈乎。該課程網上有ppt講義。講義後來被作者寫成了書,就是上面提到的《統計自然語言處理》。拿著書就是教材,還有課程ppt和視頻可以看,這種感覺還是很好的。
2)自然語言處理_關毅
感覺講的一般,聽了幾節,跳躍太多,有時候讓人摸不著頭腦。多聽聽還是很有益處的吧。
3)計算語言學概論_侯敏
這個就是語言學內容為主了,作者也是語言學背景下在nlp比較活躍的。講的很淺。老師講課很啰嗦,說話太慢,我都是加速看的。
4)計算語言學_馮志偉
馮志偉老師這個課,一如他的著作,語言學和統計都會涉及到一些。馮志偉老師說話有些地方聽不大清,要是有字幕就好了。
5)語法分析_陸儉明
這是純語言學的課程。陸劍明也是當代語言學的大師。我覺得既然是自然語言處理,語言學的東西,還是多少要了解的。

其他篇:
1)博客的話,我愛自然語言處理專門記錄nlp的,很不錯,再有就是csdn上一些比較瑣碎的了。
2)北京大學中文系 應用語言學專業這個剛開始的時候也看了看,又不少乾貨。
3)《中文信息學報》說這個,不會被大神噴吧。英語不佳,英文文獻實在看的少。這個學報,也是挑著看看就行。

好像就是這些內容了。如果有,日後再補。

雖然自己寫了這麼多,但不少書和視頻都沒有完整的看完。現在水平仍很菜,仍在進階的路上。希望各路大神多多指點,該拍磚就拍吧。


大家回答的都挺不錯了,只好來強答。

一、獨立實現一個小型的自然語言處理項目。

要找一個合適的的自然語言處理相關的開源項目。這個項目可以是與自己工作相關的,也可以是自己感興趣的。項目不要太大,以小型的演算法模塊為佳,這樣便於獨立實現。像文本領域的文本分類、分詞等項目就是比較合適的項目。 運行程序得到項目所聲稱的結果。然後看懂程序,這期間一般需要閱讀程序實現所參考的文獻。最後,自己嘗試獨立實現該演算法,得到與示常式序相同的結果。再進一步的,可以調試參數,了解各參數對效果的影響,看是否能得到性能更好的參數組合。

這一階段主要是學習快速上手一個項目,從而對自然語言處理的項目有比較感性的認識——大體了解自然語言處理演算法的原理、實現流程等。

當我們對自然語言處理項目有了一定的認識之後,接下來就要深入進去。任何自然語言處理應用都包含演算法和所要解決的問題兩方面,要想深入進去就需要從這兩方面進行著手。

二、對問題進行深入認識

對問題的深入認識通常來源於兩個方面,一是閱讀當前領域的文獻,尤其是綜述性的文獻,理解當前領域所面臨的主要問題、已有的解決方案有哪些、有待解決的問題有哪些。這裡值得一提的是,博士生論文的相關文獻介紹部分通常會對本問題做比較詳細的介紹,也是比較好的綜述類材料。

除了從文獻中獲取對問題的認識外,另一種對問題進行深入認識的直觀方法就是對演算法得出的結果進行bad case分析,總結提煉出一些共性的問題。對bad case進行分析還有一個好處,可以幫助我們了解哪些問題是主要問題,哪些問題是次要問題,從而可以幫助我們建立問題優先順序。如果有具體任務的真實數據,一定要在真實數據上進行測試。這是因為,即使是相同的演算法,在不同的數據集上,所得到的結果也可能相差很大。

三、對演算法進行深入理解

除了具體的問題分析,對演算法的理解是學習人工智慧必須要過的關。經過這麼多年的發展,機器學習、模式識別的演算法已經多如牛毛。幸運的是,這方面已經有不少好的書籍可供參考。這裡推薦華為李航的藍寶書《統計學習方法》和周志華的西瓜書《機器學習》,這兩本都是國內頂級的機器學習專家撰寫的書籍,思路清晰,行文流暢,樣例豐富。

如果覺得教科書稍感乏味,那我推薦吳軍的《數學之美》,這是一本入門級的科普讀物,作者以生動有趣的方式,深入淺出的講解了很多人工智慧領域的演算法,相信你一定會有興趣。

國外的書籍《Pattern Recognition and Machine Learning》主要從概率的角度解釋機器學習的各種演算法,也是不可多得的入門教材。如果要了解最新的深度學習的相關演算法,可以閱讀被譽為深度學習三架馬車之一Bengio所著的《Deep Learning》。 在學習教材時,對於應用工程師來說,重要的是理解演算法的原理,從而掌握什麼數據情況下適合什麼樣的數據,以及參數的意義是什麼。

四、深入到領域前沿

自然語言處理領域一直處在快速的發展變化當中,不管是綜述類文章還是書籍,都不能反映當前領域的最新進展。如果要進一步的了解領域前沿,那就需要關注國際頂級會議上的最新論文了。下面是各個領域的一些頂級會議。這裡值得一提的是,和其他人工智慧領域類似,自然語言處理領域最主要的學術交流方式就會議論文,這和其他領域比如數學、化學、物理等傳統領域都不太一樣,這些領域通常都以期刊論文作為最主要的交流方式。 但是期刊論文審稿周期太長,好的期刊,通常都要兩三年的時間才能發表,這完全滿足不了日新月異的人工智慧領域的發展需求,因此,大家都會傾向於在審稿周期更短的會議上儘快發表自己的論文。 這裡列舉了國際和國內文本領域的一些會議,以及官網,大家可以自行查看。

國際上的文本領域會議:

ACL:http://acl2017.org/ 加拿大溫哥華 7.30-8.4

EMNLP:http://emnlp2017.net/ 丹麥哥本哈根 9.7-9.11

COLING:沒找到2017年的

國內會議:

CCKS http://www.ccks2017.com/index.php/att/ 成都 8月26-8月29

SMP http://www.cips-smp.org/smp2017/ 北京 9.14-9.17

CCL http://www.cips-cl.org:8080/CCL2017/home.html 南京 10.13-10.15

NLPCC http://tcci.ccf.org.cn/conference/2017/ 大連 11.8-11.12

NCMMSC http://www.ncmmsc2017.org/index.html 連雲港 11.11 - 11.13

像paperweekly,機器學習研究會,深度學習大講堂等微信公眾號,也經常會探討一些自然語言處理的最新論文,是不錯的中文資料。

五、當然,工欲善其事,必先利其器。我們要做好自然語言處理的項目,還需要熟練掌握至少一門工具。當前,深度學習相關的工具已經比較多了,比如:tensorflow、mxnet、caffe、theano、cntk等。這裡向大家推薦tensorflow,自從google推出之後,tensorflow幾乎成為最流行的深度學習工具。究其原因,除了google的大力宣傳之外,tensorflow秉承了google開源項目的一貫風格,社區力量比較活躍,目前github上有相當多數量的以tensorflow為工具的項目,這對於開發者來說是相當大的資源。

以上就是對於沒有自然語言處理項目經驗的人來說,如何學習自然語言處理的一些經驗,希望對大家能有所幫助。


這裡有一份用深度學習做自然語言處理的最佳實踐清單,希望對你有所幫助。

對於如何使用深度學習進行自然語言處理,本文作者 Sebastian Ruder 給出了一份詳細的最佳實踐清單,不僅包括與大多數 NLP 任務相關的最佳實踐,還有最常見任務的最佳實踐,尤其是分類、序列標註、自然語言生成和神經機器翻譯。作者對最佳實踐的選擇很嚴格,只有被證明在至少兩個獨立的群體中有益的實踐才會入選,並且每個最佳實踐作者至少給出兩個參引。作者承認這份清單並不全面,比如其不熟悉的解析、信息提取等就沒有涉及。機器之心對該文進行了編譯,原文鏈接在此,點擊即可跳轉

簡介

本文是一系列關於如何使用神經網路進行自然語言處理(NLP)的最佳實踐彙集,將隨著新觀點的出現定期進行更新,從而不斷提升我們對用於 NLP 的深度學習的理解。

NLP 社區中有這樣一句說法:帶有注意力的 LSTM 能在所有任務上實現當前最佳的表現。儘管在過去的兩年這確實是真的,NLP 社區卻在慢慢偏離帶有注意力的 LSTM,而去發現更有趣的模型。

但是,NLP 社區並非想再花費兩年獨立地(重新)發現下一個帶有注意力的 LSTM。我們不打算重新發明已經奏效的技巧或方法。儘管現存的深度學習庫已經從整體上編碼了神經網路的最佳實踐,比如初始化方案,但是很多其他的細節,尤其是特定任務或特定領域還有待從業者解決。

本文並不打算盤點當前最佳,而是收集與大量任務相關的最佳實踐。換言之,本文並不描述某個特定架構,而是旨在收集那些構建成功框架的特徵。其中的很多特徵對於推動當前最佳是最有用的,因此我希望對於它們的更廣泛了解將會帶來更強的評估、更有意義的基線對比,以及更多靈感,幫助我們覺察那些可能奏效的方法。

本文假設你對神經網路應用於 NLP 的情況已經很熟悉(如果不熟悉,我建議你看一下 Yoav Goldberg 寫的A Primer on Neural Network Modelsfor Natural Language Processing),並大體上對 NLP 或某個特定任務感興趣。本文的主要目標是使你快速掌握相關的最佳實踐,從而儘快做出有意義的貢獻。我首先會對與絕大多數任務相關的最佳實踐做一個概述,接著略述與最常見的任務相關的最佳實踐,尤其是分類、序列標註、自然語言生成和神經機器翻譯。

免責聲明:把某些東西定義為最佳實踐極其困難:最佳的標準是什麼?如果有更好的實踐出現呢?本文基於我的個人理解和經驗(肯定不全面)。接下來,我將只討論被證明在至少兩個獨立的群體中有益的實踐。對於每個最佳實踐我將給出至少兩個參引。

最佳實踐

詞嵌入

在最近的 NLP 發展中,詞嵌入無疑是最廣為人知的最佳實踐,這是因為預訓練嵌入的使用對我們十分有幫助 (Kim, 2014) [12]。詞嵌入的最佳維度絕大多數是依賴任務的:一個更小的維度更多在句法任務上工作更好,比如命名實體識別(named entity recognition)(Melamud et al., 2016) [44],或者詞性標註(POS)(Plank et al., 2016) [32],儘管一個更大的維度對於更多的語義任務來說更有用,比如情感分析 (Ruder et al., 2016) [45]。

深度

雖然短時間內我們還無法達到計算機視覺的深度,但是 NLP 中的神經網路已經發展地更深了。現在最佳的方法通常使用 deep Bi-LSTM,它通常包含 3-4 層,比如詞性標註 (Plank et al., 2016) 和語義角色標註 (He et al., 2017) [33]。一些任務的模型甚至更深。谷歌的 NMT 模型有 8 個編碼器和 8 個解碼器層,(Wu et al., 2016) [20]。然而,大多數情況下,模型超過 2 層所帶來的性能提升是最小的 (Reimers Gurevych, 2017) [46]。

這些觀察適用於絕大多數序列標註和結構化預測問題。對於分類,深或者非常深的模型只在字元級的輸入中表現良好,並且淺層的字詞級模型依然是當前最佳 (Zhang et al., 2015; Conneau et al., 2016; Le et al., 2017) [28, 29, 30]。

層連接

訓練深度神經網路時,可以使用一些核心技巧避免梯度消失問題。不同的層和連接因此被提出來了,這裡我們將討論 3 點:i) Highway 層,ii) 殘差連接(residual connection),iii) 密集型殘差連接。

Highway 層:它受到 LSTM 的門控機制所啟發 (Srivastava et al., 2015) [1]。首先讓我們假設一個單層的 MLP,它將一個非線性 g 的仿射變換應用到其輸入 x:

Highway 層接著計算以下函數:

其中 t=σ(WTx+bT) 被稱作變換門(transform gate),(1?t) 被稱作進位門(carry gate)。我們可以看到,Highway 層和 LSTM 門很相似,因為它們自適應地把輸入的一些維度直接傳遞到輸出。

Highway 層主要用於語言建模,並取得了當前最佳的結果 (Kim et al., 2016; Jozefowicz et al., 2016; Zilly et al., 2017) [2, 3, 4],但它同時也用於其他任務,如語音識別 (Zhang et al., 2016) [5]。想了解更多相關信息和代碼,可查看 Sristava 的主頁(http://people.idsia.ch/~rupesh/very_deep_learning/)。

殘差連接:殘差連接(He et al., 2016)[6] 的首次提出是應用於計算機視覺,也是計算機視覺在 ImageNet 2016 奪冠的最大助力。殘差連接甚至比 Highway 層更直接。我們使用代表當前層的指數 L 來增加之前的層輸出 h。然後,殘差連接學習以下函數:

僅通過一個快捷連接,殘差連接即可把之前層的輸入添加到當前層。這一簡單的更改緩解了梯度消失問題,因為層級不能變得更好,模型可以默認使用恆等函數(identity function)。

密集型殘差連接:密集型殘差連接 (Huang et al., 2017) [7] ( CVPR 2017 最佳論文獎)從每一個層向所有隨後的層添加連接,而不是從每一個層向下一個層添加層:

密集型殘差連接已成功應用於計算機視覺,也被證明在神經機器翻譯方面的表現持續優於殘差連接 (Britz et al., 2017) [27]。

Dropout

儘管在計算機視覺領域的多數應用中,批歸一化已使其他正則化器變得過時,但是 dropout (Srivasta et al., 2014) [8] 依然是應用於 NLP 深度神經網路中的正則化器。0.5 的 dropout 率表明其在絕大多數場景中依然高效 (Kim, 2014)。近年來,dropout 的變體比如適應性 dropout(Ba Frey, 2013) [9]和進化 dropout (Li et al., 2016) [10] 已被提出,但沒有一個在 NLP 社區中獲得廣泛應用。造成這一問題的主要原因是它無法用於循環連接,因為聚集 dropout masks 會將嵌入清零。

循環 dropout:循環 dropout(Gal Ghahramani, 2016)[11] 通過在層 ll 的時間步中應用相同的 dropout masks 來解決這一問題。這避免了放大序列中的 dropout 噪音,並為序列模型帶來了有效的正則化。循環 dropout 已在語義角色標註 (He et al., 2017) 和語言建模 (Melis et al., 2017) [34] 中取得了當前最佳的結果。

多任務學習

如果有額外的數據,多任務學習(MTL)通常可用於在目標任務中提升性能。

輔助目標(auxiliary objective):我們通常能找到對我們所關心的任務有用的輔助目標 (Ruder, 2017) [13]。當我們已經預測了周圍詞以預訓練詞嵌入 (Mikolov et al., 2013) 時,我們還可以在訓練中將其作為輔助目標 (Rei, 2017) [35]。我們也經常在序列到序列模型中使用相似的目標(Ramachandran et al., 2016)[36]。

特定任務層:儘管把 MTL 用於 NLP 的標準方法是硬參數共享,但允許模型學習特定任務層很有意義。這可通過把一項任務的輸出層放置在較低級別來完成 (S?gaard Goldberg, 2016) [47]。另一方法是誘導私有和共享的子空間 (Liu et al., 2017; Ruder et al., 2017) [48, 49]。

注意力機制

注意力機制是在序列到序列模型中用於注意編碼器狀態的最常用方法,它同時還可用於回顧序列模型的過去狀態。使用注意力機制,系統能基於隱藏狀態 s_1,...,s_m 而獲得環境向量(context vector)c_i,這些環境向量可以和當前的隱藏狀態 h_i 一起實現預測。環境向量 c_i 可以由前面狀態的加權平均數得出,其中狀態所加的權就是注意力權重 a_i:

注意力函數 f_att(h_i,s_j) 計算的是目前的隱藏狀態 h_i 和前面的隱藏狀態 s_j 之間的非歸一化分配值。在下文中,我們將討論四種注意力變體:加性注意力(additive attention)、乘法(點積)注意力(multiplicative attention)、自注意力(self-attention)和關鍵值注意力(key-value attention)。

加性注意力是最經典的注意力機制 (Bahdanau et al., 2015) [15],它使用了有一個隱藏層的前饋網路來計算注意力的分配:

其中 v_a 和 W_a 是所學到的注意力參數,[* ; *] 代表了級聯。類似地,我們同樣能使用矩陣 W_1 和 W_2 分別為 h_i 和 s_j 學習單獨的轉換,這一過程可以表示為:

乘法注意力(Multiplicative attention)(Luong et al., 2015) [16] 通過計算以下函數而簡化了注意力操作:

加性注意力和乘法注意力在複雜度上是相似的,但是乘法注意力在實踐中往往要更快速、具有更高效的存儲,因為它可以使用矩陣操作更高效地實現。兩個變體在低維度 d_h 解碼器狀態中性能相似,但加性注意力機制在更高的維度上性能更優。緩解這一現象的方法是將 f_att(h_i,s_j) 縮放到 d_h^(-1/2) 倍 (Vaswani et al., 2017) [17]。

注意力機制不僅能用來處理編碼器或前面的隱藏層,它同樣還能用來獲得其他特徵的分布,例如閱讀理解任務中作為文本的詞嵌入 (Kadlec et al., 2017) [37]。然而,注意力機制並不直接適用於分類任務,因為這些任務並不需要情感分析(sentiment analysis)等額外的信息。在這些模型中,通常我們使用 LSTM 的最終隱藏狀態或像最大池化和平均池化那樣的聚合函數來表徵句子。

自注意力機制(Self-attention)通常也不會使用其他額外的信息,但是它能使用自注意力關注本身進而從句子中抽取相關信息 (Lin et al., 2017) [18]。自注意力又稱作內部注意力,它在很多任務上都有十分出色的表現,比如閱讀理解 (Cheng et al., 2016) [38]、文本繼承 (textual entailment/Parikh et al., 2016) [39]、自動文本摘要 (Paulus et al., 2017) [40]。

我們能計算每個隱藏狀態 h_i 的非歸一化分配值從而簡化加性注意力:

在矩陣形式中,對於隱藏狀態 H=h_1,…,h_n,我們能通過以下形式計算注意力向量 a 和最後的句子表徵 c:

我們不僅可以抽取一個向量,同時還能通過將 v_a 替代為 V_a 矩陣而執行一些其他注意力特徵,這可以令我們抽取注意力矩陣 A:

在實踐中,我們可以執行以下的正交約束而懲罰計算冗餘,並以 Frobenius 範數平方的形式鼓勵注意力向量的多樣性:

Vaswani et al. (2017) 同樣使用了類似的多頭注意力(multi-head attention)。

最後,關鍵值注意力 (Daniluk et al., 2017) [19] 是最近出現的注意力變體機制,它將形式和函數分開,從而為注意力計算保持分離的向量。它同樣在多種文本建模任務 (Liu Lapata, 2017) [41] 中發揮了很大的作用。具體來說,關鍵值注意力將每一個隱藏向量 h_i 分離為一個鍵值 k_i 和一個向量 v_i:[k_i;v_i]=h_i。鍵值使用加性注意力來計算注意力分布 a_i:

其中 L 為注意力窗體的長度,I 為所有單元為 1 的向量。然後使用注意力分布值可以求得環境表徵 c_i:

其中環境向量 c_i 將聯合現階段的狀態值 v_i 進行預測。

最優化

最優化演算法和方案通常是模型的一部分,並且常常被視為黑箱操作。有時演算法輕微的變化,如在 Adam 演算法中減少超參數β2 的值 (Dozat Manning, 2017) [50] 將會造成優化行為的巨大改變。

Adam 方法 (Kingma Ba, 2015) [21] 是使用最廣泛、最常見的優化演算法,它通常也作為 NLP 研究員的優化器。Adam 方法要明顯地比 vanilla 隨機梯度下降更優秀,並且其收斂速度也十分迅速。但近來有研究表明通過精調並帶動量的梯度下降方法要比 Adam 方法更優秀 (Zhang et al., 2017) [42]。

從優化方案來說,因為 Adam 方法會適應性地為每一個參數調整學習速率 (Ruder, 2016) [22],所以我們可以使用 Adam 方法精確地執行 SGD 風格的退火處理。特別是我們可以通過重啟(restart)執行學習速率退火處理:即設定一個學習速率並訓練模型,直到模型收斂。然後,我們可以平分學習速率,並通過載入前面最好的模型而重啟優化過程。在 Adam 中,這會令優化器忘記預訓練參數的學習速率,並且重新開始。Denkowski Neubig (2017) [23] 表示帶有兩個重啟和學習速率退火處理的 Adam 演算法要比帶有退火處理的 SGD 演算法更加優秀。

集成方法

通過平均多個模型的預測將多個模型組合為一個集成模型被證明是提高模型性能的有效策略。儘管在測試時使用集成做預測十分昂貴,最近提取方面的一些進展允許我們把昂貴的集成壓縮成更小的模型 (Hinton et al., 2015; Kuncoro et al., 2016; Kim Rush, 2016) [24, 25, 26]。

如果評估模型的多樣性增加 (Denkowski Neubig, 2017),集成是確保結果可靠的重要方式。儘管集成一個模型的不同檢查點被證明很有效 (Jean et al., 2015; Sennrich et al., 2016) [51, 52],但這種方法犧牲了模型的多樣性。周期學習率有助於緩解這一影響 (Huang et al., 2017) [53]。但是,如果資源可用,我們更喜歡集成多個獨立訓練的模型以最大化模型多樣性。

超參數優化

我們可以簡單地調整模型超參數從而在基線上獲得顯著提升,而不僅僅只是使用預定義或現有的超參數來訓練模型。最近 Bayesian Optimization 的新進展可以用於在神經網路黑箱訓練中優化超參數 (Snoek et al., 2012) [56],這種方法要比廣泛使用的網格搜索高效地多。LSTM 的自動超參數調整已經在語言建模產生了最佳的性能,遠遠勝過其他更複雜的模型 (Melis et al., 2017)。

LSTM 技巧

學習初始狀態:我們通常初始化 LSTM 狀態為零向量。但我們可以將初始狀態看作參數進行優化,而不是人為地調整來提升性能。這一方法十分受 Hinton 的推薦。關於這一技巧的 TensorFlow 實現,詳見:https://r2rt.com/non-zero-initial-states-for-recurrent-neural-networks.html

嘗試輸入和輸出嵌入:適合於輸入和輸出嵌入在 LSTM 模型中佔了絕大多數參數數量的情況。如果 LSTM 在語言建模中預測辭彙,輸入和輸出參數可以共享 (Inan et al., 2016; Press Wolf, 2017) [54, 55]。這一技巧在不允許學習大規模參數的小數據集中十分有用。

梯度範數截斷(Gradient norm clipping):降低梯度消失風險的一個方法是截斷其最大值 (Mikolov, 2012) [57]。但是這並沒有持續提升性能(Reimers Gurevych, 2017)。與其獨立地截斷每個梯度,截斷梯度的全局範數 (Pascanu et al., 2013) 反而會帶來更加顯著的提升(這裡有一個 Tensorflow 實現:https://stackoverflow.com/questions/36498127/how-to-effectively-apply-gradient-clipping-in-tensor-flow)。

下投影(Down-projection):為了進一步減少輸出參數的數量,LSTM 的隱態可以被投影到更小的尺寸。這對帶有大量輸出的任務尤其有用,比如語言建模(Melis et al., 2017)。

特定任務的最佳實踐

下面,我們要介紹特定任務的最佳實踐。大部分模型在執行特定類型的單項任務時表現很好,部分模型可以應用於其他任務,不過在應用之前需要驗證其性能。我們還將討論以下任務:分類、序列標註、自然語言生成(NLG)和自然語言生成的特殊案例神經機器翻譯。

分類

由於卷積操作更加高效,近期 CNN 應用範圍擴大,成為處理 NLP 中分類任務的通用方法。下面的最佳實踐和 CNN 相關,可選擇多個最優超參數(optimal hyperparameter)。

  • CNN 過濾器:使過濾器大小接近最優過濾器大小,如 (3,4,5) 性能最佳(Kim, 2014; Kim et al., 2016)。特徵映射的最佳數量範圍是 50~600(Zhang Wallace, 2015)[59]。
  • 聚合函數(Aggregation function):1-最大池化優於平均池化和 k-最大池化(Zhang Wallace, 2015)。

序列標註

序列標註在 NLP 中非常普遍。現有的很多最佳實踐都是模型架構的一個環節,下列指南主要討論模型輸出和預測階段。

標註策略(Tagging scheme): 對於將標籤分配到文本分隔的任務,不同的標註策略均可採用。比如:BIO,分隔的第一個符號處標註 B-tag,其他符號處標註 I-tag,分隔外的符號標註 O-tag;IOB,和 BIO 相似,不同之處在於如果前面的符號屬於相同的類別,但不屬於同一個分隔,則使用 B-tag 來標註;IOBES,還需要在單個符號實體處標註 S-tag,每個分隔的最後一個符號處標註 E-tag。IOBES 和 BIO 的性能相似。

條件隨機場輸出層(CRF output layer): 如果輸出之間存在依賴,如在命名實體識別(named entity recognition)中,可以用線性鏈條件隨機場(linear-chain conditional random field)代替最後的 softmax 層。經證實,這種方法對於要求對約束進行建模的任務有持續改善的效果(Huang et al., 2015; Max Hovy, 2016; Lample et al., 2016)[60, 61, 62]。

約束解碼(Constrained decoding): 除了條件隨機場輸出層以外,還可用約束解碼來排除錯誤排序,即不產生有效的 BIO 過渡(BIO transition)(He et al., 2017)。約束解碼的優勢在於可以執行隨意約束(arbitrary constraint),如特定任務約束或句法約束。

自然語言生成

多數現有最佳實踐可用於自然語言生成(NLG)。事實上,目前出現的很多技巧都植根於語言建模方面的進步,語言建模是最典型的 NLP 任務。

建模覆蓋率(Modelling coverage): 重複是 NLG 任務的一大難題,因為當前的模型無法很好地記憶已經產生的輸出結果。在模型中直接設置建模覆蓋率是解決該問題的好方法。如果提前知道哪些實體應該出現在輸出結果中(就像菜譜中的調料),則需要使用一個檢查表(checklist)(Kiddon et al., 2016)[63]。如果使用注意力機制,我們可以追蹤覆蓋率向量 c_i,它是過去的時間步上注意力分布 a_t 的總和(Tu et al., 2016; See et al., 2017)[64, 65]:

該向量可以捕捉我們在源語言所有單詞上使用的注意力。現在我們可以在覆蓋率向量上設置加性注意力(additive attention),以鼓勵模型不重複關注同樣的單詞:

此外,我們可以添加輔助損失(auxiliary loss),該損失可以捕捉我們想關注的特定任務的注意力行為:我們希望神經機器翻譯可以做到一對一對齊(one-to-one alignment);如果最後的覆蓋率向量多於或少於每一個指數上的覆蓋率向量,那麼模型將被罰分(Tu et al., 2016)。總之,如果模型重複處理同樣的位置,我們就會懲罰該模型(See et al., 2017)。

神經機器翻譯

  • 雖然神經機器翻譯只是 NLG 的一個分支,但 NMT 獲得了大量關注,有許多方法專門為該任務開發。相似地,許多最佳實踐或超參數選擇只能應用到 NMT 領域。
  • 嵌入維度(Embedding dimensionality):2048 維嵌入的性能最佳,但很少達到該效果。128 維嵌入的性能卻出乎意料地好,收斂速度幾乎達到之前的 2 倍(Britz et al., 2017)。
  • 編碼器和解碼器深度: 編碼器的深度無需超過 2?4 層。深層模型性能優於淺層模型,但多於 4 層對解碼器來說沒有必要(Britz et al., 2017)。
  • 方向性(Directionality):雙向編碼器性能稍好於單向編碼器。Sutskever et al.(2014)[_67_] 提出顛倒源語言的順序,以減少長期依賴的數量。使用單向編碼器顛倒源語言順序優於未顛倒語序(Britz et al., 2017)。
  • 束搜索策略(Beam search strategy):大小 10、長度歸一化罰項為 1.0 的中型束(Wu et al., 2016)性能最佳(Britz et al., 2017)。
  • 子詞翻譯(Sub-word translation):Senrich et al. (2016) [66] 提出根據位元組對編碼(byte-pair encoding/BPE)將單詞分隔成子詞(sub-word)。BPE 迭代合併出現頻率高的符號對(symbol pair),最後將出現頻率高的 n 元合併成一個單獨的符號,進而有效去除非詞表詞(out-of-vocabulary-word)。該技術最初用來處理罕見單詞,但是子詞單元的模型性能全面超過全詞系統,32000 個子詞單元是最高效的單詞數量(Denkowski Neubig, 2017)。

結語

我確定這份清單上一定有遺漏的最佳實踐。相似地,也有很多我不熟悉的任務,如解析、信息提取,我沒辦法做出推薦。我希望本文對開始學習新的 NLP 任務有所幫助。即使你對這裡列出的大部分內容都很熟悉,我也希望你能夠學到一些新的東西或者重新掌握有用的技巧。

本文來源於微信公眾號:機器之心(almosthuman2014),如需轉載,請私信聯繫,十分感謝。


看Coursera相關的課程,或參考:Manning and Shcutze, Foundations of Statistical Natural Language Processing
但更重要的還是實戰經驗!


說說自己的歷程吧。
我是一名非科班的自然語言,機器學習,數據挖掘關注者。
因工作關係,5年前需要做與自然語言處理的項目。當時的項目老大先是扔給我一本書《統計自然語言處理》,直接給我看蒙了。不能說一點都不懂,但是看的雲里霧裡,不知道get幾層。
但看這本書的過程中,我狂搜了些自然語言處理的課件,有北大的,中科院的,都寫的很好,從語言模型開始。從分詞,標註,語法樹,語意等等。也大體知道自然語言處理,分詞法,語法,語義。然後是各種應用,信息檢索,機器翻譯等自然語言經典應用問題。
斷斷續續做了些小項目,基於語言模型的拼音輸入法,仿照sun"pinyin寫的,他們的blog寫的很詳細,從模型建模,到平滑處理,很詳細,我也用python實現了一遍,當時這個輸入法配合上一個簡單的ui還在部門內部推廣了,搞了個基於雲的拼音輸入法,獲得個小獎品,很是洋洋得意。這個過程中,我看著sunpinyin的blog, 回過頭又去看課件,去了解很細節的問題,如拉普拉斯平滑,回退平滑的細節等,收穫很多。
後來老大告訴我,看自然語言問題時,可以找博士論文先看,因為博士論文一般都會來龍去脈講的非常詳細,看完一遍之後基本上這個問題就了解的差不多,然後就是follow業界的進度,那就是關注各種會議和期考,可自行百度和谷歌。
搞好這個拼音輸入法,進入實際項目,做一套中文自然語言的基礎處理引擎,好在不是讓我一個人來,公司開始找大學合作,我做企業項目負責跟進的,大學負責具體演算法,我跟著自己調查分詞標註演算法,了解了有基於詞典的,語言模型的,hmm,crf的,那個crf的,我始終搞不大明白,後來先了解了hmm的vertbe演算法,em演算法,大學的博士給我講了一遍crf,終於豁然開朗。還把解碼過程寫到了http://52nlp.cn上,關注的人還可以。從那以後我感覺我就真入門了。在來一個什麼問題,我基本上也有套路來學習和研究了。

總結下,
1.先各種課件,加那本自然語言的書,搞清楚自然語言大概都有哪些問題,主要是為了解決什麼問題的。
2.基於某個問題看博士論文,了解來龍去脈。然後follow業界進度。
3.找各種資源,會議的,期刊的,博客http://52nlp.cn(不是打廣告,我不是博主,不過博客真心不錯)
4.微博上關注各種這個領域的大牛,他們有時候會推薦很多有用的資料。
當然,數學之美 我也讀了,確實不錯。


上面好多大佬給推薦了很多很好的教程,不強答了。
個人覺得NLP如果不是做學術研究鑽演算法的,其實很多艱深的著作看過不用的話過段時間就忘,而且容易喪失興趣。說到最快入門的話,分情況討論:
1 手頭有個項目,需要快速自學完成。舉個例子,比如接到任務要做一個sentiment analysis的系統。先去網上,CSDN,博客園,知乎,quora,等等,找一篇該主題的入門引導教程,看看有什麼入門級讀物,經典論文可以看,先把這些基礎資料過一遍,比如對於sentiment analysis,一般很快就會找到一本Bing Liu寫的一百多頁的小冊子,很入門。然後看見基礎入門材料的過程中,看到有演算法有包可以用都記下來,一個個試。看完這些基本就知道項目怎麼做了,如果對現有的包不滿意,覺得自己寫會更好,就按著你的思路鑽演算法的本質,充分利用樓上大佬們推薦的經典教材,找到相關的部分看,搞懂了之後自己寫。這時候,你對這個領域就算是入門了。
2 手頭沒有項目,純想學NLP這個技能,比如找工作想多點些技能樹。這種情況下,去找個項目做,比如kaggle,codeproject等,或者github上貢獻代碼。活兒攬下來後,按1中的步驟走。
3 理論派,興趣在於演算法,純希望了解NLP的演算法在數學上是怎麼work的。這種情況,數學好時間足的話直接找本大佬們推薦的教材開始看,不然的話找一個好的入門課程,然而印象中在coursera上好像沒怎麼發現過,但可以推薦CMU的LTI開的algorithms for NLP,網上應該找得到這個課的公共主頁,上面有課件。不過看懂這個課也是需要數學基礎的。按著這個課件把主要的topic都cover一遍,想看深一點的就到推薦的經典教材里去找來看。


1、 《自然語言處理綜論》(Speech and Language Processing: An
Introduction to Natural Language Processing, Computational Linguistics and
Speech Recognition)
  這本書的權威自不用說,譯者是馮志偉老師和孫樂老師,當年讀這本書的時候,還不知道馮老師是誰,但是讀起來感覺非常好,想想如果沒有在這個領域積攢多年的實力,是不可能翻譯的這麼順暢的。這本書在國內外的評價都比較好,對自然語言處理的兩個學派(語言學派和統計學派)所關注的內容都有所包含,但因此也失去一些側重點。從我的角度來說更偏向於統計部分,所以需要了解統計自然語言處理的讀者下面兩本書更適合做基礎閱讀。不過這本書的N-gram語言模型部分寫得非常不錯,是SRILM的推薦閱讀參考。
2、《統計自然語言處理基礎》(Foundations of Statistical Natural
Language Processing)
  我比較喜歡這本書,這兩年的學習過程中也經常拿這本書作為參考,可能與我做統計機器翻譯有關吧。看china
pub上的評論說這本書的翻譯比較差,自己的感覺是還行。當然,這是國內翻譯圖書的一個通病:除了很難有翻譯的非常好的書外,另外一個原因就是滯後性。如果e文足夠好的壞,就及時看英文版吧。這本書在統計基本部分的介紹很不錯,另外n元語法部分講得也比較好,也是SRILM的推薦閱讀。
3、《統計自然語言處理》
  這是北京自動化所宗成慶老師今年5月出版的一本專著,我有幸較早的閱讀了這本書的很多章節。一個很強的感覺是:如果你想了解相關領域的國內外最新進展,這本書非常值得一讀。上面兩本書在由於出版稍早的緣故,很多領域最新的方法都沒有介紹。而這本書剛剛出版,宗老師對國內外現狀把握的也比較好,因此書中充分體現了這方面的信息。另外統計機器翻譯這一部分寫得很詳細很不錯,這可能與宗老師亦是這個領域的研究者有關吧。
4、《計算機自然語言處理》
  這是我最早看的一部自然語言處理方面的書籍,和上面幾部大部頭的書籍相比,這本書很薄,可以很快的看完。書的內容我都有點忘了,但是印象中可以在每個章節看到國內這個領域的研究歷史和相關單位。這時才發現母校HIT在這個領域的超強實力,只是可惜這時候已經離開冰城了。
  這些書籍怎麼讀都行,泛覽也罷,精讀也行,只要有時間,多讀書是沒壞處的。我自己的經驗是,先泛泛的瀏覽或閱讀一篇,對於比較晦澀的部分可以先跳過去,然後對自己感興趣的領域或者將要從事的領域的相關章節進行精讀,當然,書籍一般在開始的幾個章節講些基礎性的知識,這部分最好也仔細揣摩一下。真正要對自己研究的領域深刻了解,還得好好讀一下本領域的相關論文。


在知乎上搜索相關問題,有人推薦《數學之美》,之前粗略看過一次,這次想重新看一下並且做個讀書筆記。下面是關於自然語言理解方面的一些讀書筆記和自己的思考。


一. 自然語言處理歷史:

自然語言處理最初發展的20多年裡,相關科學家都極力通過電腦模擬人腦,試圖用這種方式來處理人類語言,但是這種方式被證明是行不通的,成功幾乎為零。NLP發展的第二階段是70年代之後,科學家們終於找到了基於數學模型和統計的方法。

第一階段的時候,學術界對人工智慧和自然語言理解的普遍認識是:要讓機器完成翻譯或者語音識別等等,必須先讓計算機理解自然語言,就像人類一樣去理解這些語言,這顯然是做不到的。即便在可預見的將來,這也必定是一件不太現實的事情。

第二階段,比如機器在翻譯的過程中,並沒有理解這句話的意思,它只是做了一種統計上的歸納而已。機器依舊是機器。

基於規則的分析方法,需要將現有的句法系統按照句子成分劃分成一個一個單位,而這會隨著句子的複雜多樣化句子的劃分複雜度幾何級上升,並且沒有上下文的幫助句子詞義的多樣性同樣限制了規則分析方法的發展。比如The pen is in the box.和The box is in the pen.按照規則來分析該句子根本不可能獲得語義,必須依靠常識來得到該句子的真正含義,但是基於統計的方法可以依靠上下文對該語義做一個合理的預估。基於規則的方法完全從該單獨的句子著手,根本不管上下文。但是這樣也還是沒有讓基於統計的方法快速發展起來,主要原因在於基於統計的方法需要大量的訓練數據,這在當時來說是達不到的。

二.統計語言模型:

自然語言逐漸演變成為一種上下文相關的信息表達和傳遞的方式,計算機就用統計語言模型去表徵自然語言這種上下文相關的特性。

一個句子S=(w1,w2,w3…wn)由n個片語成,我們要弄清該句子是否是一個合乎實際的句子,可以計算該句子在現實情況下的概率,最最簡單的想法是把人類所有句子統計一遍,然後再計算這個句子的概率,但是這顯然是行不通的。一個可行的方法是把這個句子分成n個詞(對於中文來說,這就是中文分詞研究的東西),然後再計算這n個詞按照該順序組成這個句子的概率大小。可以表示如下:

P(S)=P(w_{1} )P(w_{2}|w_{1})P(w_{3}|w_{2},w_{1})...P(w_{n}|w_{n-1},w_{n-2},...,w_{1})

這個概率計算的複雜度會隨著n的增大指數上升。因此引入齊次馬爾科夫性假設,即假設一個詞的出現只與其前面一個詞的出現有關,而與更前面的詞無關,這樣概率計算可以簡化為如下:

P(S)=P(w_{1} )P(w_{2}|w_{1})P(w_{3}|w_{2})...P(w_{n}|w_{n-1})

這樣的模型稱為二元模型,用更一般的表示方法為:

P(w_{i} )=P(w_{i}|w_{i-1})

但是二元模型顯然太過於簡單草率,所以有了高階模型的出現,n階模型表示一個詞的出現與其前面的n-1個詞有關。表示為:

P(w_{i}|w_{i-1},w_{i-2},...,w_{1} )=P(w_{i}|w_{i-1},w_{i-2},...,w_{i-n+1})

一般由於計算複雜度的問題,大多數情況下用3階模型,谷歌的用到了4階模型。

接下來的問題是,由於用來訓練模型的語料庫(corpus)太少而出現的零概率情況如何處理?

這裡有一個古德-圖靈公式,基本思路是當詞語對出現次數大於某一閾值時,利用條件概率計算出來的頻率根據大數定理就當做概率(因為只有大於某一閾值時我們才有充分理由相信大數定理的條件被滿足),當出現頻數小於該閾值但又大於零的頻率,則相應的下調該頻率值,因為這個時候大數定律成立的條件是沒有被滿足的,並且出現次數越少,下調頻率越多,最後把這個下調的頻率當做所求的概率,最後對於零出現的情況,則將這些下調的總和平均分配給零出現的次數,以保證概率總和為1。

三.中文分詞問題:

漢語和英語有分割每個詞的空格不一樣,漢語中所有的詞都沒有明顯分界,所以必須解決中文分詞問題,最簡單的方法是查字典,基本思想是首先有一個中文詞語的字典庫,將一個句子從左掃描到末尾,遇到字典里有的詞之後就保存,規則是盡量找最長的詞,比如中國航天城,中是一個單字詞,先保存,繼續往下掃描,遇到國字,中和國可以組成一個更長的詞,因此最後保存中國這個詞,後面的航天城類似。查字典的處理方法簡單,但不夠準確。因為很多情況下並不是最長詞的分詞規則就是最適合的。

利用統計語言模型來處理中文分詞的第一人是郭進博士,基本思想是:假設一個句子有很多種分詞方法,則分別計算每種分詞方法對應的該句子概率。即:

P(S)=P(w_{1} )P(w_{2}|w_{1})P(w_{3}|w_{2},w_{1})...P(w_{n}|w_{n-1},w_{n-2},...,w_{1})

也就是說,利用每種分詞方法都可以計算該句子的概率。然後取最大概率對應的分詞方法。其本質上是一種極大似然估計。

四.關於郭進博士分詞方法的一些思考:(求指正)

在這裡我添加一些關於極大似然估計和極大後驗概率,以及頻率學派和貝葉斯學派這方面自己的思考,因為每次好不容易弄清楚了二者聯繫和區別之後,過段時間又混淆了。

在這裡,極大似然估計和極大後驗概率都是如下的應用場景:在給定觀測數據X的情況下,我們要求解產生該觀測數據X背後的參數,並且我們求得的參數並不是非此即彼的,也就是有一個概率分布來表徵每一個可能的參數。當然, 一般情況下我們都取概率最大的那個參數,即.

	heta =argmax P(	heta|X )=argmax frac{P(X|	heta)P(	heta)}{P(X)}  =argmaxP(X|	heta)P(	heta)=argmaxP(X|	heta)

極大似然估計和極大後驗概率的關鍵區別就在第三個等號這裡,這也是歷史上著名的頻率學派和貝葉斯學派爭論的地方,焦點就在於	heta 是否是一個常數,假如是常量的話,那麼第三個等號自然就成立了,這樣對於參數的估計就變成了極大似然估計(Maximum Likelihood),假如	heta 不為常量,那麼第三個等號就不能成立,對於參數的估計只能停留在倒數第二個式子這裡,這便是極大後驗概率(Maximum A Posteriori)。

在頻率學派的世界裡, 參數是常量只是未知。而在貝葉斯學派的世界裡,參數則不是常量。雙方曾經對這兩種觀點進行了激烈的爭論,這是後話不表。

回到我們這裡的問題,給定一個句子,我們要求解其分片語合,實際上給定的這個句子就是我們的觀測值,而分片語合便是待求解的參數,而上文說到的清華大學博士郭進所用到的方法便是:先求得每個分片語合下對應的句子概率,把最大概率對應的分片語合作為最終答案。很明顯存在如下這個公式:

	heta =argmax P(	heta|X )=argmaxP(X|	heta)

所以我把這個歸為本質上的極大似然估計。

中文分詞並不是只能應用在中文領域,而是根據特定場合同樣可以應用在字母語言的領域,比如英語片語的分割,手寫句子的識別(因為手寫英文句子的空格不那麼明顯)等等。

中文分詞已經發展到相當高的階段,目前只是做一些完善和添加新詞的工作,但是也存在一些工程實現方面的取捨問題,主要有兩點:

1.分詞的一致性,對於同樣一個句子,每個人的分詞方法不一樣,不能說哪種分詞方法更優,只能說在具體應用場景里存在一種最優的分詞方法;

2.分詞的顆粒度問題,和一致性問題一樣,不同的應用場景適合用不同的顆粒度,分詞器在設計的時候一般會全面兼顧顆粒度小和顆粒度大的情況,在具體問題的時候再進行相應的取捨。


個人覺得可以先完整過一遍NLP的過程,自己經歷過一遍,就可以更好了解怎麼操作了。在經歷的同時,也可以按需補充自己的知識。

放一個Github,從語料庫,特徵選取,到演算法對比,評價指標,還附帶參考論文,可以試著跑一跑

GitHub - ZixuanKe/Ch2r_ood_understanding


順便推薦課程 coursera上michael collins 的課程Coursera.org
和他寫的一系列文檔。Michael Collins


我感覺是沒有快速入門的方法
學習NLP是一個艱苦的過程,好多東西需要學,尤其是剛入門時。
如果實在想找到什麼材料幫助入門,不如去網上搜索一下各個學校相關專業的NLP101課件 然後跟著上面學就好了
重要的事情說三遍:
一定要做作業!一定要做作業!一定要做作業!


推薦一個博客52NLP和CS224D教程


入門的第一步是先把中文學好!
語言是一種約定俗成的社會現象,從表象上看其數據結構是一種序列,但是序列構成上中文和英語(也包括大量西方語言)有很大的不同。英語的基本語素是簡單的詞,詞性和句法成分較為清晰;而中文由於缺少空格,同時一詞多性情況非常多,因此兩種語言的研究方法並不完全相同。
脫離語言本身的特性研究NLP,都是緣木求魚的做法。
因此中文語言在處理時的第一步要做的就是分詞(在西文中 完全不用切分單詞)。高票答案 劉知遠博士在這塊有很深入的見解。通過詞序(詞向量)的聚類、詞頻的統計已經能發現不少有趣的語言現象。
分詞之後,更深入正如微軟亞洲研究院周博士所列,還有句法分析、信息抽取、語義理解、知識圖譜等多樣的研究方向。
因此 高票答案 @吳俁 等答主提到的國外的研究成果,雖然有一定的借鑒意義,但是建議入門上手後在辯證地閱讀,而不能作為入門第一步。


數學之美這書不錯,入門的話可以看,感覺通俗易懂啊


上一邊Collins的nlp課,看一遍他的講義就夠了


不明白為什麼那麼多人推薦《統計自然語言處理》。我覺得這本書就像作者自己的論文筆記,除了引用最新研究的成果比較多之外,沒看出有什麼亮點。所以看書的時候會覺得像在看論文。各種原理也是一筆帶過。舉個例子,打開概率圖那張看了前三頁,比綜述還綜述。和PRML的概率圖一章差了不是一個等級。要說NLP都是應用居多,然而看了這麼點就會調參寫系統了?別說NLP入門,我覺得概率圖都入不了門。綜上,不是說作者寫得不好,只是說這更像是作者自己的論文筆記,不是教材,更不適合入門,可以當小說看看,了解一下歷史。


推薦《數學之美》
推薦站點:
我愛自然語言處理


推薦閱讀:

截至 2016 年 3 月,機器學習、數據挖掘、計算機視覺等的泡沫有多大?
為什麼 Google 翻譯只重演算法不重語言學的語法結構和規則?
有誰可以解釋下word embedding?
深度學習應用在哪些領域讓你覺得「我去,這也能行!」?
如何評價季逸超、Peak Labs 和 Magi 搜索引擎?

TAG:自然語言處理 |